标题: 想在这个时钟程序加个闹钟功能,求大神指导 [打印本页]

作者: yhb306724368    时间: 2017-6-2 13:00
标题: 想在这个时钟程序加个闹钟功能,求大神指导
本帖最后由 yhb306724368 于 2017-6-2 13:02 编辑

#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;
sbit rs=P3^5;
sbit rw = P3^6;
sbit en=P3^4;
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;  
sbit ding=P2^3;    //蜂鸣器
u8  code disp1[]="  Design clock";
u8  code disp2[]="    23:59:40 ";
u8 num,ad;        //全局变量
char miao,fen,shi;
void delay(u16 z)   //延时函数
{
u16 x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);  
}
void write_com(u8 com)  //写指令
{
   rs=0;
   rw=0;
   P0=com;
   delay(5);
   en=1;
   delay(5);
   en=0;
}
void write_date(u8 date)  //读指令
{
   rs=1;
   rw=0;
   P0=date;
   delay(5);
   en=1;
   delay(5);
   en=0;
}
void init_lcd()   //lcd液晶初始化
{  shi=23;
   fen=59;
   miao=40;

   ding=1;   

   k1=1;
   k2=1;
   k3=1;

   rs=0;
   rw=0;
   en=0;

   write_com(0x06);
   write_com(0x0c);
   write_com(0x38);
   write_com(0x01);
   write_com(0x80);

   TMOD=0x01;
   TH0=(65535-50000)/256;
   TL0=(65535-50000)%256;
   EA=1;
   ET0=1;  
}
void lcd_dis(u8 add,u8 shu)  //显示函数
{
   u8 shi,ge;
   shi=shu/10;
   ge=shu%10;
   write_com(0x80+0x40+add);
   write_date(0x30+shi);
   write_date(0x30+ge);

}
void hed()      //蜂鸣器响一次
{
   ding=0;
   delay(10);
   ding=1;
}
void key()    //调时函数
{  

if(k1==0)
  {
   delay(5);//消抖
   if(k1==0)
    {   
      hed();
       ad++;
       while(!k1)

       if(ad==1)
       {
         TR0=0;    //关闭定时器0
         write_com(0x80+0x40+10);//秒位
         write_com(0x0f);  //开光标
       }
}
       if(ad==2)
       {
         write_com(0x80+0x40+7);
         write_com(0x0f);
       }
      if(ad==3)
      {
         write_com(0x80+0x40+4);
         write_com(0x0f);
      }
      if(ad==4)
      {
           write_com(0x0c);
           TR0=1;  //开启定时器0
           ad=0;
      }
    }


}
void jia() //加函数
{
   if(ad!=0)
{

   if(k2==0)
   {
      delay(5);
      if(k2==0)
       {   
         while(!k2);hed();
         if(ad==1)
         {
         miao++;

         if(miao==60)
          {
            miao=0;
          }
         lcd_dis(10,miao);
         write_com(0x80+0x40+10);

         }
         if(ad==2)
         {
         fen++;

         if(fen==60)
          {
            fen=0;
          }
         lcd_dis(7,fen);
         write_com(0x80+0x40+7);

         }
         if(ad==3)
         {
         shi++;

         if(shi==24)
          {
            shi=0;
          }
         lcd_dis(4,shi);
         write_com(0x80+0x40+4);

         }

       }
   }
}
}
void jian()//减函数
{
   if(ad!=0)
{

   if(k3==0)
   {
      delay(5);
      if(k3==0)
       {   
         while(!k3);hed();
         if(ad==1)
         {
         miao--;

         if(miao==0)
          {
            miao=59;
          }
         lcd_dis(10,miao);
         write_com(0x80+0x40+10);

         }
         if(ad==2)
         {
         fen--;

         if(fen==0)
          {
            fen=59;
          }
         lcd_dis(7,fen);
         write_com(0x80+0x40+7);

         }
         if(ad==3)
         {
         shi--;

         if(shi==0)
          {
            shi=24;
          }
         lcd_dis(4,shi);
         write_com(0x80+0x40+4);

         }

       }
   }
}
}
void main()//主函数
{  
   init_lcd();

   for(num=0;num<14;num++)//lcd液晶显示初值
   {
      write_date(disp1[num]);
      delay(10);
   }
     write_com(0x80+0x40);
   for(num=0;num<13;num++)
   {
     write_date(disp2[num]);
   }
     delay(10);
   TR0=1;
     while(1)
       {
             key();
             jia();
             jian();
       }     
}
void timer0()  interrupt 0//定时器中断0函数
{
  u8 a;
  TH0=(65535-50000)/256;
  TL0=(65535-50000)%256;
  a++;
  if(a==20)
    {
       a=0;

       miao++;
       if(miao==60)
       {
           miao=0;
           fen++;
           if(fen==60)
           {
               fen=0;
               shi++;
               if(shi==24)
               {
                shi=0;  
               }
               lcd_dis(4,shi);
           }
           lcd_dis(7,fen);
       }
       lcd_dis(10,miao);
    }
}



作者: cjjcjj1    时间: 2017-6-2 22:57
提示: 作者被禁止或删除 内容自动屏蔽
作者: yhb306724368    时间: 2017-6-3 18:04
cjjcjj1 发表于 2017-6-2 22:57
闹钟是固定时间响?还是需要随意设置时间?

随意设置时间




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