串行数码管显示模块是一种以串行发送接收数据,以并行方式输出数据的功能模块,其特点是输入引脚少,可较好地节省引脚资源。此外,在数据不需要刷新的情况下,它无需MCU的干预即可维持显示。
1. 显示驱动
该串行数码管显示模块与开发板的连接关系为:
SCL---16---D7
SDA---15---D6
CS ---13
由于该串行数码管显示模块所使用的关键芯片为MAX7219,故为它配置了一个串行发送字节数据的函数,其内容为:void Write_Max7219_byte(uint8_t DATA)
{
uint8_t i;
digitalWrite(13, LOW);
for(i=8;i>=1;i--)
{
digitalWrite(16, LOW);
if(DATA&0x80)
{
digitalWrite(15, HIGH);
}
else
{
digitalWrite(15, LOW);
}
DATA=DATA<<1;
digitalWrite(16, HIGH);
}
}
复制代码以函数Write_Max7219_byte()为基础,向指定地址发送数据的函数为:
void Write_Max7219(uint8_t address,uint8_t dat)
{
digitalWrite(13, LOW);
Write_Max7219_byte(address);
Write_Max7219_byte(dat);
digitalWrite(13, HIGH);
}
复制代码对于串行数码管显示模块,其初始化函数为:
void Init_MAX7219(void)
{
Write_Max7219(0x09, 0xff);
Write_Max7219(0x0a, 0x02);
Write_Max7219(0x0b, 0x07);
Write_Max7219(0x0c, 0x01);
Write_Max7219(0x0f, 0x00);
}
复制代码要实现串行数码管显示模块的测试,相应的设置函数和循环函数为:
void setup() {
pinMode(4, OUTPUT);
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
Init_MAX7219();
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() {
GPIO_SetBits(GPIO0, GPIO_Pin_4);
delay(1000);
GPIO_ResetBits(GPIO0, GPIO_Pin_4);
delay(1000);
}
复制代码这样,就实现了串行数码管显示模块的驱动。
![image.png image.png](data/attachment/forum/202310/10/194900acsdttax0x9bnzdb.png)
图1 显示效果
2. 电子时钟
将延时函数与串行数码管的显示功能相结合即可制作一个电子时钟。
实现电子时钟的程序为:
uint8_t t=30,m=58,h=23;
void setup() {
pinMode(13, OUTPUT);
pinMode(15, OUTPUT);
pinMode(16, OUTPUT);
Init_MAX7219();
Write_Max7219(1,t%10);
Write_Max7219(2,t/10);
Write_Max7219(3,0xa);
Write_Max7219(4,m%10);
Write_Max7219(5,m/10);
Write_Max7219(6,0xa);
Write_Max7219(7,h%10);
Write_Max7219(8,h/10);
}
void loop() {
delay(1000);
t=t+1;
if(t==60)
{
t=0;
m=m+1;
}
if(m==60)
{
m=0;
h=(h+1)%24;
}
Write_Max7219(1,t%10);
Write_Max7219(2,t/10);
Write_Max7219(4,m%10);
Write_Max7219(5,m/10);
Write_Max7219(4,m%10);
Write_Max7219(5,m/10);
Write_Max7219(7,h%10);
Write_Max7219(8,h/10);
}
复制代码经程序的上传,其计时效果如图2和图3所示。
![image.png image.png](data/attachment/forum/202310/10/194955pn26oznovph5tth7.png)
图2 计时效果1
![image.png image.png](data/attachment/forum/202310/10/195012pnufmci9tz28t474.png)
图3 计时效果2