ds1302实时时钟模块_ds12c887时钟芯片

ds1302实时时钟模块_ds12c887时钟芯片51单片机简易时钟(DS1302,LCD1602,独立按键)1、使用1602显示屏第一行显示当前时间:小时、分钟、秒(24时制),第二行显示闹钟时间。2、通过按键修改时间,小时、分钟、秒3、闹钟与当前时间一直时,声光提示一段时间。4、通过按键修改闹钟时间,小时、分钟5、系统在切断其他的外部电

51单片机简易时钟(DS1302,LCD1602,独立按键)   1、使用1602显示屏第一行显示当前时间:小时、分钟、秒(24时制),第二行显示闹钟时间。   2、通过按键修改时间,小时、分钟、秒   3、闹钟与当前时间一直时,声光提示一段时间。   4、通过按键修改闹钟时间,小时、分钟   5、系统在切断其他的外部电源后,板载的备用电源使DS1302仍能继续工作,并在重新上电以后显示正确的时间
ds1302实时时钟模块_ds12c887时钟芯片
ds1302实时时钟模块_ds12c887时钟芯片   #include <reg51.h>   #include <intrins.h>   #include “lcd1602.h”   #include “ds1302.h”   #define uchar unsigned char   #define uint unsigned int   sbit K1=P3^2;//功能0   sbit K2=P3^3;//功能1   sbit K3=P3^4;//时+   sbit K4=P3^5;//时-   sbit K5=P3^6;//分+   sbit K6=P3^7;//分-   sbit beep=P2^6;//蜂鸣器   sbit led=P1^7;   uchar mode=0;//模式。0时间,1闹钟   uchar start=0;   uint time0=0;   uchar xian0[]={0,0,’:’,0,0,’:’,0,0,’ ‘,’\0′};//显存   uchar xian1[]={0,0,’:’,0,0,’\0′};//显存   uchar shi=0,fen=0;//闹钟   uchar shunxu=0xfe;   void delay(uint i)//延时   {   uchar k;   while(i–)   for(k=0;k<110;k++);   }   uchar key_scan()//按键检测   {   if(!K1)   {   delay(10);//延时防抖   if(!K1)   {   while(!K1);//等待按钮松开   return 1;   }   }   if(!K2)   {   delay(10);//延时防抖   if(!K2)   {   while(!K2);//等待按钮松开   return 2;   }   }   if(!K3)   {   delay(10);//延时防抖   if(!K3)   {   while(!K3);//等待按钮松开   return 3;   }   }   if(!K4)   {   delay(10);//延时防抖   if(!K4)   {   while(!K4);//等待按钮松开   return 4;   }   }   if(!K5)   {   delay(10);//延时防抖   if(!K5)   {   while(!K5);//等待按钮松开   return 5;   }   }   if(!K6)   {   delay(10);//延时防抖   if(!K6)   {   while(!K6);//等待按钮松开   return 6;   }   }   return 0;   }   //主函数   void main()   {   uchar i,j;   init_1602();   Ds1302ReadTime();   TIME[0]&=0X7F;   Ds1302Init();   TMOD=0X01;//定时器0,工作方式1。   TH0=0XFC; //定时1ms   TL0=0X18;   ET0=1;//打开定时器0中断允许   TR0=1;   EA=1;//打开总中断   write_string(2,0,”CLOCK:”);   xian1[0]=shi/10+0x30;   xian1[1]=shi%10+0x30;   xian1[3]=fen/10+0x30;   xian1[4]=fen%10+0x30;   write_string(2,7,xian1);   while(1)   {   if(mode==0)//模式指示灯   led=0;   else   led=1;   if(((10*(TIME[2]>>4)+(TIME[2]&0x0f))==shi)&&(10*(TIME[1]>>4)+(TIME[1]&0x0f)==fen)) //判断响铃   start=1;   else   start=0;   i=key_scan();   switch(i)   {   //时钟校准   case 1: mode=0;break;//时钟模式   case 2: mode=1;break;//闹钟模式   case 3:   if(mode==0)//时钟设置   {   j=10*(TIME[2]>>4)+(TIME[2]&0x0f); //时+   if(j<23)   {   j++;   TIME[2]=((j/10)<<4)+j%10;   xian0[0]=(TIME[2]>>4)+0x30; //显示时间   xian0[1]=(TIME[2]&0x0f)+0x30;   Ds1302Init();   write_string(1,3,xian0);   }   }   else //闹钟设置   {   if(shi<23)   {   shi++;   xian1[0]=shi/10+0x30;   xian1[1]=shi%10+0x30;   write_string(2,7,xian1);   }   }   break;   case 4: //时钟设置   if(mode==0)   {   j=10*(TIME[2]>>4)+(TIME[2]&0x0f); //时-   if(j>0)   {   j–;   TIME[2]=((j/10)<<4)+j%10;   xian0[0]=(TIME[2]>>4)+0x30; //显示时间   xian0[1]=(TIME[2]&0x0f)+0x30;   Ds1302Init();   write_string(1,3,xian0);   }   }   else //闹钟设置   {   if(shi>0)   {   shi–;   xian1[0]=shi/10+0x30;   xian1[1]=shi%10+0x30;   write_string(2,7,xian1);   }   }   break;   case 5:   if(mode==0)//时钟设置   {   j=10*(TIME[1]>>4)+(TIME[1]&0x0f); //分+   if(j<59)   {   j++;   TIME[1]=((j/10)<<4)+j%10;   xian0[3]=(TIME[1]>>4)+0x30;   xian0[4]=(TIME[1]&0x0f)+0x30;   Ds1302Init();   write_string(1,3,xian0);   }   }   else //闹钟设置   {   if(fen<59)   {   fen++;   xian1[3]=fen/10+0x30;   xian1[4]=fen%10+0x30;   write_string(2,7,xian1);   }   }   break;   case 6:   if(mode==0)   {   j=10*(TIME[1]>>4)+(TIME[1]&0x0f); //分-   if(j>0)   {   j–;   TIME[1]=((j/10)<<4)+j%10;   xian0[3]=(TIME[1]>>4)+0x30;   xian0[4]=(TIME[1]&0x0f)+0x30;   Ds1302Init();   write_string(1,3,xian0);   }   }   else   {   if(fen>0)   {   fen–;   xian1[3]=fen/10+0x30;   xian1[4]=fen%10+0x30;   write_string(2,7,xian1);   }   }   }   }   }   void timer0() interrupt 1   {   TH0=0XFC; //定时1ms   TL0=0X18;   if(start) //启动蜂鸣器   beep=!beep;   else   {   P1=0xff;   shunxu=0xfe;   beep=1;   }   if(time0<500)//每隔0.5s读一次时间   time0++;   else   {   time0=0;   TR0=0;EA=0;   if(start)//点亮流水灯   {   P1=shunxu;   shunxu=_crol_(shunxu,1);   }   Ds1302ReadTime();   xian0[0]=(TIME[2]>>4)+0x30; //显示时间   xian0[1]=(TIME[2]&0x0f)+0x30;   xian0[3]=(TIME[1]>>4)+0x30;   xian0[4]=(TIME[1]&0x0f)+0x30;   xian0[6]=(TIME[0]>>4)+0x30;   xian0[7]=(TIME[0]&0x0f)+0x30;   write_string(1,3,xian0);   TR0=1;EA=1;   }   }

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/81747.html

(0)
上一篇 2024年 8月 1日 下午8:18
下一篇 2024年 8月 1日 下午8:21

相关推荐

关注微信