1.按下按键KEY1,数码管正计时;按下KEY2,数码管倒计时;按下按键KEY3清零。 #include<reg52.h> sbit ADDR0=P2^2; sbit ADDR1=P2^3; sbit ADDR2=P2^4; sbit KEY1=P3^0; sbit KEY2=P3^1; sbit KEY3=P3^2; unsigned char code LedChar[] = { 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90}; unsigned char LedBuff[2]= {0xFF,0xFF}; unsignedintcnt = 0; unsigned char i=0; unsigned char j=0; unsigned char flagls=0; unsigned long sec=0; void main() { bit keybuf1=1; bit backup1=1; bit keybuf2=1; bit backup2=1; bit keybuf3=1; bit backup3=1; ADDR2=0; ADDR1=0; ADDR0=0; EA = 1; TMOD=0x01; TH0=0xFC; TL0=0x67; ET0=1; TR0=1; while(1) { if(KEY1!=backup1) { keybuf1=KEY1; if(keybuf1==KEY1) { if(backup1==0) { sec=99; j=2; } backup1=keybuf1; } } if(KEY2!=backup2) { keybuf2=KEY2; if(keybuf2==KEY2) { if(backup2==0) { sec=0; j=1; } backup2=keybuf2; } } if(KEY3!=backup3) { keybuf3=KEY3; if(keybuf3==KEY3) { if(backup3==0) { sec=0; j=3; } backup3=keybuf3; } } if(flagls==1) { flagls = 0; if(j==1){ sec++; LedBuff[0]= LedChar[sec%10]; LedBuff[1]= LedChar[sec/10%10]; } if(j==2){ sec--; LedBuff[0]= LedChar[sec%10]; LedBuff[1]= LedChar[sec/10%10]; } if(j==3){ sec=0; LedBuff[0]= LedChar[sec%10]; LedBuff[1]= LedChar[sec/10%10]; } } } } void InterruptTimer0() interrupt 1 { TH0=0xFC; TL0=0x67; cnt++; if(cnt>=1000) { cnt=0; flagls=1; } P0=0xFF; switch(i) { case0:ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=~LedBuff[0];break; case1:ADDR2=0;ADDR1=0;ADDR0=1;i=0;P0=~LedBuff[1];break; default:break; } }
|