tm1651如何驱动数码管

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tm1651如何驱动数码管相关的知识,希望对你有一定的参考价值。

参考技术A TM1651 是一种带键盘扫描接口的LED(发光二极管显示器)驱动控制专用电路,内部集成有MCU 数字接口、数据锁存器、LED 高压驱动、键盘扫描等电路。本产品性能优良,质量可靠。主要应用于电磁炉、微波炉及小家电产品的显示屏驱动。采用SOP16/DIP16的封装形式。 参考技术B tm1651驱动数码管的方法是,要先在手机上安装驱动软件,才能在tm1651上驱动数码管

Arduino 数码管 硬件 4位数码管 TM1637驱动芯片 库文件 示例

4位数码管:这里用的是TM1637驱动的数码管

备注:此章节会用到库的概念和内容。

该模块有四个引脚,意义如下:

GND:电源负极

VCC:电源正极,+5V

 DIO:数据IO模块,可以接任意的数字引脚

CLK:时钟引脚,可以接任意的数字引脚。

该库提供了一个名为TM1637的类,

类中包含一个构造函数,形式为

TM1637(uint8_t Clk, uint8_t Data),

第一个参数指定时钟引脚,第二个参数指定数据引脚,这两个引脚都是数字引脚。

 

TM1673库 代码示例:

 1 /*
 2   //!初始化一个TM1637对象,设置时钟和数据引脚。
 3   //[email protected]参数 pinclk -数字引脚连接到模块的时钟引脚数
 4   //[email protected]参数 pindio -数字引脚连接到模块的DIO引脚数
 5   --------------------------------------------------------------------------------------------------
 6    void BL(uint8_t brightness);
 7   // 设置显示的亮度。
 8   // @param brightness -从0-7级亮度,运行默认为3级亮度
 9 --------------------------------------------------------------------------------------------------
10    void setSegments(const uint8_t segments[], uint8_t length = 4, uint8_t pos = 0);
11   //!在模块上显示任意数据
12   //!此功能接收原始段值作为输入,并显示它们。数据段作为一个字节数组,每个字节对应一个数字。在每个字节0维是段A,1维是段B等。
13   //[email protected] segments 显示的4维数组
14   //! @param length 设置显示的数字的数量。用户必须确保显示的数字符合要求的数字(例如,如果两个数字被显示,数字必须在0到99之间,大于99则只显示个位与十位两位)
15   //! @param pos 第一个数字位置 0-3,0最左,3最右(例如,123这个数,Pos=0,1显示在最在边;POS=1,1显示在左边第二个;POS=3,1显示在第四位)//
16    --------------------------------------------------------------------------------------------------
17    void Num(int num, bool leading_zero = false, uint8_t length = 4, uint8_t pos = 0);
18   //! 显示十进制数字
19   //! @param leading_zero 为真是,前面的填充0
20   //! @param length 设置显示的数字的数量。用户必须确保显示的数字符合要求的数字(例如,如果两个数字被显示,数字必须在0到99之间,大于99则只显示个位与十位两位)
21   //! @param pos 第一个数字位置 0-3,0最左,3最右(例如,123这个数,Pos=0,1显示在最在边;POS=1,1显示在左边第二个;POS=3,1显示在第四位)
22    --------------------------------------------------------------------------------------------------
23   uint8_t encodeDigit(uint8_t digit);
24   //! 将一个数字转换成7段代码!
25   //! 该方法在0 - 15之间接受一个数字,并将其转换为显示在7段显示上的数字所需的代码。 数字之间10-15转换为十六进制数字(A-F)!
26   //! @param digit 数字0-15
27   //! @return 返回代码表示数字7段图像(LSB段;位6段G;7位总为零)
28 -------------------------------------------------------------------------------------------------
29   void DNum(uint8_t num1,uint8_t num2,bool piont =true);
30 //! 显示两组数字
31 //! @param num1 0-99,大于99点显示十位及个位,显示在左边两位
32 //! @param num2 0-99,大于99点显示十位及个位,显示在右边两位
33 //! @param piont 是否显示中间两点
34 --------------------------------------------------------------------------------------------------
35    void show(bool BS);
36   //!是否显示
37 //! @param BS 为真显示,否则不显示
38 --------------------------------------------------------------------------------------------------
39 void cls();
40 清除所有显示的数据
41 */
42  
43 #include <TM1637.h>
44 // 配置引脚
45 #define CLK 2
46 #define DIO 3
47  
48 //延时时间
49 #define TEST_DELAY   2000
50  
51 TM1637 TM(CLK, DIO);
52  
53 void setup()
54 {
55 }
56  
57 void loop()
58 {
59  int k=123;
60   bool ZD;
61   TM.cls();//清除
62   //显示1位数,位置从第0位到每3位
63   for(int i=0; i<4;i++)
64 {
65   TM.Num(i,0,1,i);//显示i,不填充0,显示1位,显示在每i位
66   delay(TEST_DELAY);
67   }
68   for(int i=0; i<8;i++)
69 {
70   TM.Num(i,1);
71   TM.BL(i);//调节亮度
72   delay(TEST_DELAY);
73   }
74  
75   TM.Num(k,0);//不填充
76   delay(TEST_DELAY);
77   TM.Num(k,1);//填充
78   delay(TEST_DELAY);
79  
80 //显示与隐藏
81   for(int i=0; i<4;i++)
82 {
83    TM.show(false);
84    delay(TEST_DELAY/2);
85    TM.show(true);
86    delay(TEST_DELAY/2);   
87 }
88  
89 //显示双组数
90    for(int i=0; i<20;i++)
91 {
92   ZD=!ZD;
93 TM.DNum(i/2,i/2,ZD);
94 delay(500);
95 }
96  
97 delay(5000); 
98 }
99  

 

以上是关于tm1651如何驱动数码管的主要内容,如果未能解决你的问题,请参考以下文章

TM1650/AIP650数码管驱动显示STM32驱动程序HAL库

Arduino 数码管 硬件 4位数码管 TM1637驱动芯片 库文件 示例

LED数码管驱动芯片抗干扰效果怎么样?(比如TM1629,CH451LED数码管驱动芯片)

51单片机 3个IO口 + TM1638+24个独立按键扫描+驱动8位共阳数码管显示+Proteus仿真

顺便问一下,用TM1616如何去驱动12v的共阴极数码管,急,向你求教了。如果可以的话,向你拜师。

Arduino UNO 利用3个IO口 + TM1638+驱动8位数码管显示+24个独立按键