ImageVerifierCode 换一换
格式:DOCX , 页数:18 ,大小:19.06KB ,
资源ID:8035489      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8035489.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(可用按键修改时间的DS1302时钟显示程序资料.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

可用按键修改时间的DS1302时钟显示程序资料.docx

1、可用按键修改时间的DS1302时钟显示程序资料#include/52单片机头文件,规定了52单片机的寄存器和IO口等#include/_nop_空指令及左右循环移位子函数库 #include lcd1602.hsbit sda=P11; /位定义1302芯片的接口,数据输出端定义在P1.1引脚sbit rst=P12; /位定义1302芯片的接口,复位端口定义在P1.1引脚sbit sck=P10; /位定义1302芯片的接口,时钟输出端口定义在P1.1引脚 sbit s1=P13;/定义设置按钮 sbit s2=P14;/定义调时按钮 sbit s3=P16;/定义确定按钮 sbit s4=

2、P17; sbit ACC0=ACC0; sbit ACC7=ACC7; sbit beep=P36; uchar fen,shi,miao,ri,yue,nian,zhou,s1num,s2num,s4num,flag1,flag2,lshi,lfen; uchar code table= 2014: : ;/要写入1602液晶的数据uchar code table1= : : : ;/字库中的字可直接以外加号的形式直接写入uchar code table2= Welcome To Lcd!;/欢迎界面 uchar code table3=Happy Every One!; /欢迎界面 /*

3、 时函数,z的取值为这个函数的延时ms数,delay(200);大约延时200ms.delay(500);大约延时500ms */ void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void delay20ms(void) /3*i*j+2*i=3*100*60+2*100=20000s=20ms; unsigned char i,j; for(i=0;i100;i+) for(j=0;j60;j+) ;/*函数功能:延时1ms(3j+2)*i=(333+2)10=1010(微秒),可以认为是1毫秒*/void dela

4、y1ms() unsigned char i,j; for(i=0;i4;i+) for(j=0;j33;j+) ; /*函数功能:延时若干毫秒入口参数:n*/ void delaynms(unsigned char n) unsigned char i; for(i=0;in;i+) delay1ms(); /*蜂鸣器函数*/ void didi() uchar i; for(i=0;i60;i+) beep = 0; delay(1); beep = 1; delay(1); /*/void gudingtime_1602() uchar num; write_com(0x80);/将指针

5、指向初始位置 for(num=0;num11;num+)/循环函数,用于将 12- - 写入液晶 write_data(tablenum); write_com(0x80+0x40);/将指针指向1602液晶的第二行 for(num=0;num16;num+)/功能与上同,用于将 : : : 写入 write_data(table1num); /*显示欢迎界面函数*/ void displaystar(void) uchar i; write_com(0x80); for(i=0;i16;i+) write_data(table2i); write_com(0x80+0x40); for(i=

6、0;i0;i-) sda=ACC0; sck=1; sck=0; ACC=ACC1; /*读数据字节子函数*/uchar Output_1byte(void)/读一字节数据 uchar i; for(i=8;i0;i-) ACC=ACC1; ACC7=sda; sck=1; sck=0; return(ACC); /*写DS1302数据函数*/ void write_1302(uchar DS_ADD,uchar DS_DAT)/写操作 rst=0; sck=0; rst=1; Input_1byte(DS_ADD); Input_1byte(DS_DAT); sck=1; rst=0; /*

7、读DS1302数据函数*/ uchar read_1302(uchar DS_ADD)/读操作 uchar DS_INF; rst=0; sck=0; rst=1; Input_1byte(DS_ADD); DS_INF=Output_1byte(); sck=1; rst=0; return(DS_INF); /*初始化DS1302子函数*/ void inital_1302() write_1302(0x8e,0x00);/禁止写保护 /*write_1302(0x90,0xaa);/定义充电 */ write_1302(0x80,0x53);/秒 write_1302(0x84,0x13

8、);/时 write_1302(0x82,0x43);/分 write_1302(0x8c,0x14);/年 write_1302(0x88,0x09);/月 write_1302(0x86,0x06);/日 write_1302(0x8a,0x06);/星期 write_1302(0xc0,0x08);/闹钟小时初始化 write_1302(0xfc,0x00);/闹钟分钟初始化 write_1302(0x8e,0x80);/开保护 /*扫描函数 */ void keyscan() if(s1=0&s4num=0) /按键1按下且s4再次之前未曾按过 delay(5); if(s1=0&s4

9、num=0) flag1=1; s1num+; while(!s1); didi(); if(s1num=1) write_com(0x80+0x40+8);/光标移动到*位置 write_com(0x0f);/显示光标 if(s1num=2) write_1302(0x8e,0x00);/可以写 write_1302(0x80,miao);/写入秒信息 write_1302(0x8e,0x80);/开写保护 write_com(0x80+0x40+5); if(s1num=3) write_1302(0x8e,0x00); write_1302(0x82,fen); /分 write_130

10、2(0x8e,0x80); write_com(0x80+0x40+2); if(s1num=4) write_1302(0x8e,0x00); write_1302(0x88,yue); /月 write_1302(0x8e,0x80); write_com(0x80+13); if(s1num=5) write_1302(0x8e,0x00); write_1302(0x84,shi); /时 write_1302(0x8e,0x80); write_com(0x80+10); if(s1num=6) write_1302(0x8e,0x00); write_1302(0x86,ri);

11、/日 write_1302(0x8e,0x80); write_com(0x80+7); if(s1num=7) write_1302(0x8e,0x00); write_1302(0x8c,nian); /年 write_1302(0x8e,0x80); write_com(0x80+4); /*if(s1num=8) flag1=0; s1num=0; write_1302(0x8e,0x00); write_1302(0x8a,zhou); write_1302(0x8e,0x80); write_com(0x0c);/不显示光标 */ /*/ if(s1num!=0&s4num=0)/

12、按键1按下*次且s4再次之前未曾按过 (按键按下时,时间修改函数) if(s2=0) delay(5); if(s2=0) while(!s2); didi(); if(s1num=1) int x1,x2; x1=miao%16; x2=miao/16; x1+; if(x1=10) x1=0; x2+; if(x2=6) x2=0; miao=x1+x2*16; /秒 write_sfm(0x40+7,miao);/将修改的数送到1602显示 write_com(0x80+0x40+8);/挪回光标 if(s1num=2) int x3,x4; x3=fen%16; x4=fen/16;

13、x3+; if(x3=10) x3=0; x4+; if(x4=6) x4=0; fen=x3+x4*16; write_sfm(4+0x40,fen); write_com(0x80+0x40+5); /分 if(s1num=3) int x5,x6; x5=shi%16; x6=shi/16; x5+; if(x6=2&x5=4) x5=0; x6=0; if(x5=10) x5=0; x6+; shi=x5+x6*16; write_sfm(1+0x40,shi); /时 write_com(0x80+0x40+2); /*if(s1num=4) zhou+; if(zhou=8) zh

14、ou=1; write_zhou(zhou); write_com(0x80+15); */ if(s1num=4) int x5,x6; x5=ri%16; x6=ri/16; x5+; if(x6=3&x5=1) x5=1; x6=0; if(x5=10) x5=0; x6+; ri=x5+x6*16; write_sfm(9,ri); /日 write_com(0x80+10); if(s1num=5) int x5,x6; x5=yue%16; x6=yue/16; x5+; if(x6=1&x5=3) x5=1; x6=0; if(x5=10) x5=0; x6+; yue=x5+x

15、6*16; write_sfm(6,yue); /月 write_com(0x80+7); if(s1num=6) int x5,x6; x5=nian%16; x6=nian/16; x5+; if(x6=2&x5=1) x5=1; x6=0; if(x5=10) x5=0; x6+; nian=x5+x6*16; write_sfm(3,nian); /年 write_com(0x80+4); /*时间调整模式*/ if(s1num!=0|s4num!=0)/ 在调整模式下 if(s3=0)/如果确定键按下 delay(5); if(s3=0) /延时并重新检测S3是否按下,用于差小误差

16、if(s1num!=0) while(!s3); didi();/在松手时将调整后的时间、日期及周信息写入 DS1302,退出调整模式并隐藏光标,按键次数清0 write_1302(0x8e,0x00); write_1302(0x80,miao); write_1302(0x84,shi); write_1302(0x82,fen); write_1302(0x8a,zhou); write_1302(0x8c,nian);/年 write_1302(0x88,yue);/月 write_1302(0x86,ri); write_1302(0x8e,0x80); flag1=0; write

17、_com(0x0c); s1num=0; if(s4num!=0) while(!s3); didi();/在松手时将调整后的时间、日期及周信息写入DS1302,退出调整模式并隐藏光标,按键次数清0 write_1302(0x8e,0x00); write_1302(0xc0,lshi); write_1302(0xfc,lfen); write_1302(0x8e,0x80); flag2=0; s4num=0; write_com(0x0c); if(s4=0&s1num=0)/按键4按下*次且s1再次之前未曾按过 (闹钟位置已改好的) delay(5); if(s4=0&s1num=0)

18、 s4num+; flag2=1; while(!s4); didi(); if(s4num=1) write_com(0x80+0x40+14); write_com(0x0f); if(s4num=2) write_1302(0x8e,0x00);/可以写 write_1302(0xfc,lfen);/闹钟初始化 write_1302(0x8e,0x80);/开写保护 write_com(0x80+0x40+11); if(s4num=3) s4num=0; flag2=0; write_1302(0x8e,0x00);/可以写 write_1302(0xc0,lshi);/闹钟初始化 write_1302(0x8e,0x80);/开写保护 write_com(0x0c);/不显示光标 if(s4num!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1