基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc

上传人:工**** 文档编号:560385119 上传时间:2023-04-01 格式:DOC 页数:12 大小:69.52KB
返回 下载 相关 举报
基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc_第1页
第1页 / 共12页
基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc_第2页
第2页 / 共12页
基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc_第3页
第3页 / 共12页
基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc_第4页
第4页 / 共12页
基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc》由会员分享,可在线阅读,更多相关《基于DS1302和89C52的6位共阳数码管可调日历时钟闹钟秒表器(有整点报时).doc(12页珍藏版)》请在金锄头文库上搜索。

1、HC#include/头文件#include#define uchar unsigned char#define uint unsigned int sbit DATA=P11; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit RST=P12; /位定义1302芯片的接口,复位端口定义在P1.1引脚sbit SCLK=P10; /位定义1302芯片的接口,时钟输出端口定义在P1.1引脚sbit K1=P30;sbit K2=P31;sbit K6=P32;sbit K4=P35;sbit K5=P36;sbit K7=P33;sbit K3=P34;sbit K8=P37;s

2、bit ALARM_BEEP = P13;uchar kedaoru=0,qw1=0;uchar second2,minute2,hour2,second3,minute3,hour3,second4,minute4,hour4,second5,minute5,hour5,second6,minute6,hour6, second7,minute7,hour7;uchar hour1=100; uchar e=1 ;uchar tmp=0;uchar qw=0;uchar g,f,p,q,h,m,second1,minute1,year1=1,month1,day1,jilu;uchar di

3、sbuffer12;disbuffer16;uchar displaytable10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;uchar chocode6=0xfe,0xfd,0xfb,0xf7,0xef,0xdf;uchar second,minute,hour,year,month,day,flag,flag1,naozhong,miaobiao=0;void delaynus(uchar n) uchar i; for(i=0;in;i+) ;void delayms(uchar n) uchar i; while(n-) fo

4、r(i=0;i120;i+);void delay(uint e)uint m;for(m=0;me;m+)void write1302(uchar dat) uchar i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位 void writeset1302(uchar Cmd,uchar dat) RST=0; /禁止数据传递 SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 delaynus(2); /稍微等待,使硬件

5、做好准备 write1302(Cmd); /写入命令字 write1302(dat); /写数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递unsigned char read1302(void) uchar i,dat; delaynus(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,因为先读出的是字节的最低位 if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 SCLK=1; /将SCLK置于高电平,为下降沿读出 delaynus(2); /稍微等待 SCLK=0; /拉

6、低SCLK,形成脉冲下降沿 delaynus(2); /稍微等待 return dat; /将读出的数据返回uchar readset1302(uchar Cmd) unsigned char dat; RST=0; /拉低RST 178 / 192 SCLK=0; /确保写数居前SCLK被拉低 RST=1; /启动数据传输 write1302(Cmd); /写入命令字 dat=read1302(); /读出数据 SCLK=1; /将时钟电平置于已知状态 RST=0; /禁止数据传递 return dat; /将读出的数据返回void setprotect(bit flag)/设置保护 if(

7、flag=1) writeset1302(0x8e,0x80);/写入保护指令 else writeset1302(0x8e,0x00);/写入不保护指令void stoptime(bit flag) / 是否将时钟停止 uchar dat; dat=readset1302(0x81); setprotect(0); if(flag) writeset1302(0x80, dat|0x80); else writeset1302(0x80, dat&0x7f);void init_ds1302(void) setprotect(0); /根据写状态寄存器命令字,写入不保护指令 writeset

8、1302(0x80,(45/10)4|(45%10); /根据写秒寄存器命令字,写入秒的初始值 writeset1302(0x82,(59/10)4|(59%10); /根据写分寄存器命令字,写入分的初始值 writeset1302(0x84,(8/10)4|(8%10); /根据写小时寄存器命令字,写入小时的初始值 writeset1302(0x86,(5/10)4|(5%10);/ ri writeset1302(0x88,(12/10)4|(12%10); /yue writeset1302(0x8c,(13/10)4|(13%10); / nian void display1(void

9、)/调时if(miaobiao=0) if(K2=0)delay(10);if(K2=0)f+;delay(10);if(f=7)f=1;while(!K2)delay(10);switch(f)case 1:flag=1;e=1;kedaoru=1; miaobiao=0;break;case 2:kedaoru=1 ;break;case 3:kedaoru=1 ;break;case 4:e=2; kedaoru=1;break;case 5:kedaoru=1;break;case 6:kedaoru=1 ;break;default:break;if(kedaoru=1)if(K6=

10、0)delay(10);if(K6=0)delay(10);while(!K6)delay(10);switch(f)case 1: second+;if(second=60)second=0;break;case 2:minute+;if(minute=60)minute=0;break;case 3:hour+;if(hour=24)hour=0;break;case 4:day+;if(day=32)day=1;break;case 5:month+;if(month=13)month=1;break;case 6:year+;if(year=100)year=0;break;defau

11、lt:break;if(kedaoru=1)if(K7=0)delay(10);if(K7=0)delay(10);while(!K7)delay(10);switch(f)case 1: second-;if(second=-1)second=59;break;case 2:minute-;if(minute=-1)minute=59;break;case 3:hour-;if(hour=-1)hour=23;break;case 4:day-;if(day=0)day=31;break;case 5:month-;if(month=0)month=12;break;case 6:year-

12、;if(year=-1)year=99;break;default:break;if(K3=0)&(kedaoru=1)/保存闹钟second1=second;minute1=minute;hour1=hour;year1=year;month1=month;day1=day;delay(10);flag=0;f=0;naozhong=0;kedaoru=0;return; if(K4=0)&(kedaoru=1)/保存时间delay(10);setprotect(0); /根据写状态寄存器命令字,写入不保护指令writeset1302(0x80,(second/10)4|(second%10); /根据写秒寄存器命令字,写入秒的值writeset1302(0x82,(minute/10)4|(minute%10); /根据写分寄存器命令字,写入分的值writeset1302(0x84,(hour/10)4|(hour%10); /根据写小时寄存器命令字,写入小时的值writeset1302(0x86,(day/10)4|(day%10);/ riwriteset1302(0x88,(month/10)4|(month%10); /yuewriteset1302(0x8c,(ye

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号