![]() |
發(fā)布時間: 2022-1-14 17:58
正文摘要:單片機(jī)源程序如下: #include <reg51.h> //定義74HC595控制管腳 sbit SCK=P3^6; sbit RCK=P3^5; sbit SER=P3^4; unsigned char matrixLED1[8]={0x00,0x38,0x38,0x38,0xfe,0x7c,0x38,0x10};//LED點 ... |
代碼簡潔源于精妙嚴(yán)謹(jǐn)推敲,看電路寫代碼,看代碼連接電路,看電路改代碼,看代碼改電路都是基礎(chǔ),初學(xué)單片機(jī)時,雖然自己有想法能寫出來,也希望能多看看別人是如何寫的,于是周游論壇,遍覽群書,訪師尋友只是看看,自己歷練才能達(dá)到想要的結(jié)果。級聯(lián)595演示只有一個8*8數(shù)據(jù),數(shù)組不再添加任何值,實現(xiàn)數(shù)據(jù)出現(xiàn)數(shù)據(jù)消失,90度轉(zhuǎn)向,實現(xiàn)4個方向花樣。 |
1.gif (562.88 KB, 下載次數(shù): 30)
![]() |
wulin提供代碼,可能需要修改點陣LED的接線圖,要把器件反轉(zhuǎn)180度后,照圖連接。這個需要特別注意。 |
如果想使用595,那么修改一下代碼,增加595部分(紅色文字代碼)的處理即可: P2=rows[i+j]; col_data(rows[i+j]); P0=(1<<j)^255; 電路修改為: ![]() 經(jīng)測試,是一樣的效果 |
這是我修改后的代碼,沒有使用595,用P2口代替了 #include <reg51.h> //定義74HC595控制管腳 sbit SCK=P3^6; sbit RCK=P3^5; sbit SER=P3^4; unsigned char rows[24]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x1c,0x3e,0x7f,0x1c,0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; void delay(unsigned int a) { while(a--); } void col_data(unsigned char dat) { unsigned char i=0; //循環(huán)8次即可將一個字節(jié)寫入寄存器中 for(i=0;i<8;i++) { SER=dat>>7;//!優(yōu)先傳輸一個字節(jié)中的高位 dat<<=1; SCK=0; delay(1); SCK=1; delay(1); //上升沿時數(shù)據(jù)移位 } RCK=0; delay(1); RCK=1; } void main() { unsigned char i,j; while(1) { for(i=0;i<16;i++) { for(j=0;j<8;j++) { P2=rows[i+j]; P0=(1<<j)^255; delay(1300); P0=255; } } } } |
![]()
|
suncat0504 發(fā)表于 2022-1-14 19:49 額。道理懂,但是我就是不太會改。我這就是掃描列,然后讓列移動。 |
最簡單的方法,就是把 8x8的箭頭圖,變成 16x8 ,其中8x8還是你原來的箭頭,另外的8x8 為全0,然后讓它 滾起來。 |
你先搞清楚思路。顯示滾動其實就是利用時間差,靜態(tài)顯示數(shù)據(jù),形成動態(tài)的圖案。這個時間差,你可以根據(jù)實驗結(jié)果來調(diào)整。在某一個時刻A圖,間隔一定時間后,顯示B圖;再次間隔一定時間顯示C圖...... 具體就是這個思路。按照這個思路,如果想在箭頭后清除畫面,就是發(fā)送能讓LED滅掉的數(shù)據(jù)而已?茨闾峁┑碾娐穲D,應(yīng)該是在顯示箭頭后的數(shù)據(jù)中,向P0口發(fā)送全1數(shù)據(jù)即可。即P0=0xFF; |
我想讓移動后無圖案的數(shù)組清0,應(yīng)該就能熄滅,但不知道怎么弄 |
Powered by 單片機(jī)教程網(wǎng)