单片机ds1302时钟例程_单片机ds1302时钟程序

单片机ds1302时钟例程_单片机ds1302时钟程序51单片机简易时钟(DS1302,数码管)#include "reg51.h"#include"ds1302.h"#define uchar unsigned char#define uint unsigned intsbit smg1=P2^0;//数码管sbi

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/97424.html

(0)
上一篇 2024年 5月 20日 下午9:28
下一篇 2024年 5月 20日 下午9:42

相关推荐

关注微信