大佬来看一下,我程序有什么问题木有,为什么时钟数值减小键不能用

2019-07-15 09:37发布

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit sda=P2^0;
sbit scl=P2^1;
sbit deep=P1^6;
sbit rs=P2^6;
sbit rw=P2^5;
sbit lcden=P2^7;                   //使用LCD1602液晶
sbit k1=P1^1;
sbit k2=P1^2;
sbit k3=P2^3;
uchar code table[]="2017-9-14";
char fen,miao,shi;
uchar count,k1num;
void init();
void delay();
void delay1(uchar i);
void keyscan();
void write_comand(uchar aa);
void write_date(uchar bb);
void start();
void stop();
void respons();
void write();
uchar read();
void write_add(uchar add,uchar date);
char read_add(uchar add);
void init_24c02();
void shifenmiao(uchar add,uchar date);
void main()
{        init();
    while(1)
        {
         keyscan();
        }
}
void delay()
{ ; ; ; }
void delay1(uchar i)
{
uchar x,y;
for(x=i;x>0;x--)
  for(y=110;y>0;y--);
}
void di()
{
          deep=0;
          delay1(100);
          deep=1;
          
}

void write_comand(uchar aa)
{
     rs=0;
         rw=0;
         P0=aa;
         lcden=1;
         lcden=0;
         delay1(5);
}

void write_date(uchar bb)
{
     rs=1;
         rw=0;
         P0=bb;
         lcden=1;
         lcden=0;
         delay1(5);
}

void shifenmiao(uchar add,uchar date)
{  uchar shi,ge;
   shi=date/10;
   ge=date%10;
   write_comand(0xc0+add);
   write_date(0x30+shi);
   write_date(0x30+ge);
}

void init()
{
   uchar num;
   shi=0,fen=0,miao=0;        //初次化数据
   count=0,k1num=0;


   write_comand(0x38);
   write_comand(0x0c);
   write_comand(0x06);          //对1602液晶进行初次化
   write_comand(0x01);

   write_comand(0x80+0x04);
   for(num=0;num<10;num++)
   {
              write_date(table[num]);
           delay1(100);
   }

   write_comand(0xc0+6);
   write_date(':');
   delay1(10);
   write_comand(0xc0+9);
   write_date(':');
   delay1(10);


   shifenmiao(10,miao);
   shifenmiao(7,fen);
   shifenmiao(4,shi);                                         
   TMOD=0X01;
   TH0=(65536-50000)/256;
   TL0=(65536-50000)%256;
   EA=1;
   ET0=1;
   TR0=1;
}

void keyscan()
{
         if(k1==0)
         {        delay1(5);
            if(k1==0)
                {
                   k1num++;
                   while(!k1);
                   di();
                   if(k1num==1)
                   {
                             TR0=0;
                          write_comand(0xc0+10);
                          write_comand(0x0f);
                   }
                                                                                 //检测功能键被按次数
                        if(k1num==2)
                   {
                             TR0=0;
                          write_comand(0xc0+7);
                          
                   }

                   if(k1num==3)
                   {
                             TR0=0;
                          write_comand(0xc0+4);
                         
                   }

                   if(k1num==4)
                   {
                             k1num=0;
                          write_comand(0x0c);
                          TR0=1;
                          
                         
                   }
               
                }
         
         
         }

         //

         if(k1num!=0)
         {
                  if(k2==0)
                 {
                         delay1(5);
                        if(k2==0)
                        {
                           while(!k2);
                           di();
                           if(k1num==1)
                           {
                                     miao++;
                                  if(miao==60)
                                  {
                                          miao=0;
                                  }
                                  shifenmiao(10,miao);
                                  write_comand(0xc0+10);
                       
                          
                           }
                       

                           if(k1num==2)
                           {
                                     fen++;
                                  if(fen==60)
                                  {
                                          fen=0;                                         //调节时分秒
                                  }
                                  shifenmiao(7,fen);
                                  write_comand(0xc0+7);
                                 
                           }

                           if(k1num==3)
                           {
                                     shi++;
                                  if(shi==24)
                                  {
                                          shi=0;
                                  }
                                  shifenmiao(4,shi);
                                  write_comand(0xc0+4);
                                 
                          
                           }
                       
                        }
                        //数值增大键
                        if(k3==0)                          
                        {    delay1(5);
                             if(k3==0)
                             { while(!k3);
                                   di();
                                  
                                   if(k1num==1)
                                   {  miao--;
                                      if(miao==(-1))
                                          {miao=59;}
                                          shifenmiao(10,miao);
                                          write_comand(0xc0+10);
                                       
                                    }

                                   if(k1num==2)
                                   {  fen--;
                                      if(fen==(-1))
                                          {fen=59;}
                                          shifenmiao(7,fen);
                                          write_comand(0xc0+7);
                                       
                                  
                                  
                                   }

                                   if(k1num==3)
                                   {  shi--;
                                      if(shi==(-1))
                                          {shi=23;}
                                          shifenmiao(4,shi);
                                          write_comand(0xc0+4);
                               
                                  
                                   }
                          
                          
                             }
                       
                        }

                 
                 
                 }
         
         }

}

void t0_time() interrupt 1
{
         TH0=(65536-50000)/256;
     TL0=(65536-50000)%256;
         count++;
         if(count==20)
         { count=0;
           miao++;
           if(miao==60)
           { fen++;
             miao=0;
                 if(fen==60)
                 { shi++;
                   fen=0;
                   if(shi==24)
                   {  shi=0;
                   }
                  shifenmiao(4,shi);
                  
                 
                 }
                 shifenmiao(7,fen);
               

           }
           shifenmiao(10,miao);
          
         
         }
}

0条回答

一周热门 更多>