




已阅读5页,还剩7页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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;sbit 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 disbuffer12;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-) for(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); /稍微等待,使硬件做好准备 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; /拉低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(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); /根据写状态寄存器命令字,写入不保护指令 writeset1302(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)/调时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=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;default: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-;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,(year/10)4|(year%10);flag=0;f=0;kedaoru=0;return;if(kedaoru=0)if(K8=0)delay(10);if(K8=0)q+;delay(10);if(q=5)q=1;while(!K8)delay(10);switch(q)case 1: flag=1;e=1; second=0;minute=0;hour=0;EA=1; miaobiao=1; kedaoru=0;jilu=0;break;case 2:e=1; TR0=1;kedaoru=0;miaobiao=1; /启动 break;case 3:e=1; TR0=0; kedaoru=0;miaobiao=1; /暂停break;case 4: e=1; q=2; kedaoru=0;miaobiao=1;break;default:break;if(miaobiao=1)&(K3=0)second=0;minute=0;hour=0;EA=0;q=1;if(miaobiao=1)&(jilu=0)if(K6=0)delay(10);if(K6=0);h+;delay(10);if(h=6)h=1;while(!K6)switch(h)case 1:second2=second;minute2=minute;hour2=hour;break;case 2:second3=second;minute3=minute;hour3=hour;break;case 3:second4=second;minute4=minute;hour4=hour;break;case 4:second5=second;minute5=minute;hour5=hour;break;case 5: q=3; jilu=1; q=1;break;default:break;if(miaobiao=1)if(K7=0)delay(10);if(K7=0);m+;delay(10);if(m=5)m=1;while(!K7)switch(m)case 1:flag=1;e=1;second=second2;minute=minute2;hour=hour2;q=3; break;case 2:second=second3;minute=minute3;hour=hour3;break;case 3:second=second4;minute=minute4;hour=hour4;break;case 4:second=second5;minute=minute5;hour=hour5;break;default:break; if(K5=0)delay(10);if(K5=0)delay(10);while(!K5)delay(10);h=0;m=0;naozhong=1;EA=0;q=0;kedaoru=0;miaobiao=0;e=1;flag=0;f=0;return;void display(void)if(K1=0)delay(10);if(K1=0)e+;delay(10);if(e=3)e=1;while(!K1)delay(10);switch(e)case 1:for (g=0;g6;g+)P2=chocodeg;p=disbufferg+6;P0=displaytablep;delay(80) ;P2=0xff;delay(1);break;case 2:for (g=0;g=60)second=0;minute+;if(minute=60)minute=0;hour+;if(hour=24)hour=0;void main() uchar ReadValue; /缓冲数据用的 init_ds1302(); /ds1302初始化 time_init();while(1) if(flag=0) ReadValue = readset1302(0x81); /从秒寄存器读数据 second=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);/将读出数据转化 ReadValue = readset1302(0x83); /从分寄存器读 minute=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 ReadValue = readset1302(0x85); /从分寄存器读 hour=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 ReadValue = readset1302(0x87); /从ri寄存器读数据 day=(ReadValue&0x70)4)*10 + (ReadValue&0x0F);/将读出数据转化 ReadValue = readset1302(0x89); /从yue寄存器读 month=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 ReadValue = readset1302(0x8d); /从nian寄存器读 year=(ReadValue&0x70)4)*10 + (ReadValue&0x0F); /将读出数据转化 if(minute=59 ) if(second=49) if(second=50)|(second=52)|(second=54)|(secon
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 民法课件的最好
- 编目员考试原编题及答案
- 安全例会高效召开讲解
- 主体责任落实指南讲解
- 新质生产力赋能经济增长
- 法治对新质生产力的保障作用
- 新质生产力:热词深度解读
- 创建文明校园实施方案
- 小学教育:适配新质生产力的路径探索
- 2025年影像科医学影像学报告书写规范解读答案及解析
- 生育津贴相关管理办法
- 2023-2025年中考语文试题分类汇编:记叙文阅读(辽宁专用)解析版
- 2025年公路检测工程师《水运结构与地基》试题及答案
- 数控机加工技术知识培训课件
- 隔爆水棚替换自动隔爆装置方案及安全技术措施
- (2025年标准)菜地赔偿协议书
- 2025年事业单位工勤技能-广西-广西造林管护工三级(高级工)历年参考题库含答案解析(5卷套题【单选100题】)
- 2025年苏教版新教材数学二年级上册教学计划(含进度表)
- 泌尿外科规培生入科宣教
- 支气管镜入门图谱
- 中职信息技术第一册课件
评论
0/150
提交评论