已知獨(dú)立式鍵盤的接口電路如圖1所示。要求編寫由定時(shí)器T1中斷方式2控制的鍵盤掃描程序,實(shí)現(xiàn)如下功能: ① 按下S1鍵,P3口8位LED燈低四位點(diǎn)亮,高四位熄滅;
② 按下S2鍵,P3口8位LED燈低四位熄滅,高四位點(diǎn)亮;
③ 按下S3鍵,P3口8位LED燈熄滅;
④ 按下S4鍵,P3口8位LED燈閃爍。
#include<reg51.h> unsigned char tab[ ]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //段碼表 sbit S1=P1^4; //將S1位定義為P1.4引腳 sbit S2=P1^5; //將S2位定義為P1.5引腳 sbit S3=P1^6; //將S3位定義為P1.6引腳 sbit S4=P1^7; //將S4位定義為P1.7引腳 unsigned char key=0;
/*流水燈延時(shí)*/ void delay0() { unsigned char i,j; for(i=0;i<250;i++) for(j=0;j<250;j++) ; } /*軟件消抖延時(shí)*/ void delay1() { unsigned char i,j; for(i=0;i<100;i++) for(j=0;j<100;j++) ; } /*正轉(zhuǎn)*/ void zheng() { int i;
for(i=0;i<8;i++) {P3=tab[ i]; delay0();} } /*反轉(zhuǎn)*/ void fan() { int i; for(i=7;i>=0;i--) {P3=tab[ i]; delay0();} } /*關(guān)閉*/ void close() { P3=0xff; } /*閃爍*/ void shan() { P3=0xff; delay0(); P3=0x00; delay0(); }
void main() { TMOD=0x10; //定時(shí)器1工作與狀態(tài)1 EA=1; //開總中斷 ET1=1; //開定時(shí)器1中斷 TH1=(65536-1000)/256; //每1毫秒掃描一次 TL1=(65536-1000)%256; TR1=1; //啟動(dòng)定時(shí)器1 while(1) { switch(key) { case 1: zheng(); break; case 2: fan(); break; case 3: close(); break; case 4: shan(); break; } } }
void int1() interrupt 3 using 0 { P1=0xf0; TR1=0; if((P1&0xf0)!=0xf0) //判斷是否有按鍵按下 { delay1(); //用軟件延時(shí)消抖 if((P1&0xf0)!=0xf0) //再判斷 { if(S1==0) key=1; if(S2==0) key=2; if(S3==0) key=3; if(S4==0) key=4; } } TH1=(65536-1000)/256; TL1=(65536-1000)%256; TR1=1;
}
我要怎么修改呀,就是改不對(duì),求指點(diǎn)
|