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  

原文地址:https://www.cnblogs.com/Kivinss/p/10876931.html

时间: 2024-11-06 03:41:47

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

Arduino周边模块:LCD与数码管

Arduino周边模块:LCD与数码管 数码管的介绍 数码管一般是用来显示数字和字符的 数码管原理 一位数码管 该图是一个8段数码管,该数码管中包含了8个LED发光二极管,因此称为8段数码管.该数码管共有10个引脚,有2个引脚是公共的负极或者正极,另外8个引脚分别按顺时针控制LED的亮片. 数码管的连接图,下面是两种连接方式 一种是将所有的正极连接到一起,另外的一种是将所有的负极连接到一起 我们可以在连接的时候进行测试,3脚接GND,4脚接高电平,如果有LED被点亮则为共阴,不亮则为共阳 四位数

Verilog实现4位数码北京快乐8平台出租管动态显示(FPGA)

本文北京快乐8平台出租haozbbs.comQ1446595067 提供了在Basys2开发板上实现4位数码管动态显示的代码,并在ISE13.4_1上调试通过,下载到开发板后可实现将8个SW输入的两位十六进制数对应的8421BCD码,显示在数码管上. 首先,是以十六进制数显示.比如,在8个开关SW上输入2FH,四个数码管从左到右显示0215. 以下为代码: module x7seg_1( input wire [3:0] high_data, input wire [3:0] low_data,

利用定时器0模式1中断消除4位数码管动态显示闪烁问题的项目工程

1 /******************************************************************************** 2 定时器定时1ms,数码管以秒钟计时,加上定时器0中断可消除数码管刷新时的闪烁问题, 3 闪烁问题是由while语句中分离数字时计算造成的,因为每次1s时间到,在数码管刷新前 4 都要进行计算,耽误了时间,导致闪烁,加了中断以后则是先刷新数码管再分离数字. 5 **********************************

Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法

原来使用Win7的32位系统,进行C#工程的开发,后来重装系统,换成了win7的64位系统 调试原来的工程,由于在其中引用了"SQLite"的32位的dll,导致在64为位下程序无法运行(但是编译可以通过) 后来通过修改工程文件(.csproj),在其中设置引用的条件,解决了问题 打开引用了SQLite的工程(例如叫做info)的工程文件(info.csproj),找到对SQLite引用的语句,类似如下的代码 代码如下: <Reference Include="Syst

一起来玩树莓派(3)--奇技淫巧的4位数码管

买了一个f3461bh数码管,根据自己对数码管最原始的认知,认为一个数字加一个小数点,至少需要8个正极+1个负极才能实现显示.依次推断4个数字为加小数点至少需要36个正极才能显示8.8.8.8.这样的数字. 但是买来发现f3461bh数码管只有12个针脚,作为一个硬件盲只好搜索百度了. 然后发现了下面的原理图 仔细分析其图,不解,遂询问前同事,突然间想起了<青云志>中学到的成语“奇技淫巧”. 通过同事杨同学的简介,我才顿悟: 1.看上图,共4个数字位,4个小数点.每个数字位+小数点共8个显示点

基于51单片机8位数码管(74HC595芯片)的使用方法

#include <AT89X51.H> #include <intrins.h> // 函数原形定义 #define uchar unsigned char #define uint unsigned int void main (void); // 主函数 void LED_OUT(uchar X); // LED单字节串行移位函数 void LED_print (uchar p, uchar x) ; unsigned char code LED_0F[]; // LED字模

一位数码管引脚

,,, SM110501N型号,10个引脚,两边个5个,我只知道中间分别是3,8引脚,,公共脚,,其他引脚怎么排列的,有图 向左转|向右转 上下各5引脚, 向左转|向右转 向左转|向右转

Arduino Uno 在win7 64位下的驱动问题

1.解压[mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8.rar],将[mdmcpq.inf_amd64_neutral_fbc4a14a6a13d0c8]文件夹复制到[C:\Windows\System32\DriverStore\FileRepository] 2.解压[usbser.rar],将[usbser.sys]文件复制到[c:\windows\system32\drivers]

树莓派与Arduino Leonardo使用NRF24L01无线模块通信之基于RF24库发送自定义数据

在我的项目里,树莓派主要作为中心节点,用于接收数据,Arduino作为子节点,用于发送数据,考虑到以后会有很多子节点,但又不至于使得代码过于繁琐,因此所有的传输数据添加一个头部编号用于区分不同节点. nrf24l01支持的数据最大为4个字节,因此使用最高位的一个字节(8位)作为节点编号,剩余三个字节用于传输数据.以下为具体代码: Arduino Leonardo程序 主要用于发送数据给树莓派,同时接收树莓派的响应数据. #include <SPI.h> #include "RF24.