找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

LED驱动芯片(TM1650)的C51单片机程序例程

查看数: 15048 | 评论数: 10 | 收藏 21
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-7-24 19:21

正文摘要:

相信大家刚学习单片机的时候都用过数码管,那时候的数码管都是用单片机的IO口直接驱动的,用软件进行动态刷新,但是这样控制数码管是很占用单片机外部资源的,单片机的外部资源也是有限的,不能全部IO口来进行数码管 ...

回复

ID:59884 发表于 2023-8-17 13:41
请问楼主程序中DisPlay_t是什么?C++的关键字吗?keil编译不了。其实我一直很想吐槽国内编程论坛环境,放程序,基本都只放一段,或者根本没法运行的程序,或者编译好的固件。这样下来,编程技术好的人,根本不屑看。而基础差想学习的人看了,也很难弄得明白。而像Git Hub这样的论坛,基本上放的开源源程序都是完整的,能编译运行的,而且基本上注释也都比较详细。但也有很多国人,放上去的程序,大部分是无法直接编译运行的,或只有编译出的固件。这样干是想说明自己水平高吗?说实在的,如果实在怕别人学去了,可以不分享。也许只有他们明白,很多东西只有互相学习才会快速提升。我在此声明,我此番话,不是针对楼主。只是表达对目前编程论坛,共享学习环境现状的不满!
ID:388361 发表于 2022-11-9 11:10
目前在用TM1650設計案子,學習中
ID:16255 发表于 2022-9-20 11:21
本帖最后由 mengsiu 于 2022-9-20 11:25 编辑

发一段我以前写的TM1650的驱动程序:
  1. /*--------------------------------------------------------------------------
  2. TM1650.H
  3. 四位数码管驱动 TM1650 读写程序
  4. --------------------------------------------------------------------------*/
  5. #ifndef __TM1650_H__
  6. #define __TM1650_H__

  7. sbit CLK = P3^7;
  8. sbit DIO = P3^6;

  9. void Set1650(uchar add,uchar dat);
  10. uchar Scan_Key(void);

  11. uchar BL = 1;          //亮度等级
  12. uchar CODE[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9显示代码
  13.                                 // 0    1    2    3    4    5    6    7    8    9

  14. void Init1650(){
  15.         Set1650(0x48,(BL*16+0x01));//设定亮度,开显示八段显示方式,后一个字节中高位用于亮度,低位用于七段或八段显示方式和开关显
  16.                                                                 //如:0x71为七级亮度,八段显示方式,开显示;0x79为为七级亮度,七段显示方式,开显示
  17. }

  18. void Delay_us(uint i){ //us延时
  19.         for(;i>0;i--){
  20.                 _nop_();
  21.                 _nop_();
  22.                 _nop_();
  23.                 _nop_();
  24.                 _nop_();
  25.         }
  26. }

  27. void Start1650(void){//开始信号
  28.         CLK = 1;
  29.         DIO = 1;
  30.         Delay_us(5);
  31.         DIO = 0;
  32. }

  33. void Ask1650(void){ //ACK信号
  34.         uchar timeout = 1;
  35.         CLK = 1;
  36.         Delay_us(5);
  37.         CLK = 0;
  38.         while((DIO)&&(timeout<=100)){
  39.                 timeout++;
  40.         }
  41.         Delay_us(5);
  42.         CLK = 0;
  43. }

  44. void Stop1650(void){ //停止信号
  45.         CLK = 1;
  46.         DIO = 0;
  47.         Delay_us(5);
  48.         DIO = 1;
  49. }

  50. void WrByte1650(uchar oneByte){//写一个字节高位在前,低位在后
  51.         uchar i;
  52.         CLK = 0;
  53.         Delay_us(1);
  54.         for(i=0;i<8;i++){
  55.                 oneByte = oneByte<<1;
  56.                 DIO = CY;
  57.                 CLK = 0;
  58.                 Delay_us(5);
  59.                 CLK = 1;
  60.                 Delay_us(5);
  61.                 CLK = 0;
  62.         }
  63. }

  64. uchar Scan_Key(void){  // 按键扫描
  65.         uchar i;
  66.         uchar rekey;
  67.         Start1650();
  68.         WrByte1650(0x49);//读按键命令
  69.         Ask1650();
  70.         //DIO = 1;
  71.         for(i=0;i<8;i++){
  72.                 CLK = 1;
  73.                 rekey = rekey<<1;
  74.                 if(DIO){
  75.                 rekey++;
  76.                 }
  77.                 Delay_us(5);
  78.                 CLK = 0;
  79.         }
  80.         Ask1650();
  81.         Stop1650();
  82.         return(rekey);
  83. }

  84. void Set1650(uchar add,uchar dat){ //数码管显示
  85.                                                                 //写显存必须从高地址开始写
  86.         Start1650();
  87.         WrByte1650(add); //第一个显存地址
  88.         Ask1650();
  89.         WrByte1650(dat);
  90.         Ask1650();
  91.         Stop1650();
  92. }

  93. #endif
复制代码


ID:16255 发表于 2022-9-20 11:17
请注意!

TM1650并不是完完全全的I2C器件,只是指令与I2C类同而已,也不能与I2C器件装在同一线路上的。
ID:16255 发表于 2022-9-20 10:56
我也曾经用TM1650做过一个小时钟
http://www.51hei.com/bbs/dpj-121550-1.html
ID:472504 发表于 2022-9-20 08:38
请问结构体前两个0是干嘛的啊
ID:337139 发表于 2022-9-12 16:57
TM1650在数码管的驱动是很有优势的。
ID:884711 发表于 2022-8-30 10:22
这个1650不错,按键+数显,用起来非常方便。
ID:88023 发表于 2021-7-25 16:24
liesnake 发表于 2021-7-25 12:38
这个1650不错的,还可以做按键输入,用起来非常方便。我用这个做过一个数码管显示+按键输入的程序。

是的,他还有按键输入的功能,但是我很少用,我们的产品用触摸的比较多,用按键的比较少,基本上就是用来驱动数码管用的多一点
ID:319585 发表于 2021-7-25 12:38
这个1650不错的,还可以做按键输入,用起来非常方便。我用这个做过一个数码管显示+按键输入的程序。

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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