标题: 求1602 1302 和按键的闹钟不用中断实现 [打印本页]

作者: 是有你有我    时间: 2015-4-2 20:18
标题: 求1602 1302 和按键的闹钟不用中断实现
#include<reg51.h>
#include"lcd1602.h"
#include"ds1302.h"
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
sbit beep=P1^5;
unsigned char miao,fen,shi,c,flag=0,flag1=0,flag0=0;
int Scan_key();
void lcddisplay();
void lDelay(unsigned char c);
unsigned char panduan();
void set()
{
lcd1602writecom(0x80);
lcd1602writedat('0'+(shi/10));//    //时
lcd1602writedat('0'+(shi%10));//
lcd1602writedat('-');
lcd1602writedat('0'+(fen/10));    //时
lcd1602writedat('0'+(fen%10));
lcd1602writedat('-');
lcd1602writedat('0'+(miao/10));    //时
lcd1602writedat('0'+(miao%10));
// Scan_key();
}

void main()
{      
     beep=1;
lcd1602Init();
        ds1302Init();
       while(1)
       {
              while(1)
  {
     ds1302readtime();
     lcddisplay();
    Scan_key();
    if(flag1==1)
    {
    lcd1602writecom(0x01);
    break;
    }
         }
   while(1)
  {
      set();
      Scan_key();
               c=panduan();
      if(c==1)
      {
         beep=0;
        lDelay(13);
         beep=1;
         if(flag0==1)
         break;
      }
   
           }
   }
}

void lcddisplay()
{
lcd1602writecom(0x80+0X40);
lcd1602writedat('0'+TIME[2]/16);    //时
lcd1602writedat('0'+(TIME[2]&0x0f));     
lcd1602writedat('-');
lcd1602writedat('0'+TIME[1]/16);    //分
lcd1602writedat('0'+(TIME[1]&0x0f));
lcd1602writedat('-');
lcd1602writedat('0'+TIME[0]/16);    //秒
lcd1602writedat('0'+(TIME[0]&0x0f));
lcd1602writecom(0x80);
lcd1602writedat('2');
lcd1602writedat('0');
lcd1602writedat('0'+TIME[6]/16);   //年
lcd1602writedat('0'+(TIME[6]&0x0f));
lcd1602writedat('-');
lcd1602writedat('0'+TIME[4]/16);   //月
lcd1602writedat('0'+(TIME[4]&0x0f));
lcd1602writedat('-');
lcd1602writedat('0'+TIME[3]/16);   //日
lcd1602writedat('0'+(TIME[3]&0x0f));
lcd1602writecom(0x8D);
lcd1602writedat('0'+(TIME[5]&0x07)); //星期

     
}
void lDelay(unsigned char c)
{
unsigned char a,b;
for(;c>0;c--)
{
  for(a=10;a>0;a--)
  {
   for(b=10;b>0;b--);
  }
}
}
int Scan_key()
{
unsigned char num=0;
if(k1==0)
{
   
   lDelay(1);
   if(k1==0)
   {  
    flag1=1;
       num++;
       //while(!k1);
       if(num==3)
       {
        num=0;
       }
            }
}
if(num!=0)
{
   if(k2==0)
     {
        lDelay(1);
        if(k2==0)
    {
    // while(!k2);
      if(num==1)
         {
          miao++;
   
        if(miao==60)
          {
    miao=0;
    fen++;
           }
         }
        if(num==2)
         {
   fen++;
   if(fen==60)
   {
      fen=0;
      shi++;
   }
         }
               if(num==3)
                {
           shi++;
        if(shi==24)
           {
             shi=0;
//             miao=0;
//    fen=0;
           }
         }
  }
      }
  if(k3==0)
  {
    lDelay(1);
     if(k3==0)
       {
         while(!k3);
           if(num==1)
   {
      miao--;
      if(miao==-1)
         {
    miao=59;
    fen--;
         }
   }
   if(num==2)
   {
      fen--;
      if(fen==-1)
        {
    fen=59;
    shi--;
        }
   }
   if(num==3)
   {
     shi--;
     if(shi==-1)
     {
                shi=0;
//       miao=59;
//       fen=59;
       flag0=1;
      }
   }
        }
  }
}
return 0;  
}

unsigned char panduan()
{
if((miao==TIME[0]) || (fen==TIME[1]) || (shi=TIME[2]))
{
  flag=1;
}
return flag;
}
这是我的main的一部分  怎么实现不了切换时分秒 求解释





欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1