微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这个程序还有些错误,主要是定时和日历部分,求解决

这个程序还有些错误,主要是定时和日历部分,求解决

时间:10-02 整理:3721RD 点击:
/****主要功能:按第一个键(ok=0)走时,按第二个键调时间,按第三个键(key=2)调小时,
      第四个键(key=3)调分钟,第六个键调日历,第四个键调几号,第五个键正常走时第七个键调闹钟,共用键(key=2,key=3) ***/
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit du=P2^6;         //段显
sbit we=P2^7;         //位显
sbit beep=P2^3;           //蜂鸣器
uchar s,m,h,a0,a1,a2,a3,a4,a5,s1,h1,f1,n,y,r;
uchar key=0,ok, pp=0;
uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
                        0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar num[]={31,28,31,30,31,30,31,31,30,31,30,31 };          //一年每个月的天数
                                                                                                          
    /****延时函数****/
void delayms(uchar x)
{
   uchar i,j;
   for(i=x;i>0;i--)
        {
              for(j=110;j>0;j--);
            }
}
    /****显示函数****/
void display(uchar h,uchar m,uchar s)
  {
                      a0=h/10;
                              a1=h%10;
                              a2=m/10;
                              a3=m%10;
                              a4=s/10;
                              a5=s%10;
    du=0;
        du=1;
        P0=table[a0];          //显示第一个数码管
        du=0;
        we=0;
        we=1;
        P0=0xfe;
        we=0;
        delayms(3);
   du=0;
        du=1;
        P0=table[a1]|0x80;         //显示第二个数码管及小数点
        du=0;
        we=0;
        we=1;
        P0=0xfd;
        we=0;
        delayms(3);
         du=0;
        du=1;
        P0=table[a2];
        du=0;
        we=0;
        we=1;
        P0=0xfb;
        we=0;
        delayms(3);
   du=0;
        du=1;
        P0=table[a3]|0x80;
        du=0;
        we=0;
        we=1;
        P0=0xf7;
        we=0;
        delayms(3);
         du=0;
        du=1;
        P0=table[a4];
        du=0;
        we=0;
        we=1;
        P0=0xef;
        we=0;
        delayms(3);
   du=0;
        du=1;
        P0=table[a5];
        du=0;
        we=0;
        we=1;
        P0=0xdf;
        we=0;
        delayms(3);
  }
  /****键盘扫描****/
void keyscan()
{
    uchar temp;
     P3=0xfe;
         temp=P3;
         temp=temp&0xf0;
         if(temp!=0xf0)
           delayms(10);
           if(temp!=0xf0)
            {
                   temp=P3;
                    switch(temp)
                          {
                              case 0xee:
                                       ok=0;
                                           break;
                                  case 0xde:
                                       ok=1;
                                           break;
                                  case 0xbe:
                                       key=2;
                                           break;
                                  case 0x7e:
                                       key=3;
                                           break;
                          }
                          while(temp!=0xf0)
                            {
                                    temp=P3;
                                        temp=temp&0xf0;
                                        beep=0;
                                }
                                beep=1;
                }
          P3=0xfd;
         temp=P3;
         temp=temp&0xf0;
         if(temp!=0xf0)
           delayms(10);
           if(temp!=0xf0)
            {
                   temp=P3;
                    switch(temp)
                          {
                              case 0xed:
                                       key=4;
                                           break;
                                  case 0xdd:
                                       key=5;
                                           break;
                                  case 0xbd:
                                       key=6;
                                           break;
                                  case 0x7d:
                                       key=7;
                                           break;
                          }
                          while(temp!=0xf0)
                            {
                                    temp=P3;
                                        temp=temp&0xf0;
                                        beep=0;
                                }
                                beep=1;
                }
}
   /*************主函数************/
void main()
{
    h1=7,f1=0,s1=0,n=13,y=5,r=6;
    du=0;
        we=0;
    TMOD=0x01;
        TH0=0x4c;
        TL0=0x00;
        EA=1;
        ET0=1;
        TR0=1;
        while(1)
         {
             keyscan();
                 if(ok==0)
                   {
                      TR0=1;  //走时
                   }
                  if(ok==1)
                    {
                          TR0=0;
                            switch(key)
                     {
                            case 2:
                                    h++;            //调节小时
                                        if(h==24)
                                        {
                                          h=0;
                                        }
                                        key=0;
                                        break;
                                 case 3:
                                    m++;                  //调节分钟
                                        if(m==60)
                                         {
                                           m=0;
                                         }
                                         key=0;
                                        break;
                        }
                         }
                          if(key==7||key==2||key==3)          //调闹钟
                           {
                                     switch(key)
                     {
                            case 2:
                                    h1++;
                                        if(h1==24)
                                        {
                                          h1=0;
                                        }
                                        key=7;
                                        break;
                                 case 3:
                                 f1++;
                                        if(f1==60)
                                         {
                                           f1=0;
                                         }
                                         key=7;
                                        break;
                              }
                                  if(key==5)
                                    {
                                          key=0;
                                        }
                             display(h1,f1,s1);          
               
                           }         
                       if(key!=7&&key!=4&&key!=6)          //正常走时
                            {
                                   display(h,m,s);
                                }
                       
                         if(h==h1&&m==f1&&s==s1)         //定时时间到,闹钟响一分钟
                           {
                               beep=0;
                           }
                       
                        }
                         if(h==h1&&m==f1+1&&s==s1)
                           {
                               beep=1;
                           }
                      if(key==6||key==4)                         //调日历
                           {
                              switch(key)
                                         {
                                             case 2:
                                                      n++;
                                                          if(n==99)
                                                            {
                                                                   n=1;
                                                                }
                                                          key=6;
                                                          break;
                                                 case 3:
                                                     y++;
                                                         if(y==13)
                                                           {
                                                               y=1;
                                                           }
                                                         key=6;
                                                         break;
                                                 case 4:
                                                     r++;
                                                         if(r==num[y-1])
                                                           {
                                                               r=1;
                                                           }
                                                          key=6;
                                                          break;
                                                          
                                             }
                                                display(n,y,r);
                                          
                           }                          
         }

void time0() interrupt  1
{
        TH0=0x4c;
        TL0=0x00;
        pp++;
        if(pp==20)
         {
             pp=0;
                 s++;
                 if(s==60)
                   {
                       s=0;
                           m++;
                           if(m==60)
                            {
                                   m=0;
                                   h++;
                                   if(h==24)
                                   {
                                      h=0;
                                          m=0;
                                          s=0;
                                          r++;
                                          if(r==num[y-1])
                                            {
                                                     r=1;
                                                         y++;
                                                         if(y==13)
                                                           {
                                                              y=1;
                                                                  n++;
                                                                  if(n==99)
                                                                    {
                                                                           n=1;
                                                                        }
                                                           }
                                                }
                                   }
                                }
                   }
         }
}
日历那部分,不知道为什么不能显示,还有为什么我把          if(key==7||key==2||key==3)改成          if(key==7)时,调闹钟的时候
不能调,也不能显示?

什么意思啊,不懂

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

网站地图

Top