STM8单片机驱动LED驱动芯片TM1628的示例程序,四位共阴数码管,显示“1234”,开发环境为IAR FOR STM8,程序代码如下:

#include "iostm8s105s4.h>"

#define    uchar    unsigned char
#define    uint    unsigned int
//------显示任务变量定义-------------------------------------------------------
#define DIS_STB_H()        (PE_ODR|=0x20)               //SPI接口PE5
#define DIS_STB_L()        (PE_ODR&=0xdf)               //SPI接口
#define DIS_SCK_H()        (PC_ODR|=0x04)               //SPI接口PC2
#define DIS_SCK_L()        (PC_ODR&=0xfb)               //SPI接口
#define DIS_DIO_H()        (PC_ODR|=0x08)               //SPI接口PC3
#define DIS_DIO_L()        (PC_ODR&=0xf7)               //SPI接口
uchar Display_Value[4]={0,0,0,0};
const uchar DISP_TAB[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//0 ~ 9
const uchar DISP_POSITION[4]={0xc0,0xc2,0xc4,0xc6}; //显示地址

/*********************************************
* 发送一字节数据到TM1628
*********************************************/
void TM1628_Send_Byte(uchar dat)
{    
  uchar i;
  for (i = 0; i < 8; i++)
  {    
    DIS_SCK_L();    
    if (dat & 0x01)   
    {
      DIS_DIO_H();
    }
    else  
    {
      DIS_DIO_L();
    }
    dat >>= 1;
    DIS_SCK_H();
    }
}

/*********************************************
* 发送一字节命令到TM1628
*********************************************/
void TM1628_Send_Cmd(uchar dat)
{    
  uchar i;
  DIS_STB_L();
  for (i = 0; i < 8; i++)
  {    
    DIS_SCK_L();         
    if (dat & 0x01)
    {
      DIS_DIO_H();
    }
    else  
    {
      DIS_DIO_L();
    }
    dat >>= 1;    
    DIS_SCK_H();
  }
  DIS_STB_H();
  DIS_DIO_H();
}

/*********************************************
* 采用固定地址模式发送数据
*********************************************/
void Display_OneByte(uchar dat , uchar addr)
{
  TM1628_Send_Cmd(0x03);//显示模式是7位10段
  TM1628_Send_Cmd(0x44);//写数据到显示寄存器,固定地址模式
  DIS_STB_L();
  TM1628_Send_Byte(addr);//显示地址    STB下降沿时,默认第一个数据是命令
  TM1628_Send_Byte(dat); //数据    
  DIS_STB_H();
  TM1628_Send_Cmd(0x8f);//显示亮度设置,最亮
}

/*********************************************
* 更新需显示内容
*********************************************/
void Updata_Display(uint indata)
{
  Display_Value[0] = DISP_TAB[indata%10];    
  Display_Value[1] = DISP_TAB[(indata/10)%10];
  Display_Value[2] = DISP_TAB[(indata/100)%10];
  Display_Value[3] = DISP_TAB[indata/1000];
}

/*********************************************
* 将数据发送给四位数码管
*********************************************/
void Display(void)
{
  uchar num;
  for(num=0;num<4;num++)
  {    
    Display_OneByte(Display_Value[num] , DISP_POSITION[num]);    
  }
}

/**********************************************************                                    
* 初始化                                                                      
**********************************************************/
void Display_Init()
{    
  PC_DDR |= 0x0c;            // 配置PC端口的方向寄存器PC2/PC3输出
  PC_CR1 |= 0x0c;            // 设置PC2/PC3为推挽输出
  PC_CR2 &= 0xf3;    
    
  PE_DDR |= 0x20;            // 配置PE端口的方向寄存器PE5输出
  PE_CR1 |= 0x20;            // 设置PE5为推挽输出
  PE_CR2 &= 0xdf;    
 
  DIS_STB_H();
  DIS_DIO_L();
  DIS_SCK_L();
}

void CLK_Init(void)
{
  CLK_ECKR=0x03;//外部时钟寄存器 外部时钟准备就绪,外部时钟开
  CLK_SWCR=0x02;//切换控制寄存器 使能切换机制
  CLK_SWR=0xB4;//主时钟切换寄存器 选择HSE为主时钟源
  while (!(CLK_SWCR & 0x08));  
  //Wait for switch done 该语句如果没有则不能切
  //换成功,在仿真时使用内部时钟,停止仿真时,切换到外部时钟,但重新上电或复位后
  //又回到内部时钟状态(Debug模式)
  CLK_CSSR=0x01;//时钟安全系统寄存器    
}

void Delay_ms( uint ms )
{    
  uint i,j;
  for( j=0; j<ms; j++ )
  {    
    for( i=0; i<1000; i++ )
    {;}    
  }
}

void main( void )
{
  Delay_ms(200);
  CLK_Init();
  Display_Init();
  Updata_Display(1234);    //四位数码管显示1234
  Display();
  while(1)
  {

}
}

STM8单片机驱动TM1628的示例程序相关推荐

  1. 单片机显示屏c语言程序,51单片机驱动1602液晶显示器c程序

    51单片机驱动1602液晶显示器c程序 /* 程序效果:单片机控制液晶显示器1602显示字母数字,用户自行更改io 程序版权:http://www.51hei.com */ #include //头文 ...

  2. 51单片机驱动1602液晶显示器c程序---万年历

    /*该程序只需更改RW,RS E对应的引脚即可正常使用*/ #include <STC89C5xRC.H> #define LCD1602_RW   P36//定义引脚 #define L ...

  3. 定时器驱动数码管c语言程序,74hc595驱动数码管时间程序

    74hc595驱动数码管时间程序 这里是电路图: 下面是51单片机驱动74hc595芯片的程序: #include                            //包含51单片机的头文件 # ...

  4. 51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序

    51单片机 IIC OLED屏幕驱动+Proteus仿真+实物验证示例程序 Proteus仿真效果 注意点击运行仿真后,图像刷新出来比较慢. 示例主程序 #include "REG51.h& ...

  5. STM8单片机定时器驱动的深度解析

    上一节给大家介绍了基于标准库STM8单片机GPIO的驱动,本节课主要给大家介绍一下STM8定时器的驱动. 我们先打开STM8L10x单片机的规格书,简单的了解一下STM8L10X单片机的定时器功能. ...

  6. STM8单片机GPIO口的驱动深度解析

    上一节给大家介绍了STM8标准库的移植,本节课开始学习我们单片机的外设的驱动,单片机基本的外设资料包括GPIO.外部中断.定时器.串口等,本节先给大家介绍一下STM8单片机的GPIO口. 我们先不介绍 ...

  7. 单片机18b20c语言程序,AVR单片机控制DS18B20的示例C程序

    原标题:AVR单片机控制DS18B20的示例C程序 #include #include #include #include unsigned char data_H, data_L,wendu; un ...

  8. STC单片机驱动1.8‘TFT SPI屏幕示例模板(含资料包)

    STC单片机驱动1.8'TFT SPI屏幕示例模板(含资料包) 驱动演示 STC单片机采用的是: STC12C5A60S2,采用的自制开发板:<[开源]STC12C5A60S2开发板> 1 ...

  9. STC单片机驱动BLDC无刷直流电机(无HALL)官方示例

    STC单片机驱动BLDC无刷直流电机(无HALL)官方示例 示例代码在STC8系列文档第20章里面:http://www.stcmcudata.com/STC8F-DATASHEET/STC8H.pd ...

最新文章

  1. java getservername_Tomcat:getHeader(“主机”)与getServerName()
  2. 在家搭建大数据分布式计算环境!
  3. 轻松与外来客户进行REST通信
  4. JAVA进阶教学之(StringBuider进行字符串拼接)
  5. 剑指Offer面试题:30.第一个只出现一次的字符
  6. 谷歌中国开发者大会,感悟,激动
  7. tensorflow基础(2)-tf.argmax和axis
  8. gitlab和github一起使用
  9. Atitit 歌曲年份抓取的nlp ai项目 原理通过百度搜索,抓取第一页数据,正则数字,过滤年份。。 显示格式。。歌曲,年份,年份周围前后40字符,方便核对 通过百科抓取比较准确 红尘情歌
  10. 4.测试用例模板(p2p)
  11. 写给初学者:电气制图规范和图纸识读方法——第四期
  12. Angular Compile Error NG6002
  13. python支持复数类型以下说法错误的是_关于Python的数字类型,以下选项中描述错误的是...
  14. Java零基础学习-每日单词(日更)
  15. 第五篇 应用Java
  16. HeadFirst设计模式之代理模式
  17. 计算机网络密码凭据,电脑无法上网时总是提示需要输入网络密码如何解决
  18. 正则设置首字母大、小写
  19. mysql (1205, 'Lock wait timeout exceeded; try restarting transaction')
  20. win+D无法回到桌面

热门文章

  1. 网络对抗作业一——张驰
  2. linux:/var/log 日志多,如何处理?rsyslog,logrotate
  3. 达梦数据库(DM8)基本使用方式
  4. 【CC评网】2013.第39周 漂亮的作息表
  5. 鼠标单击、右击、双击、鼠标悬停、鼠标拖动
  6. PostgreSQL DBA(49) - Index(SP-GiST)
  7. 服务器经常自动断开ssh连接
  8. Visual C++/MFC入门教程
  9. C循环链表拉丁方阵问题
  10. 新手小白学Python.2