找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 2376|回復(fù): 2
收起左側(cè)

想在這個時鐘程序加個鬧鐘功能,求大神指導(dǎo)

[復(fù)制鏈接]
ID:194878 發(fā)表于 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)   //延時函數(shù)
{
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)  //顯示函數(shù)
{
   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()    //調(diào)時函數(shù)
{  

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

       if(ad==1)
       {
         TR0=0;    //關(guān)閉定時器0
         write_com(0x80+0x40+10);//秒位
         write_com(0x0f);  //開光標(biāo)
       }
}
       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() //加函數(shù)
{
   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()//減函數(shù)
{
   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()//主函數(shù)
{  
   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函數(shù)
{
  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);
    }
}


回復(fù)

使用道具 舉報

ID:82765 發(fā)表于 2017-6-2 22:57 | 顯示全部樓層
提示: 作者被禁止或刪除 內(nèi)容自動屏蔽
回復(fù)

使用道具 舉報

ID:194878 發(fā)表于 2017-6-3 18:04 | 顯示全部樓層
cjjcjj1 發(fā)表于 2017-6-2 22:57
鬧鐘是固定時間響?還是需要隨意設(shè)置時間?

隨意設(shè)置時間
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表