找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2505|回复: 0
打印 上一主题 下一主题
收起左侧

求1602 1302 和按键的闹钟不用中断实现

[复制链接]
跳转到指定楼层
楼主
ID:76000 发表于 2015-4-2 20:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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的一部分  怎么实现不了切换时分秒 求解释
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表