找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4724|回复: 9
收起左侧

请问TM1637数码管驱动芯片是IIC方式通讯吗

[复制链接]
ID:404720 发表于 2018-11-26 08:46 | 显示全部楼层 |阅读模式
iic接口有scl和sda,tm1637有clk和dio,但是感觉方法都一样啊
回复

使用道具 举报

ID:104472 发表于 2018-11-26 09:17 | 显示全部楼层
是IIC,可以详细看器件手册。
回复

使用道具 举报

ID:396960 发表于 2018-11-26 09:24 | 显示全部楼层
看完硬件再看看协议,开始信号,结束信号,应答...那应该就是和IIC差不了了
回复

使用道具 举报

ID:94031 发表于 2018-11-26 09:39 | 显示全部楼层
TM1637应该是iic接口。
回复

使用道具 举报

ID:155507 发表于 2018-11-26 09:54 | 显示全部楼层
TM1637是iic

  1. /*
  2. *版权信息: 深圳天微电子
  3. *文件名: TM1637
  4. *当前版本: 1.0
  5. *单片机型号: AT89S52
  6. *开发环境: Keil uVision3
  7. *晶震频率: 11.0592M
  8. *程序功能: 把TM1637 所有显示寄存器地址全部写满数据0xff,并开显示,然后再读按键值。
  9. */
  10. #include<reg52.h>
  11. #include<intrins.h>
  12. //定义端口
  13. sbit clk = P1^2;
  14. sbit dio = P1^1;
  15. ///=======================================
  16. void Delay_us(unsigned int i) //nus 延时
  17. {
  18.         for(;i>0;i--)
  19.         _nop_();
  20. }
  21. ///======================================
  22. void I2CStart(void) //1637 开始
  23. {
  24.         clk = 1;
  25.         dio = 1;
  26.         Delay_us(2);
  27.         dio = 0;
  28. }
  29. ///=============================================
  30. void I2Cask(void) //1637 应答
  31. {
  32.         clk = 0;
  33.         Delay_us(5); //在第八个时钟下降沿之后延时5us,开始判断ACK 信号
  34.         while(dio);
  35.         clk = 1;
  36.         Delay_us(2);
  37.         clk=0;
  38. }
  39. ///========================================
  40. void I2CStop(void) // 1637 停止
  41. {
  42.         clk = 0;
  43.         Delay_us(2);
  44.         dio = 0;
  45.         Delay_us(2);
  46.         clk = 1;
  47.         Delay_us(2);
  48.         dio = 1;
  49. }
  50. ///=========================================
  51. void I2CWrByte(unsigned char oneByte) //写一个字节
  52. {
  53.         unsigned char i;
  54.         for(i=0;i<8;i++)
  55.         { clk = 0;
  56.                 if(oneByte&0x01) //低位在前
  57.                 {
  58.                         dio = 1;
  59.                 }
  60.                 else
  61.                 {
  62.                         dio = 0;
  63.                 }
  64.                 Delay_us(3);
  65.                 oneByte=oneByte>>1;
  66.                 clk=1;
  67.                 Delay_us(3);
  68.         }
  69. }
  70. ///-------------------------------------------------
  71. unsigned char ScanKey(void) //读按键
  72. {
  73.         unsigned char rekey,rkey,i;
  74.         I2CStart();
  75.         I2CWrByte(0x42); //读按键命令
  76.         I2Cask();
  77.         dio=1; // 在读按键前拉高数据线
  78.         for(i=0;i<8;i++) //从低位开始读
  79.         { clk=0;
  80.                 rekey=rekey>>1;
  81.                 Delay_us(30);
  82.                 clk=1;
  83.                 if(dio)
  84.                 {
  85.                         rekey=rekey|0x80;
  86.                 }
  87.                 else
  88.                 {
  89.                         rekey=rekey|0x00;
  90.                 }
  91.                 Delay_us(30);
  92.         }
  93.         I2Cask();
  94.         I2CStop();
  95.         return (rekey);
  96. }
  97. ///================================================
  98. void SmgDisplay(void) //写显示寄存器
  99. {
  100.         unsigned char i;
  101.         I2CStart();
  102.         I2CWrByte(0x40); // 40H 地址自动加1 模式,44H 固定地址模式,本程序采用自加1 模式
  103.         I2Cask();
  104.         I2CStop();
  105.         I2CStart();
  106.         I2CWrByte(0xc0); //设置首地址,
  107.         I2Cask();
  108.         for(i=0;i<6;i++) //地址自加,不必每次都写地址
  109.         {
  110.                 I2CWrByte(0xff); //送数据
  111.                 I2Cask();
  112.         }
  113.         I2CStop();
  114.         I2CStart();
  115.         I2CWrByte(0x8f); //开显示 ,最大亮度
  116.         I2Cask();
  117.         I2CStop();
  118. }
  119. ///==============================================
  120. void init() //初始化子程序
  121. {
  122.         //初始化略
  123. }
  124. ///==============================================
  125. void main(void)
  126. {
  127.         unsigned char keydate;
  128.         init(); //初始化
  129.         SmgDisplay(); //写寄存器并开显示
  130.         while(1)
  131.         {
  132.                 keydate=Scankey(); //读按键值 ,读出的按键值不作处理。
  133.         }
  134. }
  135. //===========end==================================







复制代码
回复

使用道具 举报

ID:404720 发表于 2018-11-26 10:51 | 显示全部楼层
jiajuntao 发表于 2018-11-26 09:17
是IIC,可以详细看器件手册。

谢谢
回复

使用道具 举报

ID:404720 发表于 2018-11-26 10:52 | 显示全部楼层
phang 发表于 2018-11-26 09:24
看完硬件再看看协议,开始信号,结束信号,应答...那应该就是和IIC差不了了

谢谢
回复

使用道具 举报

ID:404720 发表于 2018-11-26 10:52 | 显示全部楼层
xuyaqi 发表于 2018-11-26 09:39
TM1637应该是iic接口。

谢谢!
回复

使用道具 举报

ID:404720 发表于 2018-11-26 10:52 | 显示全部楼层

谢谢大佬
回复

使用道具 举报

ID:433219 发表于 2018-11-26 11:16 | 显示全部楼层
不算iic,是自定义的2线通讯而已
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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