友情提示:380元/半年,儿童学编程,就上码丁实验室。
这个四位数码管模块采用2片74hc595芯片驱动,需要Arduino3个数字端口,根据数码管动态扫描原理进行显示,宽工作电压3.3V到5V,PCB板尺寸:40mm*22mm,数码管型号:0.36、四位、共阳

移位寄存器74hc595参考教程及Arduino ShiftOut(移位输出)函数范例程序:
Arduino – ShiftOut
程序1:个位显示数字0~9
int clockPin=2;
int latchPin=3;
int dataPin=4;
unsigned char num[]={0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90 //"9"
};
void setup(){
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
void disp(){
for(int i=0;i<10;i++){
shiftOut(dataPin,clockPin,MSBFIRST,num[i]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00000001);
digitalWrite(latchPin, HIGH);
delay(500);
digitalWrite(latchPin,LOW);
}
}
void loop(){
disp();
}
74hc595驱动数码管 Arduino程序 https://www.zhihu.com/video/1017740611738341376
程序2:动态显示一个四位数
int clockPin=2;
int latchPin=3;
int dataPin=4;
unsigned char num[]={0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90 //"9"
};
void setup(){
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
void disp(int n){
int t=3;
int ge=(int)n%10;
int shi=((int)n/10)%10;
int bai=((int)n/100)%10;
int qian=((int)n/1000)%10;
shiftOut(dataPin,clockPin,MSBFIRST,num[ge]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00000001);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[shi]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00000010);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[bai]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00000100);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[qian]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00001000);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
}
void loop(){
disp(1234);
}

程序3:显示固定带一位小数的浮点数
int clockPin=2;
int latchPin=3;
int dataPin=4;
unsigned char num[]={0xC0, //"0"
0xF9, //"1"
0xA4, //"2"
0xB0, //"3"
0x99, //"4"
0x92, //"5"
0x82, //"6"
0xF8, //"7"
0x80, //"8"
0x90 //"9"
};
void setup(){
pinMode(latchPin,OUTPUT);
pinMode(clockPin,OUTPUT);
pinMode(dataPin,OUTPUT);
}
void disp(float n){
int t=3;
int yi=((int)(n*10))%10;
int ge=(int)n%10;
int shi=((int)n/10)%10;
int bai=((int)n/100)%10;
if(bai>0){
shiftOut(dataPin,clockPin,MSBFIRST,num[bai]);
}else{
shiftOut(dataPin,clockPin,MSBFIRST,0xFF);
}
shiftOut(dataPin,clockPin,MSBFIRST,0b00001000);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
if(shi>0){
shiftOut(dataPin,clockPin,MSBFIRST,num[shi]);
}else{
if(bai>0){
shiftOut(dataPin,clockPin,MSBFIRST,num[0]);
}else{
shiftOut(dataPin,clockPin,MSBFIRST,0xFF);
}
}
shiftOut(dataPin,clockPin,MSBFIRST,0b00000100);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[ge]&0x7F);//与运算加入小数点
shiftOut(dataPin,clockPin,MSBFIRST,0b00000010);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
shiftOut(dataPin,clockPin,MSBFIRST,num[yi]);
shiftOut(dataPin,clockPin,MSBFIRST,0b00000001);
digitalWrite(latchPin, HIGH);
delay(t);
digitalWrite(latchPin,LOW);
}
void loop(){
disp(92.7);
}
//注意:“去零”的修正方法

始发于知乎专栏:牧之