16*64點(diǎn)陣仿真,74HC138做行驅(qū)動(dòng),74HC595做列驅(qū)動(dòng),文字上移、下移、靜止顯示,時(shí)鐘“:”閃爍;有完整的源程序和仿真文件;
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源碼:
- /************16*16LED點(diǎn)陣屏顯示*****************/
- #include<reg52.h>
- #include<intrins.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit R=P2^0; //595數(shù)據(jù)輸入端口
- sbit CLK=P2^1; //595 時(shí)鐘信號(hào)
- sbit STB=P2^2; // 595鎖存端
- uchar cont,num,xs;
- char miao=30,fen=30,shi=12;
- //bit flag;
- char code table[][32]={
-
-
- /////////////////////////////////////////////////////////////////////////
- // 漢字字模表 //
- // 漢字庫: 宋體16.dot,橫向取模左高位,數(shù)據(jù)排列:從左到右從上到下 ,對(duì)應(yīng)R=1 else R=0的寫法 //
- /////////////////////////////////////////////////////////////////////////
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*"點(diǎn)",*/ 0x02,0x00,0x02,0x00,0x02,0x08,0x03,0xFC,
- 0x02,0x00,0x02,0x10,0x3F,0xF8,0x20,0x10,
- 0x20,0x10,0x20,0x10,0x3F,0xF0,0x00,0x00,
- 0x29,0x10,0x24,0xC8,0x44,0x44,0x80,0x04,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*"陣",*/ 0x00,0x80,0x78,0x84,0x4F,0xFE,0x50,0x80,
- 0x50,0xA0,0x61,0x20,0x51,0x28,0x4B,0xFC,
- 0x48,0x20,0x48,0x20,0x68,0x24,0x57,0xFE,
- 0x40,0x20,0x40,0x20,0x40,0x20,0x40,0x20,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*"時(shí)",*/ 0x00,0x08,0x04,0x08,0x7E,0x08,0x44,0x08,
- 0x47,0xFE,0x44,0x08,0x44,0x08,0x7C,0x88,
- 0x44,0x48,0x44,0x48,0x44,0x08,0x44,0x08,
- 0x7C,0x08,0x44,0x48,0x00,0x28,0x00,0x10,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- /*"鐘",*/ 0x10,0x20,0x10,0x20,0x10,0x20,0x1C,0x24,
- 0x21,0xFE,0x21,0x24,0x7D,0x24,0x91,0x24,
- 0x11,0x24,0xFD,0xFC,0x11,0x24,0x10,0x20,
- 0x14,0x20,0x18,0x20,0x10,0x20,0x00,0x20,
-
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- uchar code tab[][16]={
- 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xCE,0xD6, // -0-
- 0xD6,0xE6,0xC6,0xC6,0x7C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x18,0x38,0x78,0x18,0x18, // -1-
- 0x18,0x18,0x18,0x18,0x7E,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x7C,0xC6,0x06,0x0C,0x18, // -2-
- 0x30,0x60,0xC0,0xC6,0xFE,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x7C,0xC6,0x06,0x06,0x3C, // -3-
- 0x06,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x0C,0x1C,0x3C,0x6C,0xCC, // -4-
- 0xFE,0x0C,0x0C,0x0C,0x1E,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFE,0xC0,0xC0,0xC0,0xFC, // -5-
- 0x0E,0x06,0x06,0xC6,0x7C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x38,0x60,0xC0,0xC0,0xFC, // -6-
- 0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0xFE,0xC6,0x06,0x06,0x0C, // -7-
- 0x18,0x30,0x30,0x30,0x30,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7C, // -8-
- 0xC6,0xC6,0xC6,0xC6,0x7C,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x7C,0xC6,0xC6,0xC6,0x7E, // -9-
- 0x06,0x06,0x06,0x0C,0x78,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x18,0x18,0x00, // -:-
- 0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
- };
- void delay(uint z)
- {
- uint x,y;
- for(x=0;x<z;x++)
- for(y=0;y<110;y++);
- }
- void WriteByte(uchar dat)
- {
- uchar i;
- /* 通過8循環(huán)將8位數(shù)據(jù)一次移入74HC595 */
- CLK = 0;
- for(i = 0; i < 8; i++)
- {
- if(dat & 0x80)
- R = 1;
- else
- R = 0;
- dat = dat << 1;
- CLK = 0;
- _nop_();_nop_();
- CLK = 1;
- }
- }
- void main()
- {
- // uint num;
- uint num,move,speed;
- TMOD |=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- EA=1;
- ET0=1;
- TR0=1;
- while(1)
- {
- switch(xs)
- {
-
- case 0:
- {
- for(num=0;num<16;num++) //靜止顯示4個(gè)漢字
- {
- WriteByte(~table[7][2*num+1]); //送出一個(gè)字節(jié)
- WriteByte(~table[7][2*num]);
-
- WriteByte(~table[5][2*num+1]); //送出一個(gè)字節(jié)
- WriteByte(~table[5][2*num]);
-
- WriteByte(~table[3][2*num+1]); //送出一個(gè)字節(jié)
- WriteByte(~table[3][2*num]);
-
- WriteByte(~table[1][2*num+1]); //送出一個(gè)字節(jié)
- WriteByte(~table[1][2*num]);
-
-
- P1=num; //行選
- STB=0; //輸出鎖存器中的數(shù)據(jù)
- STB=1;
- delay(1);
- }
- } break;
-
- case 1:
- {
- for(num=0;num<16;num++) //時(shí)鐘顯示88:88:88
- {
- WriteByte(~tab[miao%10][num]); //小時(shí)十位
-
- WriteByte(~tab[miao/10][num]); //小時(shí)個(gè)位
-
- if(cont>=10)
- WriteByte(~tab[10][num]); //顯示‘:’號(hào)
- else
- WriteByte(~tab[11][num]); //不顯
-
- WriteByte(~tab[fen%10][num]); //分鐘十位
-
- WriteByte(~tab[fen/10][num]); //分鐘個(gè)位
-
- if(cont>=10)
- WriteByte(~tab[10][num]); //顯示‘:’號(hào)
- else
- WriteByte(~tab[11][num]); //不顯
-
- WriteByte(~tab[shi%10][num]); //秒鐘十位
-
- WriteByte(~tab[shi/10][num]); //秒鐘個(gè)位
-
- P1=num; //行選
- STB=0;
- STB=1; //輸出鎖存器中的數(shù)據(jù),上升沿
- delay(1);
- }
- } break;
-
- case 2:
-
- {
- if(++speed>4) //移動(dòng)速度控制
- {
- speed=0;
- move++; //移位
- if(move>16) //是否完成移位一個(gè)漢字
- move=0; //從頭開始
- }
-
-
- for(num=0;num<16;num++) //上移 顯示4個(gè)漢字 "點(diǎn)陣時(shí)鐘" 74HC154+反相器,行高,74HC595 列低 ,數(shù)據(jù)取反
- {
- WriteByte(~table[7][2*num+1+move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[7][2*num+move*2]);
-
- WriteByte(~table[5][2*num+1+move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[5][2*num+move*2]);
-
- WriteByte(~table[3][2*num+1+move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[3][2*num+move*2]);
-
- WriteByte(~table[1][2*num+1+move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[1][2*num+move*2]);
-
- P1=num; //行選
- STB=0; //輸出鎖存器中的數(shù)據(jù)
- STB=1;
- delay(1);
- }
-
- } break;
-
- case 3:
-
- {
- if(++speed>4) //移動(dòng)速度控制
- {
- speed=0;
- move++; //移位
- if(move>16) //是否完成移位一個(gè)漢字
- move=0; //從頭開始
- }
-
-
- for(num=0;num<16;num++) //上移 顯示4個(gè)漢字 "點(diǎn)陣時(shí)鐘" 74HC154+反相器,行高,74HC595 列低 ,數(shù)據(jù)取反
- {
- WriteByte(~table[7][2*num+1-move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[7][2*num-move*2]);
-
- WriteByte(~table[5][2*num+1-move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[5][2*num-move*2]);
-
- WriteByte(~table[3][2*num+1-move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[3][2*num-move*2]);
-
- WriteByte(~table[1][2*num+1-move*2]); //送出一個(gè)字節(jié)
- WriteByte(~table[1][2*num-move*2]);
-
- P1=num; //行選
- STB=0; //輸出鎖存器中的數(shù)據(jù)
- STB=1;
- delay(1);
- }
-
- } break;
-
- }
- }
- }
- void timer0() interrupt 1
- {
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
-
- cont++;
- num++;
- if(cont==20)
- {
- cont=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- if(fen==60)
- {
- fen=0;
- shi++;
- if(shi==24)
- shi=0;
- }
- }
- }
- if(num==60) //3秒鐘換1種顯示
- {
- num=0;
- xs++;
- if(xs==4)
- xs=0;
- }
- }
復(fù)制代碼 完整的文件在附件里面:
16x64 -595 138 -時(shí)鐘.rar
(304.83 KB, 下載次數(shù): 184)
2018-4-9 18:18 上傳
點(diǎn)擊文件名下載附件
|