欢迎来到泰骏兴电子,大家有问题可以直接联系管理员QQ:233619809单片机 QQ群:59194556 各位游客也可以注册玩玩,享受更多权益。温馨提示:本网站仅提供平台学习以及渠道,一切后果自行承担,还望广大用户提高自我意识,请不要轻易相信他人,请不要轻易相信他人,请不要轻易相信他人。为了更好的管理论坛工作,所以现在使用邮箱注册,如果以前的邮箱不能修改的,请联系管理员代为修改

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 83|回复: 0

TM1681数码管驱动IC程序

[复制链接]
发表于 2023-6-13 10:07:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
TM1681具体信息请看TM1681详情

程序驱动的是共阳极0.8寸数码管,程序测试是没有什么问题的


.c文件

  1. #include "TM1681.h"


  2. u8 dm[][16]={
  3. 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,
  4. 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff,
  5. 0xff,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01,


  6. };


  7. void TM1621_io_init()
  8. {
  9.                         GPIO_InitTypeDef  GPIO_InitStructure;                                       
  10.                         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);       
  11.                        
  12.                         GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11;
  13.                         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                
  14.                         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;                       
  15.                         GPIO_Init(GPIOD, &GPIO_InitStructure);                       
  16. }
  17. /********************************************
  18. *
  19. 函数名:TM1681_Writer
  20. *描 述:HT_9x16发送数据函数,高位在前 按位算
  21. *参 数ata,cnt
  22. *返 回:
  23. ********************************************/
  24. void TM1681_Writer(u8 wdat, u8 cnt)
  25. {
  26.                         u8 i=0;
  27.                         for(i=0;i<cnt;i++)
  28.         {
  29.                         TM1681_RW_OFF();         //拉低
  30.                         if(wdat&0x80)TM1681_DATA_NO();
  31.                         else TM1681_DATA_OFF();
  32.                         TM1681_RW_NO();//延时2微妙
  33.                         wdat<<=1;  //准备下一位数据的发送      
  34.         }      
  35. }
  36. //*******************************
  37. //*函数名:TM1681_Write_Command
  38. //*描 述:发送命令函数
  39. //*参 数:cmd
  40. //*返 回:
  41. //********************************/                                        `
  42. void TM1681_Write_Command(u8 cmd)
  43. {
  44.                         TM1681_CS_L;      
  45.                         TM1681_Writer(0x80,3);              //命令码100      
  46.                         TM1681_Writer(cmd,9);               //命令数据,第9位为0      
  47.                         TM1681_CS_H;
  48. }


  49. /************************************************************
  50. *函数名:HT_9x16_Writer_AllDATA
  51. *描 述:指定地址写入连续数据,cnt为写入数据个数,按8位算
  52. *参 数:Addr,*p,cnt
  53. *返 回:
  54. *************************************************************/
  55. void TM1681_Continuously_Write_Address_Data(u8 Addr,u8 *p,u8 cnt)//指定起始地址连续写入数据,cnt为写入数据个数,每个数据按位算
  56. {      
  57.                         u8 i;      
  58.                         TM1681_CS_L;      
  59.                         TM1681_Writer(0xa0,3);      
  60.                         TM1681_Writer(Addr<<1,7);      
  61.                         for(i=0;i<cnt;i++)      
  62.         {               
  63.                         TM1681_Writer(*p,8);               
  64.                         p++;      
  65.         }      
  66.                         TM1681_CS_H;
  67. }

  68. /*******************************
  69. *函数名:HT_9x16_Writer_DATA
  70. *描 述:指定地址写入数据
  71. *参 数:Addr,Data
  72. *返 回:
  73. ********************************/
  74. void TM1681_Write_Address_Data(u8 Addr,u8 Data)
  75. {
  76.                         TM1681_CS_L;      
  77.                         TM1681_Writer(0xa0,3);                //命令码101      
  78.                         TM1681_Writer(Addr<<1,7);             //写入7位地址     

  79.                         TM1681_Writer(Data,4);                //写入4位数据      
  80.                         TM1681_CS_H;
  81. }
  82. /*******************************
  83. *函数名:HT_9x16_clr
  84. *描 述:清屏函数
  85. *参 数:
  86. *返 回:
  87. ********************************/
  88. void TM1681_Clear_Screen(void)
  89. {
  90.                         u8 i;      
  91.                         TM1681_CS_L;        //di..      
  92.                         TM1681_Writer(0xa0,3);      
  93.                         TM1681_Writer(0x00<<1,7);      
  94.                         for(i=0;i<36;i++)      
  95.         {      
  96.                         TM1681_Writer(0,8);      
  97.         }
  98.                         TM1681_CS_H;
  99. }
  100. //亮度
  101. void TM1681_Brightness(u8 q)
  102. {
  103.                         if(q>15){q=15;}
  104.                         q=q|0xf0;
  105.                         TM1681_Write_Command(PWM_DUTY&q);       //PWM亮度设置
  106. }
  107. //闪烁
  108. void TM1681_Flicker(_BLINK BLINK)
  109. {
  110.                         TM1681_Write_Command(BLINK);      //关闭闪烁
  111. }
  112. //COM口工作模式
  113. void TM1681_COM_Mode(_COM_Mode Com_mode)
  114. {
  115.                         TM1681_Write_Command(Com_mode);      
  116. }
  117. //系统时钟设置
  118. void TM1681_RC_MODE(_RC_MODE RC_MODE)
  119. {
  120.                         TM1681_Write_Command(RC_MODE);      
  121. }
  122. //最基础的参数设置
  123. void TM1681_init()
  124. {
  125.                         TM1621_io_init();
  126.                         TM1681_Write_Command(SYS_DIS);        //关闭HT_9x16内部RC时钟   
  127.                         TM1681_COM_Mode(COM8_ROW32_Nmos);
  128.                         TM1681_RC_MODE(RC_MASTER_MODE0);
  129.                         TM1681_Write_Command(SYS_EN);                //打开HT_9x16内部RC时钟
  130.                         TM1681_Write_Command(PWM_DUTY);       //PWM亮度设置         
  131.                         TM1681_Write_Command(BLINK_OFF);      //关闭闪烁  
  132.                         TM1681_Write_Command(LED_ON);                //打开LED显示

  133.                         TM1681_Clear_Screen();
  134. }
  135. //字节倒序程序
  136. u8 Byte_Reverse_Order(u8 data)
  137. {
  138.                         u8 q;
  139.                         u8 w=0;
  140.                         for(q=0;q<8;q++)
  141.         {
  142.                         w|=(data&0x01);
  143.                         data=data>>1|data<<7;
  144.                         w=w<<1|w>>7;
  145.         }
  146.                         w=w>>1|w<<7;
  147.                         return w;
  148. }
  149. //次段程序要求
  150. //ABCDEDF接在TM1681的COM0-COM7对应接上
  151. void TM1681_Write_Display_Address_Data(u8 add,u8 data)
  152. {
  153.                         u8 q;
  154.                         data=Byte_Reverse_Order(data)<<4|Byte_Reverse_Order(data)>>4;
  155.                         q=data<<4;
  156.                         TM1681_Write_Address_Data(add,q);                       
  157.                         TM1681_Write_Address_Data(add+1,data);
  158. }




复制代码
.h文件

  1. #ifndef __TM1681_H__
  2. #define __TM1681_H__



  3. #include "main.h"



  4. #define TM1681_CS                PDout(8)
  5. #define TM1681_CS_NO()        TM1681_CS=1
  6. #define TM1681_CS_OFF()        TM1681_CS=0
  7. #define TM1681_CS_H                TM1681_CS=1
  8. #define TM1681_CS_L                TM1681_CS=0

  9. #define TM1681_RW                PDout(10)
  10. #define TM1681_RW_NO()        TM1681_RW=1
  11. #define TM1681_RW_OFF()        TM1681_RW=0

  12. #define TM1681_DATA                PDout(11)
  13. #define TM1681_DATA_NO()        TM1681_DATA=1
  14. #define TM1681_DATA_OFF()        TM1681_DATA=0



  15. #define SYS_DIS                         0x00        //关闭系统时钟和 LED 循环
  16. #define SYS_EN                                0x01        //打开系统振荡器
  17. #define PWM_DUTY                        0xaf        //亮度设置       
  18. #define BLINK_OFF                        0x08        //闪烁
  19. #define LED_ON                                0x03        //开启 LED 循环



  20. extern u8 dm[4][16];

  21. //闪烁配置
  22. typedef enum
  23. {
  24.                         BLINK_0FF=0x08,//关闭闪烁
  25.                         BLINK_2Hz=0x09,//以每秒2Hz闪烁
  26.                         BLINK_1Hz=0x0a,//以每秒1hz闪烁
  27.                         BLINK_0_5Hz=0x0b,//以每秒0.5Hz闪烁
  28. }_BLINK;
  29. //COM工作模式配置
  30. typedef enum
  31. {
  32.                         COM8_ROW32_Nmos=0x40,                        //8个COM口,32个ROW口,Nmos输出
  33.                         COM16_ROW24_Nmos=0x44,                        //
  34.                         COM8_ROW32_Pmos=0x48,                        //
  35.                         COM16_ROW24_Pmos=0x4c,                        //
  36. }_COM_Mode;//COM口工作模式



  37. typedef enum
  38. {
  39.                         SLAVE_MODE=0x10,//外置振荡,时钟由 OSC 引脚输入,同步信号由 SYN 引脚输入
  40.                         RC_MASTER_MODE0=0x18,//内置振荡,OSC 保持低电平,同步信号在 SYN 引脚保持高电平,只应用于单芯片
  41.                         RC_MASTER_MODE1=0x19,//内置振荡,内部频率在 OSC 输出,同步信号在 SYN 引脚输出
  42.                         EXT_CLK_Master_Mode0=0x1c,//外置振荡,时钟由 OSC 引脚输入,同步信号由 SYN 引脚保持高电平,只引用于单芯片
  43.                         EXT_CLK_Master_Mode1=0x1e,//外置振荡,时钟由 OSC 引脚输入,同步信号由 SYN 引脚输出
  44.                        
  45. }_RC_MODE;





  46. void TM1681_init(void);//初始化
  47. void TM1681_Write_Address_Data(u8 Addr,u8 Data);//按地址写入数据
  48. void TM1681_Write_Display_Address_Data(u8 add,u8 data);//写入两位相邻地址的数据
  49. void TM1681_Brightness(u8 q);//16级亮度




  50. #endif





复制代码




高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|泰骏兴电子科技有限公司 ( 粤ICP备2023060260号-1 ) 单片机爱好者

GMT+8, 2025-10-31 17:13

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表