|
|
我這個程序只要加入一些延時比如_nop_和for(i=10;i>0;i--)就會造成點陣的閃爍原因不知采用16個74HC595進行驅(qū)動
還有我想加入左移功能怎么實現(xiàn)?希望各位幫幫小白我
本程序使用keil4編譯,仿真為protues8.6
單片機程序和仿真都在我的附件里方便查看,謝謝各位了(^v^)
16x64點陣.rar
(142.86 KB, 下載次數(shù): 13)
2020-11-3 18:22 上傳
點擊文件名下載附件
源代碼加仿真
- /*----------------------------------------------------------------------------------*/
- #include<reg51.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uhar unsigned char
- sbit HC595_SH=P2^0; //數(shù)據(jù)鎖存端
- sbit HC595_DS=P2^1; //數(shù)據(jù)輸出端
- sbit HC595_ST=P2^2 ;//并行輸出端
- uhar Mould[8]; //位寄存
- uhar Upright[8]; //段寄存
- uint code LED[4][32]= //4字數(shù)組
- {{
- 0x20,0x18,0x0A,0xAA,0xAA,0xAA,0x0A,0xFE,0x0A,0xAA,0xAA,0xAA,0x0A,0x28,0x18,0x00,
- 0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0xFE,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00,
- },
- {
- 0x10,0x0C,0x05,0x55,0x55,0x55,0x05,0x7F,0x05,0x55,0x55,0x55,0x85,0x14,0x0C,0x00,
- 0x00,0x91,0xA9,0x4D,0xAB,0x99,0xA0,0xAA,0xAA,0xAA,0xBF,0xA9,0xA9,0xA9,0xA0,0x00,
- },
- {
- 0x00,0xFC,0x04,0x04,0xFC,0x01,0xFD,0x55,0x57,0x55,0x55,0x55,0xFD,0x01,0x00,0x00,
- 0x00,0x0F,0x04,0x04,0x8F,0x88,0x89,0x4F,0x59,0x25,0x65,0x57,0x85,0x84,0xE0,0x00,
- },
- {
- 0x00,0x00,0xFE,0x82,0x82,0x82,0x82,0xFE,0x82,0x82,0x82,0x82,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x3F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x41,0x40,0x78,0x00,
- }
- };
- /*----------------------------------------------------------------------------------*/
- void HC595_write() //數(shù)據(jù)輸出
- {
- uhar i,j;
- HC595_SH=1;
- HC595_DS=1;
- HC595_ST=1;
- for(j=4;j>0;j--)
- {
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Mould[j*2-2]&0x80;
- Mould[j*2-2]<<=1;
- HC595_SH=1;
- }
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Mould[j*2-1]&0x80;
- Mould[j*2-1]<<=1;
- HC595_SH=1;
- }
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Upright[j*2-1]&0x80;
- Upright[j*2-1]<<=1;
- HC595_SH=1;
- }
- for(i=0;i<8;i++)
- {
- HC595_SH=0;
- HC595_DS=Upright[j*2-2]&0x80;
- Upright[j*2-2]<<=1;
- HC595_SH=1;
- }
- }
- HC595_ST=0;
- HC595_ST=1;
- }
- /*----------------------------------------------------------------------------------*/
- void LED_DISPLAY() //選擇數(shù)據(jù)
- {
- static uint i;
- static uint k=0x0001;
-
- Mould[6]=~k/256;
- Mould[7]=~k%256;
- Upright[6]=LED[3][ i];[ i]
- Upright[7]=LED[3][i+16];
-
- Mould[4]=~k/256;
- Mould[5]=~k%256;
- Upright[4]=LED[2][ i];[ i]
- Upright[5]=LED[2][i+16];
-
- Mould[2]=~k/256;
- Mould[3]=~k%256;
- Upright[2]=LED[1][ i];[ i]
- Upright[3]=LED[1][i+16];
-
- Mould[0]=~k/256;
- Mould[1]=~k%256;
- Upright[0]=LED[0][ i];[ i]
- Upright[1]=LED[0][i+16];
-
- k=_irol_(k,1);
- HC595_write();
- i++;
- if(i==16)
- {
- i=0;
- }
- }
- /*----------------------------------------------------------------------------------*/
- void main()
- {
- while(1)
- {
- while(1)
- {
- LED_DISPLAY();
- }
- }
- }
- /*----------------------------------------------------------------------------------*/
復(fù)制代碼 |
|