聲明:1、我使用的單片機是STC89C52
2、 使用74HC595來擴展I\O口
3、其實點陣屏的原理很簡單,所以這里着重講74HC595芯片 串入並出的使用。
點陣圖原理:
這是常見點陣圖所看到的背面引腳部分。引腳的辨認依靠圖中下方凸起的小點辨認引腳號。
其實點陣圖的使用與數碼管類似。都是點亮小的二極管,來達到顯示字符的功能。值的注意的是,它的顯示,也是利用了人眼視覺留存效果。
重點來了:74HC595的使用。(可級聯)
對於未知芯片的使用解決辦法-------看pdf手冊
這里我們主要看它的管腳說明、真值表、時序圖。
從這兩張來看如何連接該元器件
看這張表可以得出如何使用該元器件
看完表我該抓住的點:1、(10腳)SLCR 低電平時,(復位)移位寄存器清零 通常將它接vcc
2、 (11腳)SCK 上升沿有效,數據串行輸入,在移位寄存器內具體移位 Q0->Q1->Q2.......->Q7
3、 (13腳)OE 高電平時禁止輸出 通常接地
4、 (12腳)RCK 上升沿時,將數據Q0.....Q7並行輸出。
5、 (14腳) SI 數據串聯輸入,級聯時,接上一個元器件的 (9腳)SQH
6、 (9腳) SQH 串聯數據輸出腳
這里附一張圖是在b站時看視頻截圖得來
這里還是得強調一下串行數據是怎么輸入的:
1、單片機通過DI線依次傳入8位數據 從高位開始傳送。傳送到74HC595內的移位寄存器的低位。之后開始上移。
1 /*點亮一個小燈*/ 2 #include <reg52.h> 3 sbit DIO = P3^4; //串行數據口 4 sbit S_CLK = P3^5;//移位寄存器時鍾 5 sbit R_CLK = P3^6;//輸出鎖存器時鍾 6 void main() 7 { 8 //ROW 0x80 , COL 0xfe 9 unsigned char i, dat;//i循環次數 dat需要發送的數據 10 dat = 0xfe;//發送列值 11 for(i=0; i<8; i++)//循環8次 12 { 13 S_CLK = 0;//拉低移位寄存器時鍾 14 R_CLK = 0;//拉低輸出鎖存器時鍾 15 if(dat & 0x01)//發送1 16 DIO = 1; 17 else //發送0 18 DIO = 0; 19 S_CLK = 1;//拉高移位寄存器時鍾,數據移位 20 dat >>= 1;//數據右移 21 } 22 dat = 0x80;//發送行值 剛發送的列值就被壓到第二片中的移位寄存器 23 for(i=0; i<8; i++)//循環8次 24 { 25 S_CLK = 0;//拉低移位寄存器時鍾 26 R_CLK = 0;//拉低輸出鎖存器時鍾 27 if(dat & 0x01)//發送1 28 DIO = 1; 29 else //發送0 30 DIO = 0; 31 S_CLK = 1;//拉高移位寄存器時鍾,數據移位 32 dat >>= 1;//數據右移 33 } 34 R_CLK = 1;//拉高輸出鎖存器時鍾,並行輸出數據 35 while(1); 36 }