求助:我想设计一个电子表,可以调时间的,可是一天了...

2020-02-05 08:44发布

没做完,做的我头好疼,可能我按这个想法走感觉很复杂,是否有好一点的方法呢,求高手帮帮解决。谢谢
代码是:#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

void delayms(uchar a);
void shanshuo();
void jiashu();
void jianshu();
void init();
void display();
uchar i=0,t=0,n=0,m=0,s=0;

sbit k5=P1^4;
sbit k6=P1^5;
sbit k7=P1^6;
sbit k8=P1^7;

//位选
uchar wei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
//段选(共阳极0123456789-)
uchar duan[]={
0xC0,0xF9, 0xA4,0xB0,0x99, 0x92, 0x82,0xF8,0x80,0x90,0xbf};               
        
void main()
{
        while(1)
        {
           init();
           shanshuo();
        }
}

void delayms(uchar a)
{
   uchar w;
   while(a--)
   for(w=0;w<120;w++);
}

//下杠左右移闪烁函数
void shanshuo()
{       
    uchar s,k;
        while(1)
        {
        display();
        if(k7==0) //右移键
        {       
           TR1=1;//停止计数   
           delayms(0); //消抖
           if(k7==0)
           {  
                  for(k=10;k>0;k--)         //闪烁的次数
                  {
              P2=wei[s];
                  P0=0xf7;
          delayms(5000);delayms(5000);         
          P0=0xff;
          delayms(5000);delayms(5000);          
          P0=0xf7;
                   if(k5==0)        //在闪烁过程中如果按键k5按一下数加一
                          {                            
                                delayms(0);//消抖
                                if(k5==0)
                                 {                                  
                                    jiashu();  //加数函数
                                 }
                          }
                          else if(k6==0) //在闪烁过程中如果按键k6按一下数减一
                          {
                                  delayms(0);//消抖
                                if(k6==0)
                                 {                                  
                                  jianshu();   //减数函数
                                 }
                          }
                  }
              if(s>=8)
                  {
                  s=0;                     
                  }
           }s++;
        }
        else if(k8==0)//左移键
        {
           TR1=0;//停止计数       
           if(s==0)
            {
                 s=7;                     
                }
           delayms(0); //消抖
           if(k8==0)
           {  
                  for(k=10;k>0;k--)         //闪烁的次数
                  {
              P2=wei[s];
                  P0=0xf7;
          delayms(5000);delayms(5000);         
          P0=0xff;
          delayms(5000);delayms(5000);          
          P0=0xf7;
                          if(k5==0)                 //在闪烁过程中如果按键k5按一下数加一
                          {                            
                                delayms(0);//消抖
                                if(k5==0)
                                 {                                  
                                    jiashu();  //加数函数
                                 }
                          }
                          else if(k6==0)  //在闪烁过程中如果按键k6按一下数减一
                          {
                                   delayms(0); //消抖
                                if(k6==0)
                                 {                                  
                                  jianshu();   //减数函数
                                 }
                          }
                  }
           }s--;
        }
  }  
}

void jiashu()//加数函数
{

}
void jianshu()//减数函数
{

}

void init()
{  
   TMOD=0x10;
   EA=1;
   EX0=1;IT0=0;          //外部中断0
   EX1=1;IT1=0;          //外部中断1
      
   ET1=1;            //定时计数器
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   TR1=1;
}

void wzd0() interrupt 0//外部中断0
{

}

void wzd1() interrupt 2//外部中断1
{

}

void t1() interrupt 3
{
   i++;
   TH1=(65536-50000)/256;
   TL1=(65536-50000)%256;
   if(i>=20)
   {
            i=0;
         t++;
         if(t>=60)
         {
                 t=0;
                n++;
                if(n>=60)
                {
                   n=0;
                   m++;
                   if(m>=24)
                   {
                            m=0;
                   }
                }
         }
   }
}
void display()
{
   uchar d;
   uchar table[8];
   table[0]=duan[m/10];table[1]=duan[m%10];table[2]=duan[10];
   table[3]=duan[n/10];table[4]=duan[n%10];
   table[5]=duan[10];table[6]=duan[t/10];table[7]=duan[t%10];
   for(d=0;d<8;d++)
   {
   P2=wei[d];
   P0=table[d];
   delayms(2);
   }
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。