你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

数码管驱动芯片的芯片

[复制链接]
aderson 发布时间:2017-5-20 11:05
本帖最后由 adersonl 于 2017-5-20 15:27 编辑

工作中经常要用到大量的数码管,点阵,LED

一般都是用74系列的芯片去驱动,因为公司的项目需求找了这颗芯片现在分享驱动和原理图过

3E_{Q1VD30GJ(~[[5LI7VZ4.png
  1. enum Brightness
  2. {
  3.     Level1 = 0x88,
  4.     Level2,
  5.     Level3,
  6.     Level4,
  7.     Level5,
  8.     Level6,
  9.     Level7,
  10.     Level8,
  11.     LEDOFF = 0x80
  12. };

  13. uint8_t NUM[11][5] =
  14. {
  15.   {0xFF, 0x41, 0x41, 0x41, 0xFF},//0
  16.   {0x00, 0x00, 0x7F, 0x00, 0x00},//1
  17.   {0x79, 0x49, 0x49, 0x49, 0x4F},//2
  18.   {0x49, 0x49, 0x49, 0x49, 0xFF},//3
  19.   {0x0F, 0x08, 0x08, 0x08, 0xFF},//4
  20.   {0x4F, 0x49, 0x49, 0x49, 0x79},//5
  21.   {0xFF, 0x49, 0x49, 0x49, 0x79},//6
  22.   {0x01, 0x01, 0x01, 0x01, 0xFF},//7
  23.   {0xFF, 0x49, 0x49, 0x49, 0xFF},//8
  24.   {0x4F, 0x49, 0x49, 0x49, 0xFF},//9
  25.   {0x00, 0x00, 0x22, 0x00, 0x00},//:
  26. };

  27. void TM1640_GPIO_Init(void)
  28. {
  29.   GPIO_Init(GPIOA, (GPIO_Pin_TypeDef)(GPIO_PIN_1), GPIO_MODE_OUT_PP_HIGH_FAST);
  30.   GPIO_Init(GPIOA, (GPIO_Pin_TypeDef)(GPIO_PIN_2), GPIO_MODE_OUT_PP_HIGH_FAST);
  31.   GPIO_Init(GPIOC, (GPIO_Pin_TypeDef)(T2_Din | T2_Clk), GPIO_MODE_OUT_PP_HIGH_FAST);
  32. }


  33. void Delay(uint16_t nCount)
  34. {
  35.   while (nCount != 0)
  36.   {
  37.     nCount--;      
  38.   }
  39. }

  40. void TM1640_Start(void)
  41. {
  42.   GPIO_WriteHigh(GPIOA, T1_Clk);
  43.   Delay(10);
  44.   GPIO_WriteHigh(GPIOA, T1_Din);
  45.   Delay(10);
  46.   GPIO_WriteLow(GPIOA, T1_Din);
  47.   Delay(10);  
  48.   GPIO_WriteLow(GPIOA, T1_Clk);
  49.   Delay(10);
  50. }

  51. void TM1640_Stop(void)
  52. {
  53.   GPIO_WriteLow(GPIOA, T1_Clk);
  54.   Delay(10);
  55.   GPIO_WriteLow(GPIOA, T1_Din);
  56.   Delay(10);
  57.   GPIO_WriteHigh(GPIOA, T1_Clk);
  58.   Delay(10);
  59.   GPIO_WriteHigh(GPIOA, T1_Din);
  60.   Delay(10);
  61. }

  62. void TM1640_2_Start(void)
  63. {
  64.   GPIO_WriteHigh(GPIOC, T2_Clk);
  65.   Delay(10);
  66.   GPIO_WriteHigh(GPIOC, T2_Din);
  67.   Delay(10);
  68.   GPIO_WriteLow(GPIOC, T2_Din);
  69.   Delay(10);  
  70.   GPIO_WriteLow(GPIOC, T2_Clk);
  71.   Delay(10);
  72. }

  73. void TM1640_2_Stop(void)
  74. {
  75.   GPIO_WriteLow(GPIOC, T2_Clk);
  76.   Delay(10);
  77.   GPIO_WriteLow(GPIOC, T2_Din);
  78.   Delay(10);
  79.   GPIO_WriteHigh(GPIOC, T2_Clk);
  80.   Delay(10);
  81.   GPIO_WriteHigh(GPIOC, T2_Din);
  82.   Delay(10);
  83. }


  84. void TM1640_Write_Byte(uint8_t dat)
  85. {
  86.   uint8_t i;
  87.   for(i = 0; i < 8; i++)
  88.   {
  89.     GPIO_WriteLow(GPIOA, T1_Clk);   
  90.     if(dat & 0x01)
  91.     {
  92.       GPIO_WriteHigh(GPIOA, T1_Din);
  93.     }
  94.     else
  95.     {
  96.       GPIO_WriteLow(GPIOA, T1_Din);
  97.     }
  98.     Delay(10);
  99.     GPIO_WriteHigh(GPIOA, T1_Clk);
  100.     Delay(10);
  101.     dat >>= 1;
  102.   }
  103.   GPIO_WriteLow(GPIOA, T1_Clk);
  104.   Delay(10);
  105. }

  106. void TM1640_2_Write_Byte(uint8_t dat)
  107. {
  108.   uint8_t i;
  109.   for(i = 0; i < 8; i++)
  110.   {
  111.     GPIO_WriteLow(GPIOC, T2_Clk);   
  112.     if(dat & 0x01)
  113.     {
  114.       GPIO_WriteHigh(GPIOC, T2_Din);
  115.     }
  116.     else
  117.     {
  118.       GPIO_WriteLow(GPIOC, T2_Din);
  119.     }
  120.     Delay(10);
  121.     GPIO_WriteHigh(GPIOC, T2_Clk);
  122.     Delay(10);
  123.     dat >>= 1;
  124.   }
  125.   GPIO_WriteLow(GPIOC, T2_Clk);
  126.   Delay(10);
  127. }


  128. void TM1640_Init(void)
  129. {
  130.   TM1640_GPIO_Init();  
  131.   Delay(10);
  132.   TM1640_Start();
  133.   TM1640_Write_Byte(Level8);
  134.   TM1640_Stop();
  135.   TM1640_2_Start();
  136.   TM1640_2_Write_Byte(Level8);
  137.   TM1640_2_Stop();
  138. }


  139. void TM1640_Bit1(uint8_t *Dat)
  140. {
  141.   uint8_t i;
  142.   TM1640_Start();
  143.   TM1640_Write_Byte(0x40);
  144.   TM1640_Stop();
  145.   Delay(10);
  146.   TM1640_Start();
  147.   TM1640_Write_Byte(0xC0);
  148.   for(i = 0; i < 5; i++)
  149.   {
  150.     TM1640_Write_Byte(*(Dat++));
  151.   }
  152.   TM1640_Stop();
  153. }

  154. void TM1640_Clear_C5(void)
  155. {
  156.   TM1640_Start();
  157.   TM1640_Write_Byte(0x44);
  158.   TM1640_Stop();
  159.   Delay(10);
  160.   TM1640_Start();
  161.   TM1640_Write_Byte(0xC5);
  162.   TM1640_Write_Byte(0x00);
  163.   TM1640_Stop();
  164.   TM1640_Start();
  165.   TM1640_Write_Byte(0x44);
  166.   TM1640_Stop();
  167.   Delay(10);
  168.   TM1640_Start();
  169.   TM1640_Write_Byte(0xCD);
  170.   TM1640_Write_Byte(0x00);
  171.   TM1640_Stop();
  172.   TM1640_2_Start();
  173.   TM1640_2_Write_Byte(0xC4);
  174.   TM1640_2_Write_Byte(0x00);
  175.   TM1640_2_Stop();
  176. }

  177. void TM1640_ClearAll(void)
  178. {
  179.   uint8_t i;
  180.   TM1640_Start();
  181.   TM1640_Write_Byte(0x40);
  182.   TM1640_Stop();
  183.   Delay(10);
  184.   TM1640_Start();
  185.   TM1640_Write_Byte(0xC0);
  186.   for(i = 0; i < 16; i++)
  187.   {
  188.     TM1640_Write_Byte(0x00);
  189.   }
  190.   TM1640_Stop();
  191.   TM1640_2_Start();
  192.   TM1640_2_Write_Byte(0x40);
  193.   TM1640_2_Stop();
  194.   Delay(10);
  195.   TM1640_2_Start();
  196.   TM1640_2_Write_Byte(0xC6);
  197.   for(i = 0; i < 16; i++)
  198.   {
  199.     TM1640_2_Write_Byte(0x00);
  200.   }
  201.   TM1640_2_Stop();  
  202. }

  203. void TM1640_Bit2(uint8_t *Dat)
  204. {
  205.   uint8_t i;
  206.   TM1640_Start();
  207.   TM1640_Write_Byte(0x40);
  208.   TM1640_Stop();
  209.   Delay(10);
  210.   TM1640_Start();
  211.   TM1640_Write_Byte(0xC6);
  212.   for(i = 0; i < 5; i++)
  213.   {
  214.     TM1640_Write_Byte(*(Dat++));
  215.   }
  216.   TM1640_Stop();
  217. }

  218. void TM1640_Bit3(uint8_t En)
  219. {
  220.   TM1640_Start();
  221.   TM1640_Write_Byte(0x44);
  222.   TM1640_Stop();
  223.   Delay(10);
  224.   TM1640_Start();
  225.   TM1640_Write_Byte(0xCC);
  226.   if(En)
  227.     TM1640_Write_Byte(NUM[10][2]);
  228.   else
  229.     TM1640_Write_Byte(0x00);
  230.   TM1640_Stop();
  231. }

  232. void TM1640_2_Bit4(uint8_t *Dat)
  233. {
  234.   uint8_t i;
  235.   TM1640_Start();
  236.   TM1640_Write_Byte(0x44);
  237.   TM1640_Stop();
  238.   Delay(10);
  239.   TM1640_Start();
  240.   TM1640_Write_Byte(0xCE);
  241.   TM1640_Write_Byte(*(Dat++));
  242.   TM1640_Stop();
  243.   TM1640_2_Start();
  244.   TM1640_2_Write_Byte(0x44);
  245.   TM1640_2_Stop();
  246.   Delay(10);
  247.   TM1640_2_Start();
  248.   TM1640_2_Write_Byte(0xC0);
  249.   for(i = 1; i < 5; i++)
  250.   {
  251.     TM1640_2_Write_Byte(*(Dat++));
  252.   }
  253.   TM1640_2_Stop();
  254. }

  255. void TM1640_2_Bit5(uint8_t *Dat)
  256. {
  257.   uint8_t i;
  258.   TM1640_2_Start();
  259.   TM1640_2_Write_Byte(0x40);
  260.   TM1640_2_Stop();
  261.   Delay(10);
  262.   TM1640_2_Start();
  263.   TM1640_2_Write_Byte(0xC5);
  264.   for(i = 0; i < 5; i++)
  265.   {
  266.     TM1640_2_Write_Byte(*(Dat++));
  267.   }
  268.   TM1640_2_Stop();
  269. }
复制代码
--------------------------------------------------------------------------------------------
TB.jpg

调试器都忘记放啦,做了几十片,大家可以看一下
2 收藏 1 评论22 发布时间:2017-5-20 11:05

举报

22个回答
Ljmp 回答时间:2017-5-25 10:36:00
本帖最后由 Ljmp 于 2017-5-25 10:38 编辑
zhao.zhao 发表于 2017-5-24 08:50
针对特定场合,这个芯片还是不错的,只是不知高电压的大的数码管支持吗

如果是一个段串联几个,就要用扩流,或者用灯饰类的芯片;下面一张图是用TM1812做的,驱动4寸数码管,12通道的,一段串联3个LED灯; 数码管不多可以用9通道的

LED.jpg

aderson 回答时间:2017-5-22 11:10:04
zhao.zhao 发表于 2017-5-21 14:10
这个芯片扩展性不行,驱动有点麻烦,也许控制少量几个数码管或LED点阵屏可以,量多了就不行了,影响了其使 ...

驱动非常简单啊,点阵一个5排,我带了25排,差不多就是带25个数码管了,也很好,总线速率也很快,并没有 出现你说的那种不行
Ljmp 回答时间:2017-5-22 14:46:27
zhao.zhao 发表于 2017-5-21 14:10
这个芯片扩展性不行,驱动有点麻烦,也许控制少量几个数码管或LED点阵屏可以,量多了就不行了,影响了其使 ...

你要怎么扩展,一颗芯片可以驱动128个LED灯,如果需要的可以用TM1680,可以控制384个点;
lisingch 回答时间:2017-5-20 12:18:18
不错,学习了!
zhao.zhao 回答时间:2017-5-20 14:54:51
不知这个芯片的价格几何?
aderson 回答时间:2017-5-20 15:19:55
zhao.zhao 发表于 2017-5-20 14:54
不知这个芯片的价格几何?

0.8
寂寞,点燃一支烟 回答时间:2017-5-20 19:05:45
这种芯片挺不错,尤其还LED和按键同时驱动,我们公司也用到了。
epochal 回答时间:2017-5-20 19:46:49
0.8是多大量时的价格?
aderson 回答时间:2017-5-21 13:31:23
寂寞,点燃一支烟 发表于 2017-5-20 19:05
这种芯片挺不错,尤其还LED和按键同时驱动,我们公司也用到了。

嗯,这家貌似有很多这样的芯片,,方便多了
zhao.zhao 回答时间:2017-5-21 14:10:23
这个芯片扩展性不行,驱动有点麻烦,也许控制少量几个数码管或LED点阵屏可以,量多了就不行了,影响了其使用范围。
Ljmp 回答时间:2017-5-22 14:44:51
欢迎大家使用,我们公司还有很多其他的LED驱动芯片;
aderson 回答时间:2017-5-22 21:03:09
Ljmp 发表于 2017-5-22 14:44
欢迎大家使用,我们公司还有很多其他的LED驱动芯片;

我宣传有样片没
zhao.zhao 回答时间:2017-5-22 23:20:19
我指的是在LED显示屏上使用,这个量很大的
薛家小坤 回答时间:2017-5-23 10:12:58
用过TM1650驱动4位数码管,I2C驱动,可以节省单片机IO口。
应该和楼主TM1640功能类似吧
arenas 回答时间:2017-5-23 10:24:50
好像还不错
12下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版