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