求助,当我按下k1时,hour加4,这是为什么?怎么样将它修改为加一??

2019-03-24 17:08发布

#include<reg51.h>    //  包含51单片机寄存器定义的头文件  
unsigned char Tab[ ]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};   
unsigned char port[8]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
unsigned char int_time ; //中断次数计数变量
unsigned char second;    //秒计数变量
unsigned char minute;    //分钟计数变量
unsigned char hour=12;     //小时计数变量
unsigned char funtion_flag=0;
sbit KEY1=P3^0;  
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;      
void delay(void)      //延时函数,延时约0.6ms  
{     unsigned char j;  
                for(j=0;j<180;j++);   
}  
/*延时程序*/  
void delay_ms(unsigned int z)   
{                unsigned int i,j;  
                for(i=0; i<z; i++)  
                for(j = 0; j < 110; j++);
}
/***********************************
函数功能:显示秒的子程序 入口参数:s  
************************************/  
void DisplaySecond(unsigned char s)
{     P2=port[6];        //P2.6引脚输出低电平, DS6点亮     
                P0=Tab[s/10];          //显示十位   
                delay();   delay();    delay();        
                P2=port[7];       //P2.7引脚输出低电平, DS7点亮     
                P0=Tab[s%10];         //显示个位  
                delay();   delay();    delay();     
                P2=0xff;     //关闭所有数码管     
                P0=0xff;   
                delay();   delay();    delay();   
}   
/**************************************
函数功能:显示分钟的子程序 入口参数:m  
***************************************/
void DisplayMinute(unsigned char m)
{       P2=port[3];   // P2.3引脚输出低电平, DS3点亮      
                P0=Tab[m/10];//显示个位      
                delay();        delay();    delay();      
                P2=port[4];   // P2.4引脚输出低电平, DS4点亮     
                P0=Tab[m%10];   
                  delay();    delay();    delay();      
                  P2=port[5];   //P2.5引脚输出低电平, DS5点亮     
                  P0=0x40;   //分隔符“-”的段码     
                delay();    delay();    delay();      
                  P2=0xff;   //关闭所有数码管   
                  P0=0xff;      
                  delay();    delay();    delay();      
}  
/**************************************
函数功能:显示小时的子程序 入口参数:h  
***************************************/
void DisplayHour(unsigned char h)
{       P2=port[0];        //P2.0引脚输出低电平, DS0点亮   
            P0=Tab[h/10];          //显示十位     
                delay();   delay();    delay();
                P2=port[1];       //P2.1引脚输出低电平, DS1点亮     
                P0=Tab[h%10];    //显示个位  
                delay();   delay();     delay();      
                P2=port[2];     //P2.2引脚输出低电平, DS2点亮   
                P0=0x40;     //分隔符“-”的段码   
                delay();   delay();    delay();        
                P2=0xff;     //关闭所有数码管   
                P0=0xff;     
                delay();   delay();    delay();      
}   
void Key_Scanf(void)
{     
        if(KEY1==0)   
                {       delay_ms(10);      
                if(funtion_flag==0)        
                         {      funtion_flag=1;      
                                         while(KEY1==0);            
                          }   
            }      
        if(KEY1==0)     
                {                delay_ms(10);     
                                if(KEY1==0)        
                        {      if(funtion_flag==1)        
                         {      funtion_flag=2;      
                                         while(KEY1==0);              
                         }        
                         }            
                }        
         if(KEY1==0)   
          {        delay_ms(10);     
                  if(KEY1==0)      
                  {      
                        if(funtion_flag==2)        
                          {      funtion_flag=3;      
                                          while(KEY1==0);           
                           }      
                   }            
          }        
          if(KEY1==0)   
           {        delay_ms(10);     
                           if(KEY1==0)        
                           {   if(funtion_flag==3)      
                            {         
                                funtion_flag=0;
                              while(KEY1==0);            
                                  }      
                        }           
                }      
        if(funtion_flag==1)   //小时调整     
        {      if(KEY2==0)        
                        {  delay_ms(10);            
                           hour++;                                                                         
                         }      
                        if(KEY3==0)        
                         {  delay_ms(10);      
                           if(KEY3==0)      
                           {  hour--;         
                           }      
                         }            
        }
        if(funtion_flag==2)      //分钟调整
        {     if(KEY2==0)        
                  {  delay_ms(10);      
                           if(KEY2==0)      
                           { minute++;               
                           }      
                  }      
                  if(KEY3==0)        
                  {  delay_ms(10);      
                           if(KEY3==0)      
                           { minute--;            
                           }      
                  }            
        }        
        if(funtion_flag==3)     //秒调整
        {     if(KEY2==0)        
                   {  delay_ms(10);      
                                if(KEY2==0)      
                                { second++;              
                                }     
                   }      
                  if(KEY3==0)        
                   {  delay_ms(10);      
                                 if(KEY3==0)      
                                 { second--;               
                                 }      
                   }            
        }  
}   
/*********  主函数 ***************/   
void main(void)  
{      
                unsigned int i;   
                while(KEY4!=0);     
                TMOD=0x01;             //使用定时器T0      
                EA=1;                  //开中断总允许   
                ET0=1;                 //允许T0中断   
                TH0=(65536-46083)/256;  //定时器高八位赋初值   
                TL0=(65536-46083)%256;  //定时器低八位赋初值   
                TR0=1;        
                int_time=0;    //中断计数变量初始化
                second=0;      //秒计数变量初始化   
                minute=0;     //分钟计数变量初始化   
                hour=12;       //小时计数变量初始化         
while(1)     
{      while(funtion_flag==0)    //无按键按下时显示        
                {    DisplaySecond(second);    //调用秒显示子程序      
                         delay();        
                                DisplayMinute(minute);   //调用分钟显示子程序      
                                delay();         
                                        DisplayHour(hour);            
                                        delay();         
                                        Key_Scanf();        
                }         
                while(funtion_flag==1)   //小时闪烁      
                 {    DisplayHour(hour);       //调用时显示子程序      
                           delay();         
                          for(i=0;i<3;i++)      
                          { DisplaySecond(second);    //调用秒显示子程序      
                            delay();        
                                  DisplayMinute(minute);   //调用分钟显示子程序      
                                   delay();      
                    }        
                        Key_Scanf();        
                }         
           while(funtion_flag==2)    //分闪烁      
                 {    DisplayMinute(minute);   //调用分显示子程序      
                           delay();      
                           for(i=0;i<3;i++)     
                    {  DisplaySecond(second);   //调用秒钟显示子程序
                   delay();      
                                 DisplayHour(hour);            
                                delay();        
                    }        
                                 Key_Scanf();        
                }         
                while(funtion_flag==3)     //秒闪烁      
                 {    DisplaySecond(second);    //调用秒显示子程序      
                      delay();      
                   for(i=0;i<3;i++)      
                   {   DisplayMinute(minute);   //调用分钟显示子程序      
                              delay();        
                            DisplayHour(hour);            
                                   delay();        
                   }        
                                   Key_Scanf();           
                 }                              
                                   Key_Scanf();
}   
}        
/***** 函数功能:定时器T0的中断服务子程序 *****/   
void interserve(void ) interrupt 1 using 1  //调用定时器0   
{     int_time++;   
        if(int_time==20)     
         {   int_time=0;    //中断计数变量清0            
                 second++;      //秒计数变量加1      
         }
    if(second==60)      
         {   second=0;    //如果秒计满60,将秒计数变量清0        
             minute++;    //分钟计数变量加1      
         }      
        if(minute==60)         
         {   minute=0;    //如果分钟计满60,将分钟计数变量清0         
             hour++;      //小时计数变量加1      
         }         
         if(hour==24)           
          {   hour=0;    //如果小时计满24,将小时计数变量清0              
          }        
          TH0=(65536-46083)/256;   //定时器重新赋初值      
          TL0=(65536-46083)%256;                  
}


此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。