迤逦殇 发表于 2019-6-21 10:49:07

请问怎么改我这个程序可以让选中的时间闪烁,在线等,急!!!

        #include "reg52.h"                       //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;

u8 code smgduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40,0x00,0x80 };//数码管显示0-9和-的断码
/*定义全局变量*/
unsigned int counter;          //定义计数数据
unsigned char mode;                //定义模式
unsigned char second=0,minute=0;hour=12;//定义秒分时的初始值
unsigned char ADD_bit=0,DEC_bit=0,flag=0;//加标志位和减标志位赋初值
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
   

/*定义按键*/
sbit k1=P3^1;                      //按键P3^1调节模式变化
sbit ADD=P3^0;                  //按键P3^0实现加一
sbit DEC=P3^2;                  //按键P3^2实现减一
sbit k4=P3^3;                                          // 按键P3^3调闹钟        暂时不会

          
          /*******************************************************************************
* 函 数 名         : delay
* 函数功能                   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void delay(u16 i)
    {
      while(i--);
                }                          
               



           void Digdisplay()
{               
LSA=1;LSB=1;LSC=1;                                          //7
P0=smgduan;delay(10);P0=smgduan;//间隔一段时间扫描,消隐                  
LSA=0;LSB=1;LSC=1;                                          //6
P0=smgduan;delay(10);P0=smgduan;

LSA=0;LSB=0;LSC=1;                                          //4
P0=smgduan;delay(10);P0=smgduan;          
LSA=1;LSB=1;LSC=0;                                          //3
P0=smgduan;delay(10);P0=smgduan;              
        if(counter>0&&counter<49)
                {        LSA=1;LSB=1;LSC=0;        P0=0x80;delay(10);
               
                        }       
                else                                         

                {LSA=1;LSB=1;LSC=0;        P0=0x80;}


LSA=1;LSB=0;LSC=0;                                          //1
P0=smgduan+0x80;delay(10);P0=smgduan;
LSA=0;LSB=0;LSC=0;                                          //0
P0=smgduan;delay(10);P0=smgduan;

LSA=0;LSB=1;LSC=0;           //2
P0=smgduan;delay(1);P0=smgduan;
LSA=1;LSB=0;LSC=1;                                          //5
P0=smgduan;delay(1);P0=smgduan;
}






/*按键扫描*/
void Buttonscan()               
{
   /*通过标志位来控制模式*/
   if(k1==0)//控制模式键 按下
   {
   flag=1;                       //确定按键按下
   }
   if((k1)&&(flag))
   {
   flag=0;
   mode++;
   if(mode==4)
   mode=0;
   }


   if(mode==1)       //加减秒
   {

   /*加按键*/
   if(ADD==0)//加键按下
   {       
   ADD_bit=1;
   }
   if((ADD)&&(ADD_bit))
   {
   ADD_bit=0;
   second++;
   if(second==60)
   second=0;
   }
   
   /*减按键*/
   if(DEC==0)
   {
   DEC_bit=1; //按下按键
   }
   if((DEC)&&(DEC_bit==1))
   {
   DEC_bit=0;
   if(second==0)
   second=59;
   second--;
   }
   }
   
      
   


   if(mode==2) //加减分
   {
   if(ADD==0)
   {
   
   ADD_bit=1;
   }
   if((ADD)&&(ADD_bit))
   {
   ADD_bit=0;
   minute++;
   if(minute==60)
        minute=0;
        }

        if(DEC==0)
        {
        DEC_bit=1;
        }
        if((DEC)&&(DEC_bit==1))
        {
        DEC_bit=0;
        if(minute==0)
        minute=60;
        minute--;
        }
        }
       
       
       if(mode==3)   //加减时
{
   if(ADD==0)
   {
   ADD_bit=1;
   }
   if((ADD)&&(ADD_bit))
   {
   ADD_bit=0;
   hour++;
   if(hour==24)
        hour=0;
        }

        if(DEC==0)
        {
        DEC_bit=1;
        }
        if((DEC)&&(DEC_bit==1))
        {
        DEC_bit=0;
        if(hour==0)
        hour=24;
   hour--;
        }
        }
       }
       

        /*初始化*/
        void time0Init()
        {
        TMOD=0x01; //设置定时器模式一
        TH0=0xd8;//高八位赋初值
        TL0=0xf0;//低八位赋初值
        TR0=1;//启动定时器0计数
        ET0=1;//使能定时器中断
        EA=1;//使能总中断
        }
/*主函数*/

   void main()
{          
   time0Init();//初始化函数
          
while(1)
{       

Digdisplay();       //显示函数   
Buttonscan();               //按键

}

}


       /*中断*/
       void time0() interrupt 1
{
          TH0=0xd8;//高八位赋初值
      TL0=0xf0;//低八位赋初值
          counter++;
           if(counter==100)
           {
                counter=0;
                second++;//秒加1       
                if(second==60)
               {
               second=0;
               minute++;//分加1
                  if(minute==60)
               {
               minute=0;
               hour++;//时加1
                  if(hour==24)
                     hour=0;
               }
               }
               }
       }
页: [1]
查看完整版本: 请问怎么改我这个程序可以让选中的时间闪烁,在线等,急!!!