ds1302时钟程序详解_ds1302时钟模块

ds1302时钟程序详解_ds1302时钟模块51单片机简易时钟(DS1302,数码管)#include “reg51.h”#include”ds1302.h”#define uchar unsigned char#defi

51单片机简易时钟(DS1302,数码管)   
ds1302时钟程序详解_ds1302时钟模块
ds1302时钟程序详解_ds1302时钟模块   #include “reg51.h”   #include”ds1302.h”   #define uchar unsigned char   #define uint unsigned int   sbit smg1=P2^0;//数码管   sbit smg2=P2^1;   sbit smg3=P2^2;   sbit smg4=P2^3;   sbit smg5=P2^4;   sbit smg6=P2^5;   sbit K1=P3^2;//时间切换   sbit K2=P3^3;//+   sbit K3=P3^4;//-   uchar code smgduan0[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//显示0~9,无小数点   uchar code smgduan1[10]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//显示0~9,有小数点   uchar xian[]={0,0,0,0,0,0};//显存   uchar mode=0;//模式   uchar time0=0,sec=0;//定时变量   void delay(uint i)//延时   {   while(i–);   }   void disp0()//显示小时   {   if(mode==1)   {   if(sec<11)   {   P0=smgduan0[xian[0]];   smg1=0;delay(100);smg1=1;   P0=smgduan1[xian[1]];   smg2=0;delay(100);smg2=1;   }   }   else   {   P0=smgduan0[xian[0]];   smg1=0;delay(100);smg1=1;   P0=smgduan1[xian[1]];   smg2=0;delay(100);smg2=1;   }   }   void disp1()//显示分钟   {   if(mode==2)   {   if(sec<11)   {   P0=smgduan0[xian[2]];   smg3=0;delay(100);smg3=1;   P0=smgduan1[xian[3]];   smg4=0;delay(100);smg4=1;   }   }   else   {   P0=smgduan0[xian[2]];   smg3=0;delay(100);smg3=1;   P0=smgduan1[xian[3]];   smg4=0;delay(100);smg4=1;   }   }   void disp2()//显示秒   {   if(mode==3)   {   if(sec<11)   {   P0=smgduan0[xian[4]];   smg5=0;delay(100);smg5=1;   P0=smgduan0[xian[5]];   smg6=0;delay(100);smg6=1;   }   }   else   {   P0=smgduan0[xian[4]];   smg5=0;delay(100);smg5=1;   P0=smgduan0[xian[5]];   smg6=0;delay(100);smg6=1;   }   }   void main()//主函数   {   uchar j,k=0;   Ds1302ReadTime();   TIME[0]&=0X7F;   Ds1302Init();   TMOD=0X11;//选择为定时器0模式,工作方式1,仅用TR0打开启动。   TH0=0X3C; //给定时器赋初值,定时50ms   TL0=0XB0;   ET0=1;//打开定时器1中断允许   EA=1;//打开总中断   TR0=1;//打开定时器   while(1)   {   disp0();//显示   disp1();   disp2();   //按键检测   if(!K1 &&(k!=1)) //模式切换   {   k=1;   if(mode<3)   mode++;   else   mode=0;   }   if(mode==1)//调整小时   {   if(!K2 &&(k!=2))//+   {   k=2;   j=10*(TIME[2]>>4)+(TIME[2]&0X0F);   if(j<23)   j++;   else   j=0;   TIME[2]=((j/10)<<4)+j%10;   xian[0]=TIME[2]>>4; //时   xian[1]=TIME[2]& 0x0f;   Ds1302Init();   }   if(!K3 &&(k!=3))//-   {   k=3;   j=10*(TIME[2]>>4)+(TIME[2]&0X0F);   if(j>0)   j–;   else   j=23;   TIME[2]=((j/10)<<4)+j%10;   xian[0]=TIME[2]>>4; //时   xian[1]=TIME[2]& 0x0f;   Ds1302Init();   }   }   if(mode==2)//调整分钟   {   if(!K2 &&(k!=2))//+   {   k=2;   j=10*(TIME[1]>>4)+(TIME[1]&0X0F);   if(j<59)   j++;   else   j=0;   TIME[1]=((j/10)<<4)+j%10;   xian[2]=TIME[1]>>4; //分   xian[3]=TIME[1]& 0x0f;   Ds1302Init();   while(!K3);//等待松开   }   if(!K3 &&(k!=3))//-   {   k=3;   j=10*(TIME[1]>>4)+(TIME[1]&0X0F);   if(j>0)   j–;   else   j=23;   TIME[1]=((j/10)<<4)+j%10;   xian[2]=TIME[1]>>4; //分   xian[3]=TIME[1]& 0x0f;   Ds1302Init();   }   }   if(mode==3)//调整秒   {   if(!K2 &&(k!=2))//+   {   k=2;   j=10*(TIME[0]>>4)+(TIME[0]&0X0F);   if(j<59)   j++;   else   j=0;   TIME[0]=((j/10)<<4)+j%10;   xian[4]=TIME[0]>>4;   xian[5]=TIME[0]& 0x0f;   Ds1302Init();   while(!K3);//等待松开   }   if(!K3 &&(k!=3))//-   {   k=3;   j=10*(TIME[0]>>4)+(TIME[0]&0X0F);   if(j>0)   j–;   else   j=23;   TIME[0]=((j/10)<<4)+j%10;   xian[4]=TIME[0]>>4;   xian[5]=TIME[0]& 0x0f;   Ds1302Init();   }   }   if(K1 && K2 && K3)   k=0;   }   }   void Timer0() interrupt 1//T0中断   {   TH0=0X3C; //给定时器赋初值,定时50ms   TL0=0XB0;   if(time0<10)//定时   time0++;   else   {   time0=0;   //读取时间   Ds1302ReadTime();   xian[0]=TIME[2]>>4; //时   xian[1]=TIME[2]& 0x0f;   xian[2]=TIME[1]>>4; //分   xian[3]=TIME[1]& 0x0f;   xian[4]=TIME[0]>>4; //秒   xian[5]=TIME[0]& 0x0f;   }   if(sec<20)//1s   sec++;   else   sec=0;   }

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

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

(0)
上一篇 2024年 8月 31日 上午9:10
下一篇 2024年 8月 31日 上午9:14

相关推荐

关注微信