[技术讨论] TM1650数码管驱动程序

[复制链接]
1445|3
 楼主| taolibin_ 发表于 2022-2-16 14:56 | 显示全部楼层 |阅读模式
哪位大神有TM1650驱动4位共阴数码管的数码管驱动程序,急急急
zhaolei2612 发表于 2022-2-16 15:52 | 显示全部楼层
  1. void TM1650_Start()
  2. {
  3.         SDA(1);
  4.         CLK(1);
  5.         Delay_Us(4);
  6.         SDA(0);
  7.         Delay_Us(4);
  8.         CLK(0);//ǯλ×ÜÏß
  9.         Delay_Us(2);
  10. }

  11. void TM1650_Stop()
  12. {
  13.         CLK(0);
  14.         SDA(0);
  15.         Delay_Us(4);
  16.         CLK(1);
  17.         Delay_Us(4);
  18.         SDA(1);
  19.         Delay_Us(1);
  20. }

  21. void TM1650_Ack(void)
  22. {
  23.         SDA(1);
  24.         Delay_Us(2);
  25.         CLK(1);
  26.         Delay_Us(2);
  27.         CLK(0);
  28.         Delay_Us(2);
  29. }
  30. void TM1650_Write(unsigned char data)
  31. {
  32.         unsigned char i=0;
  33.         CLK(0);
  34.         for(i=0;i<8;i++)
  35.         {
  36.                 if((data&0x80)==0x80)
  37.                         SDA(1);
  38.                 else
  39.                         SDA(0);
  40.                 data=data<<1;
  41.                 Delay_Us(2);
  42.                 CLK(1);
  43.                 Delay_Us(2);
  44.                 CLK(0);
  45.                 Delay_Us(2);
  46.         }
  47. }
  1. void TM1650_Display(unsigned int data)
  2. {
  3.         unsigned char i,k[4];
  4.         k[0]=data/1000;
  5.         k[1]=data%1000/100;
  6.         k[2]=data%100/10;
  7.         k[3]=data%10;
  8.         for(i=0;i<3;i++)
  9.         {
  10.                  if(k[i]==0)
  11.                             k[i]=seg[10];
  12.                  else
  13.                             k[i]=seg[k[i]];
  14.         }
  15.         TM1650_Start();
  16.         TM1650_Write(0x48);
  17.         TM1650_Ack();
  18.         TM1650_Write(0x51);
  19.         TM1650_Ack();
  20.         TM1650_Stop();
  21.        
  22.         TM1650_Start();
  23.         TM1650_Write(0x68);
  24.         TM1650_Ack();
  25.         TM1650_Write(k[0]);
  26.         TM1650_Ack();
  27.         TM1650_Stop();
  28.        
  29.         TM1650_Start();
  30.         TM1650_Write(0x6A);
  31.         TM1650_Ack();
  32.         TM1650_Write(k[1]);
  33.         TM1650_Ack();
  34.         TM1650_Stop();

  35.         TM1650_Start();
  36.         TM1650_Write(0x6C);
  37.         TM1650_Ack();
  38.         TM1650_Write(k[2]);
  39.         TM1650_Ack();
  40.         TM1650_Stop();

  41.         TM1650_Start();
  42.         TM1650_Write(0x6E);
  43.         TM1650_Ack();
  44.         TM1650_Write(k[3]);
  45.         TM1650_Ack();
  46.         TM1650_Stop();
  47. }
zhaolei2612 发表于 2022-2-16 15:55 | 显示全部楼层
  1. const unsigned char Seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};
zhaolei2612 发表于 2022-2-16 16:01 | 显示全部楼层
显示函数中,data的超限没有做处理,会出错。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

50

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部