TM1640学习手册及示例代码

[复制链接]
发表于 2025-9-27 18:48:23 | 显示全部楼层 |阅读模式

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

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

×
数据手册 

   TM1640数据手册
  数据手册解读



   这里我们看管脚界说DIN和SCLK,一个数据线一个时钟线
  SEG1~SEG8为段码,GRID1~GRID16为位码(共阴极环境下)
  这里VDD给5V
   数据指令


数据下令设置



地点下令设置



体现控制下令



共阴极硬件毗连图


   这里我们只先容共阴极,共阳极必要在代码里调解,有爱好可以
  留意事项


TM1640驱动源码(非壅闭)
  1. tm1640.c
  2. //******************************************************************************
  3. /**
  4. * @Name       : TM1640_Start
  5. * @Date       : 2025年4月21日
  6. * @Description: TM1640起始
  7. * @Parameters : None
  8. * @Return     : None
  9. */  
  10. void TM1640_Start(void)
  11. {
  12.   TM_SDA_H();
  13.   TM_SCL_H();
  14.   __NOP();__NOP();
  15.   TM_SDA_H();
  16.   __NOP();__NOP();
  17.   TM_SDA_L();
  18.   __NOP();__NOP();
  19.   __NOP();__NOP();
  20.   TM_SCL_L();
  21.   __NOP();__NOP();
  22. }
  23. //******************************************************************************
  24. /**
  25. * @Name       : TM1640_Stop
  26. * @Date       : 2025年4月21日
  27. * @Description: TM1640结束
  28. * @Parameters : None
  29. * @Return     : None
  30. */  
  31. void TM1640_Stop(void)
  32. {
  33.   TM_SCL_H();
  34.         __NOP();__NOP();
  35.         TM_SDA_L();
  36.         __NOP();__NOP();
  37.         TM_SDA_H();
  38.         __NOP();__NOP();
  39.         TM_SCL_L();
  40.         TM_SDA_L();
  41. }
  42. //******************************************************************************
  43. /**
  44. * @Name       : TM1640_WriteData
  45. * @Date       : 2025年4月21日
  46. * @Description: 写入一字节的数据
  47. * @Parameters : oneByte:需要发送的数据字节
  48. * @Return     : None
  49. */  
  50. void TM1640_WriteData(uint8_t oneByte)
  51. {
  52.   uint8_t index;
  53.   for(index=0;index<8;index++)
  54.   {
  55.     TM_SCL_L();
  56.     if(oneByte&0x01)
  57.       TM_SDA_H();
  58.     else
  59.       TM_SDA_L();
  60.     __NOP();__NOP();__NOP();
  61.     TM_SCL_H();
  62.     oneByte=oneByte>>1;
  63.   }
  64.   TM_SCL_L();
  65.   __NOP();__NOP();
  66.   __NOP();__NOP();
  67.   TM_SDA_L();
  68.   __NOP();__NOP();
  69. }
  70. //******************************************************************************
  71. /**
  72. * @Name       : TM1640_Handle
  73. * @Date       : 2025年4月21日
  74. * @Description: 启动、写数据和控制显示
  75. * @Parameters : None
  76. * @Return     : None
  77. */  
  78. void TM1640_Handle(void)
  79. {
  80.   uint8_t index;
  81.   TM1640_Start();
  82.   TM1640_WriteData(CMD_DATA_1);//地址自动加1,普通模式
  83.   TM1640_Stop();
  84.   
  85.   TM1640_Start();
  86.   TM1640_WriteData(START_ADDRESS_1);
  87.   
  88.   for(index=0;index<smg_num;index++)
  89.   {
  90.     TM1640_WriteData(smg[index]);
  91.   }
  92.   TM1640_Stop();
  93.   TM1640_Start();
  94.   TM1640_WriteData(BRIGHTNESS_LEVEL_4);
  95.   TM1640_Stop();
  96.   __NOP();
  97. }
复制代码
  这里smg[index]必要你自己去界说,然后将数组传入tm1640中就可以
  1. tm1640.h
  2. /*数码管数量*/
  3. #define smg_num    16(最大16位)
  4. /*显示控制命令,设置亮度打开显示屏,共8级亮度,也就是设置不同的脉冲宽度*/
  5. #define BRIGHTNESS_LEVEL_1  0x88
  6. #define BRIGHTNESS_LEVEL_2  0x89
  7. #define BRIGHTNESS_LEVEL_3  0x8a
  8. #define BRIGHTNESS_LEVEL_4  0x8b
  9. #define BRIGHTNESS_LEVEL_5  0x8c
  10. #define BRIGHTNESS_LEVEL_6  0x8d
  11. #define BRIGHTNESS_LEVEL_7  0x8e
  12. #define BRIGHTNESS_LEVEL_8  0x8f
  13. #define CLOSE_DISPLAY       0x80
  14. /*数据设置命令*/
  15. #define CMD_DATA_1          0X40 //地址自动加1,普通模式       0100 0000
  16. #define CMD_DATA_2          0X44 //地址固定,普通模式          0100 0100
  17. #define CMD_DATA_3          0X48 //地址自动加1,内部测试模式   0100 1000
  18. #define CMD_DATA_4          0X4C //地址固定,内部测试模式      0100 1100
  19. /*地址命令设置 显存地址为0xC0-0xCF*/
  20. #define START_ADDRESS_1       0XC0 //第一个数码管
  21. #define START_ADDRESS_2       0XC1
  22. #define START_ADDRESS_3       0XC2
  23. #define START_ADDRESS_4       0XC3
  24. #define START_ADDRESS_5       0XC4
  25. #define START_ADDRESS_6       0XC5
  26. #define START_ADDRESS_7       0XC6
  27. #define START_ADDRESS_8       0XC7
  28. #define START_ADDRESS_9       0XC8
  29. #define START_ADDRESS_10      0XC9
  30. #define START_ADDRESS_11      0XCa
  31. #define START_ADDRESS_12      0XCb
  32. #define START_ADDRESS_13      0XCc
  33. #define START_ADDRESS_14      0XCd
  34. #define START_ADDRESS_15      0XCe
  35. #define START_ADDRESS_16      0XCf
  36. #define TM_SCL_H()  GPIOB->BSRR = GPIO_PIN_6
  37. #define TM_SCL_L()  GPIOB->BRR = GPIO_PIN_6
  38. #define TM_SDA_H()  GPIOB->BSRR = GPIO_PIN_7
  39. #define TM_SDA_L()  GPIOB->BRR = GPIO_PIN_7
复制代码



回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表