Arduino+兩塊74HC595 驅動四位數碼管顯示模塊

Arduino+兩塊74HC595 驅動四位數碼管顯示模塊

來自專欄 Arudino的玩樂時光

這個四位數碼管模塊採用2片74hc595晶元驅動,需要Arduino3個數字埠,根據數碼管動態掃描原理進行顯示,寬工作電壓3.3V到5V,PCB板尺寸:40mm*22mm,數碼管型號:0.36、四位、共陽

四位數碼管模塊 兩塊74HC595驅動

移位寄存器74hc595參考教程及Arduino ShiftOut(移位輸出)函數范常式序:

Arduino - ShiftOut?

www.arduino.cc圖標

74hc595 移位寄存器晶元

程序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);}//注意:「去零」的修正方法


推薦閱讀:

機器人:一種簡易的自動跟隨方案,獨家!
00-樹莓派做的遙控小車 python
A、B按鈕控制數字的增減、循環
【連載】從單片機到操作系統⑤——FreeRTOS列表&列表項的源碼解讀
單片機矩陣鍵盤線性反轉法( if 版 和 switch 版)

TAG:Arduino | 單片機 | 編程 |