七段数码管算是很基础的元件了,从使用的角度来说几乎和控制多个LED完全一致。但是如果想控制比较大的数码管则需要考虑驱动电压等等问题会让问题变得比较麻烦。
前几天入手了一个1.8寸的模块,4个LED在一起的,正面照如下,可以看出尺寸还是蛮大的:
背面照片,左边接口是用于级联的模块输出,右边接口是模块输出。下方的是用于烧写芯片的接口,正常使用中无需连接。
主要特性如下:
1.串口输入, 115200, n, 8, 1
2. 可以级联,然后后面有预留的地址选择跳线,可以设定0-31 个地址。购买之后送一根输入线,3Pin,分别是5V GND 和RXD。上图
3. 可以选择 0-9级别的亮度
下面进行上电测试,使用 Arduino 输出的5V供电,1级别亮度
9级亮度(不知道为什么,当选择这个级别的亮度之后有高频的声音)
最后测试了一下功耗,最低亮度显示4个8的时候,消耗电流 40ma左右。最高亮度显示4个8 的时候,消耗电流在81ma左右。因此,一个Arduino 控制两个级联的是没有问题的。下图是2个级联,其中一个跳线为地址1,另一个没有任何跳线是地址0.
下面是测试代码,包含了一个十进制数值显示和一个十六进制数值显示的函数
#include <SoftwareSerial.h> SoftwareSerial MySerial(6, 7); // 定义软串口 RX(插到D6口), TX(插到D7口) void digitalHex(unsigned int value) { //这是数码管要求的数据头信息 MySerial.write(0xff); MySerial.write((byte)0x00); MySerial.write(0x04); //显示四位数值 //下面是四位当前值 MySerial.write((value>>12)%0x10); //最高位 MySerial.write((value>>8)%0x10); MySerial.write((value>>4)%0x10); MySerial.write((value)%0x10); //最后一位是亮度 MySerial.write(1); } void setup() { //Serial1 receive GPIO uart Serial1.begin(9600); //SoftSerial.begin(9600); Serial.begin(115200); MySerial.begin(115200); } int p80; int len=0; boolean mark=false; void loop() { byte c; while (Serial1.available()) { c=(Serial1.read()&0xFF); p80=(p80<<8)+c; len=len+1; } if (len==2) { Serial.println(p80,HEX); digitalHex(p80); len=0; } }