找回密码
 立即注册

QQ登录

只需一步,快速开始

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

想在这个时钟程序加个闹钟功能,求大神指导

[复制链接]
跳转到指定楼层
楼主
ID:194878 发表于 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);
    }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:194878 发表于 2017-6-3 18:04 | 显示全部楼层
cjjcjj1 发表于 2017-6-2 22:57
闹钟是固定时间响?还是需要随意设置时间?

随意设置时间
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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