本帖最后由 jinglixixi 于 2021-7-2 15:09 编辑
在工业现场,数码管是一种常用的显示器件,通常会有2种使用方式,即并使用方式和串行使用方式。 由于并使用方式较耗费I/O资源,故这里选取的方式为串行方式。 为便于使用所用的是串行显示模块,其外观如图1所示。该模块以MAX7219为串行输入/并行输出的显示驱动芯片,可连接一个8位的7段数码管,或连接64个独立的LED。 在该芯片内部还集成了一个B型的BCD码编码多路扫描回路、段字驱动器。且含有一个8*8的静态RAM来存储显示数据,有一个外部寄存器用来设置各LED的段电流。 在显示过程中,无抖动和闪烁现象,支持级联方式进行显示位数的扩展。除2个电源引脚外,另3个引脚为:串行数据输入端DIN、串行时钟输入端CLK及片选引脚CS。 图1 8位串行数码管显示模块
显示模块与开发板的引脚连接定义如下: #define CLK D2 #define DIN D3 #define CS D7
其中Max7219的字节发送函数为: void Write_Max7219_byte(unsigned charDATA){ unsigned char i; digitalWrite(CS, LOW); for(i=8;i>=1;i--) { digitalWrite(CLK, LOW); if(DATA&0x80) digitalWrite(DIN, HIGH); else digitalWrite(DIN, LOW); DATA=DATA<<1; digitalWrite(CLK, HIGH); } }
Max7219向寄存器写入数据的函数为: void Write_Max7219(char address,char dat){ digitalWrite(CS, LOW); Write_Max7219_byte(address); Write_Max7219_byte(dat); digitalWrite(CS, HIGH); }
MAX7219的初始化函数为: void Init_MAX7219(void){ Write_Max7219(0x09, 0xff); Write_Max7219(0x0a, 0x03); Write_Max7219(0x0b, 0x07); Write_Max7219(0x0c, 0x01); Write_Max7219(0x0f, 0x01); } 实现图2显示效果的配置函数和循环函数为: void setup() { pinMode(LED_PIN, OUTPUT); pinMode(CS,OUTPUT); pinMode(CLK,OUTPUT); pinMode(DIN,OUTPUT); delay(50); Init_MAX7219(); delay(200); Write_Max7219(0xff,0x00); Write_Max7219(1,8); Write_Max7219(2,7); Write_Max7219(3,6); Write_Max7219(4,5); Write_Max7219(5,4); Write_Max7219(6,3); Write_Max7219(7,2); Write_Max7219(8,1); }
void loop() { digitalWrite(LED_PIN, HIGH); delay(1000); digitalWrite(LED_PIN, LOW); delay(1000); }
图2 显示效果
有了数码管的显示功能,再有数值显示的问题就可以交给它了,相较于常规的数码管显示,它具有占用引脚资源少的优势,且显示的亮度高,适于用在工业控制中。
|