标题: 基于AT89c52单片机的基础实验,按下按键KEY1,数码管正计时;按下KEY2,数码管倒计... [打印本页]

作者: 皮皮12323    时间: 2018-4-19 15:14
标题: 基于AT89c52单片机的基础实验,按下按键KEY1,数码管正计时;按下KEY2,数码管倒计...
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;
          }  }









欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1