![]() |
發(fā)布時間: 2022-1-14 17:58
正文摘要:單片機源程序如下: #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點 ... |
![]() |
wulin提供代碼,可能需要修改點陣LED的接線圖,要把器件反轉180度后,照圖連接。這個需要特別注意。 |
如果想使用595,那么修改一下代碼,增加595部分(紅色文字代碼)的處理即可: P2=rows[i+j]; col_data(rows[i+j]); P0=(1<<j)^255; 電路修改為: ![]() 經測試,是一樣的效果 |
這是我修改后的代碼,沒有使用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); //上升沿時數據移位 } 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)顯示數據,形成動態(tài)的圖案。這個時間差,你可以根據實驗結果來調整。在某一個時刻A圖,間隔一定時間后,顯示B圖;再次間隔一定時間顯示C圖...... 具體就是這個思路。按照這個思路,如果想在箭頭后清除畫面,就是發(fā)送能讓LED滅掉的數據而已?茨闾峁┑碾娐穲D,應該是在顯示箭頭后的數據中,向P0口發(fā)送全1數據即可。即P0=0xFF; |
我想讓移動后無圖案的數組清0,應該就能熄滅,但不知道怎么弄 |