微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 在protues仿真时按键不起作用怎么回事啊?

在protues仿真时按键不起作用怎么回事啊?

时间:10-02 整理:3721RD 点击:

#include <reg51.h>
#define unit unsigned int
#define uchar unsigned char
uchar duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
uchar wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unit zhong[2][8]={{0,0,10,0,0,10,2,1},{1,0,10,1,0,10,3,1}};
uchar j,t,second,minute,keytime0,keytime1,day=1,mon=1,year=13,hour=12;
sbit K0=P1^0;
sbit K1=P1
bit keystate0=1;
bit keystate1=1;
unit a,i,b;
void keybox0()
{
   if(keystate0==0)
     {
        keytime0=(keytime0+1)%2;
        keytime0++;
        switch(keytime0)
         {
           case 1: ET0=1;EA=1;TR0=1;break;
           case 0: ET0=0;EA=0;TR0=0;break;
          }
      }
}
void delay()
{
   for(i=0;i<10;i++)
    {
       for(b=0;b<100;b++);
     }
void keybox1()
{
   if(keystate1==0)
     {
        keytime1=(keytime1+1)%2;
        keytime1++;
        switch(keytime1)
         {
            case 1: t=1;break;
            case 0: t=0;break;
          }
      }
}
void timer() interrupt 1
{
  TH0=(65536-1000)/256;   
  TL0=(65536-1000)%256;
  P2=0;
  if(t%2==0)
      timer0();
  else
      timer1();
  
}
void timer1()
{
  P0=duan[zhong[0][j]];
  P2=wei[j];
  j++;
  if(j==8)
    {
     j=0;
     }
  if(a++==1000)
     {
        second++;
        a=0;
        if(second==60)
           {
             minute++;
             second=0;
            if(minute==60)
              {
                 hour++;
                 minute=0;
                if(hour==24)
                  {
                    hour=0;
                   }
               }
            }
      }
  zhong[0][0]=second%10;
  zhong[0][1]=second/10;
  zhong[0][3]=minute%10;
  zhong[0][4]=minute/10;
  zhong[0][6]=hour%10;                                                                                                                                       
  zhong[0][7]=hour/10;
}
void timer0()
{  
  P0=duan[zhong[1][j]];
  P2=wei[j];
  j++;
  if(j==8)
    {
      j=0;
      }
  if(a==1000)
    {
      day++;
      a=0;
        if(day=(mon%2==0)? 30:31)
           {
              mon++;
              day=0;
                if(mon==12)
                  {
                     year++;
                   }
            }
      }
  zhong[1][0]=day%10;
  zhong[1][1]=day/10;
  zhong[1][3]=mon%10;
  zhong[1][4]=mon/10;
  zhong[1][6]=year%10;
  zhong[1][7]=year/10;
}
void main()
{
   
   keystate0=1;
   keystate1=1;
   keytime0=0;
   keytime1=0;
   TMOD=0x01;
   TH0=(65536-1000)/256;   
   TL0=(65536-1000)%256;
   while(1)
    {
      if(keystate0!=K0)
         {
           delay();
           keystate0=K0;
           keybox0();
          }
       if(keystate1!=K1)
          {
             delay();
             keystate1=K1;
             keybox1();
           }
     
      }
}

时钟


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top