88點(diǎn)陣動(dòng)態(tài)顯示 硬件組成:?jiǎn)纹瑱C(jī)最小系統(tǒng)+88點(diǎn)陣+按鍵 圖形移動(dòng)模式 切換 1 跳動(dòng) 2 上移 3 下移 4 左移 5 右移 顯示內(nèi)容漢字 一 二 三 四。四個(gè)字 仿真圖: 程序: 源代碼 #include #define uchar unsigned char #define uint unsigned int // 左右移動(dòng) 取碼方式 陰碼逐列 uchar code TAB[]={ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏 0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00,/*'一',0*/ 0x00,0x40,0x44,0x44,0x44,0x44,0x40,0x00,/*'二',1*/ 0x00,0x40,0x54,0x54,0x54,0x54,0x42,0x00,/*'三',2*/ 0x00,0x7E,0x52,0x5E,0x42,0x5E,0x52,0x7E,/*'四',3*/ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, //空屏, //空屏 }; // 上下移動(dòng)及翻頁(yè) 取模方式 陽(yáng)碼逐行 uchar code TAB1[]={ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏 0xFF,0xFF,0xFF,0x81,0xFF,0xFF,0xFF,0xFF,/*'一',0*/ 0xFF,0xFF,0xC3,0xFF,0xFF,0xFF,0x81,0xFF,/*'二',1*/ 0xFF,0xBF,0xC3,0xFF,0xC3,0xFF,0x81,0xFF,/*'三',2*/ 0xFF,0x81,0xA9,0xA9,0xA9,0x9D,0xBD,0x81,/*'四',3*/ 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, //空屏 }; uchar idata Buffer[48]={0}; //緩存顯示單元 sbit key1=P3^2; //外部中斷 uchar num=0;//用于圖形移動(dòng)切換 char i,t; void delay(uchar t) { while(t--) {;} } void delay_ms(uint z) //延時(shí)子程序 { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void right(void) { uchar N,T; for(N=0;N<40;n++)>40;n++)> { for(T=0;T<70;t++)>70;t++)> { P1=0x7f; //0111 1111 第一列開(kāi)始 for(i=0;i<> { P0=TAB[i+N]; delay(100); delay_ms(1);//實(shí)物消影 P0=0X00; //實(shí)物消影 P1=P1>>1|P1<7; 0011="" 1111="" |="" 1000="" 0000="1011" 1111="">7;> } } } } void left(void) { uchar N,T; uchar m,n; for(m=0;m<> for(n=0;n<> Buffer[8*m+n]=TAB[7-n+m*8]; //將TAB數(shù)組中的數(shù)據(jù)重新排列 for(N=0;N<40;n++)>40;n++)> { for(T=0;T<60;t++)>60;t++)> { P1=0xfe; for(i=0;i<> { P0=TAB[i+N]; delay(100); delay_ms(1);//實(shí)物消影 P0=0X00; //實(shí)物消影 P1=P1<1|p1>>7; //掃描起始列為第一行 } } } } void up(void) { uchar N,T; for(N=0;N<40;n++)>40;n++)> for(T=0;T<60;t++)>60;t++)> { P0=0x01; for(i=0;i<> { P1=TAB1[i+N]; delay(100); delay_ms(1);//實(shí)物消影 P1=0XFF; //實(shí)物消影 P0=P0<1|p0>>7; } } } void down(void) { uchar N,T; uchar m,n; for(m=0;m<> for(n=0;n<> Buffer[8*m+n]=TAB1[7-n+m*8]; //將TAB數(shù)組中的數(shù)據(jù)重新排列 for(N=0;N<40;n++)>40;n++)> for(T=0;T<70;t++)>70;t++)> { P0=0x80; for(i=0;i<> { P1=Buffer[i+N]; delay(100); delay_ms(1);//實(shí)物消影 P1=0XFF; //實(shí)物消影 P0=P0>>1|P0<7;>7;> } } } void dongtai(void) { uchar N,T; for(N=0;N<6;n++) 循環(huán)掃描一遍6幀="">6;n++)> for(T=0;T<100;t++)>100;t++)> { P0=0x01; for(i=0;i<> { P1=TAB1[i+8*N]; delay(100); delay_ms(1);//實(shí)物消影 P1=0XFF; //實(shí)物消影 P0=P0<1|p0>>7; } } } void main(void) { EA=1; EX0=1;//開(kāi)啟外部中斷0 IT0=1;//觸發(fā)方式為下降沿 按鍵按下就觸發(fā) while(1); } void wbINT0() interrupt 0 { num++; if(num==6) { num=0; } switch (num) { case 1: dongtai();break; case 2: up();break; case 3: down();break; case 4: left();break; case 5: right();break; default: P0=0XFF; P1=0XFF;break; } } 仿真結(jié)果: |
|
來(lái)自: 龍之吻6iinxl8c > 《單片機(jī)及控制系統(tǒng)》