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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

基于DS1302和LCD1602的万年历闹钟时钟用开发版直接显示的程序副本Word文档下载推荐.docx

1、DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见数据手册。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。#include in

2、trins.hstring.h#define uint unsigned int#define uchar unsigned charsbit beep=P23;/闹铃sbit IO=P13; /定义1302管脚sbit SCLK=P14;sbit RST=P15;sbit RS=P22;/定义1602管脚sbit RW=P21;sbit EN=P20;sbit key1=P34;/选择 /调时键盘sbit key2=P35;/加sbit key3=P36;/减sbit key4=P37;/确定sbit key11=P16;/选择/闹钟键盘sbit key22=P17;sbit key33=P

3、30;sbit key44=P31;/确定 uchar x1=0,x;int hour=8,minute=0;/闹钟的初始时间8:00uchar DateTime9; /秒,分,时,日,周,月,年 address,uchar lcd1=Dt 2000-00-00 ;uchar lcd2=Time 00:00:00 /*延时*/void delayms(uchar x)/延时毫秒程序 uchar i,j; for(i=x;i0;i-) for(j=110;jj-); /*1302的驱动程序*/void DS1302WriteByte(uchar dat)/写入数据,dat:要写入的数据 ucha

4、r i; SCLK=0;/初始时钟线置为0 delayms(2); for(i=0;i=1;/数据右移一位,准备传输下一位数据/*1302的驱动程序*/uchar DS1302ReadByte()/功能: 读取数据,dat:读取的数据 uchar i; uchar dat;i+)/要返回的数据左移一位 if(IO=1)/当数据线为高时,证明该位数据为 1 dat|=0x80;/要传输数据的当前值置为 1,若不是,则为 0/拉高时钟线 delayms(1);/制造下降沿 return dat;/返回读取出的数据/16*10+dat%16/*1302的驱动程序*/从cmd相应地址中读取一个字节的数

5、据uchar DS1302Read(uchar cmd)/cmd:要写入的控制字节,dat: RST=0;/初始 CE线置为0 RST=1;/初始 CE置为 1,传输开始 DS1302WriteByte(cmd);/传输命令字,要读取的时间/日历地址 dat=DS1302ReadByte();/读取要得到的时间/日期/时钟线拉高/读取结束,CE置为 0,结束数据的传输/返回得到的时间/日期/*1302的驱动程序*/向cmd相应地址中写一个字节的数据void DS1302Write(uchar cmd, uint dat)/cmd:要写入的控制字,dat: /初始 CE线置为 0 /初始时钟线置

6、为0 /初始 CE置为 1,传输开始 /传输命令字,要写入的时间/日历地址 DS1302WriteByte(dat); /写入要修改的时间/日期 /时钟线拉高 /读取结束,CE置为0,结束数据的传输/*初始化ds1302*/给1302写入日期和时钟的值void chushihuaDS1302(void) DS1302Write(0x8e,0x00);/写保护关 DS1302Write(0x80,0x10); /初始秒 DS1302Write(0x82,0x02);/初始分钟 DS1302Write(0x84,0x15); /初始为24小时模式,初始时 DS1302Write(0x86,0x25

7、); /25日 DS1302Write(0x88,0x04);/4月 DS1302Write(0x8c,0x14);/2014年 DS1302Write(0x8a,0x05);/星期5 / DS1302Write(0x90,0x01); /充电 /DS1302Write(0xc0,0xf0); /初始化一次标示 /DS1302Write(0x8e,0x80);/写保护开/*以下是1602的程序*/*/向1602内写命令void write_order(uchar order) RS=0; P0=order; delayms(5); EN=1; EN=0;/*/向1602内写数据void wri

8、te_date(uchar date) RS=1; P0=date;/*/lcd1602的初始化void chushihuaLCD1602() write_order(0x38); write_order(0x0c); write_order(0x06); write_order(0x01);/*其他操作*/void gettime() uchar i,n; for(i=0,n=1;7,n4)+0x30); lcd16=(DateTime6&0x0f)+0x30);/年 lcd18=(DateTime4 lcd19=(DateTime4&/月 lcd111=(DateTime3 lcd112=

9、(DateTime3&/日 lcd114=(DateTime5 lcd115=(DateTime5&/周 lcd25=(DateTime2 lcd26=(DateTime2&/时 lcd28=(DateTime1 lcd29=(DateTime1&/分 lcd211=(DateTime0 lcd212=(DateTime0&/秒 if(DateTime7=DateTime2 & DateTime8=DateTime1) beep=1; delayms(150); beep=0; /*/*/void jianpan() /键盘调时 uchar x2,address,max,min; int it

10、em; if(key1=0) delayms(10); if(key1=0) x1+; if(x1=7) x1=1; switch(x1) case 1: lcd215=Y;x2=1;address=0x8c; max=99;min=0;break; case 2:Mx2=2;address=0x88; max=12;min=1; case 3:Dx2=3;address=0x86; max=31;/天 case 4:Hx2=4;address=0x84; max=23; case 5:Fx2=5;address=0x82; max=59;/分 case 6:Wx2=6;address=0x8

11、A; max=7; while(!key1); item=(DS1302Read(address+1)/16)*10 + (DS1302Read(address+1)%16; if(key2=0) if(key2=0) if(x2=1) item+; else if(x2=2) item+; else if(x2=3) item+; else if(x2=4) item+; else if(x2=5) item+; else if(x2=6) item+; key2); if(key3=0) delayms(10); if(key3=0) if(x2=1) item-; else if(x2=

12、2) item-; else if(x2=3) item-; else if(x2=4) item-; else if(x2=5) item-; else if(x2=6) item-;key3); if(key4=0) if(key4=0) lcd215= x1=0; x2=0;key4); /beep=0;delayms(5000);beep=1; if(itemmax) item=min; if(item=4) x=1; switch(x) lcd213= i=1;da=23;xiao=0; lcd214=(hour lcd215=(hour& delayms(1); case 1: i

13、=2;da=59; lcd214=(minute lcd215=(minute&lcd214=lcd215= x=0;i=0;key11); if(key22=0) if(key22=0) if(i=1) hour=(hour/16)*10)+(hour%16); hour+; if(hourda) hour=xiao; hour=(hour/10)*16+hour%10; lcd214=(hour lcd215=(hour& delayms(1); else if(i=2) minute=(minute/16)*10)+(minute%16); minute+; if(minuteda) m

14、inute=xiao; minute=(minute/10)*16+minute%10; lcd214=(minute lcd215=(minute& key22); if(key33=0) if(key33=0) hour-; if(hourxiao) hour=da; else if(i=2) minute-; if(minutexiao) minute=da;key33); DateTime7=hour;DateTime8=minute;void wzd0() interrupt 0/外部中断0 jianpan();/ void wzd1() interrupt 2/外部中断1 naoz

15、hong();void main() uchar k; EA=1;EX0=1;IT0=1;PX0=1; EX1=1;IT1=1;PX1=0; RW=0;beep=0; chushihuaLCD1602(); if( (DS1302Read(0x81) & 0x80) ) chushihuaDS1302(); /chushihuaDS1302(); while(1) zhuanhuan(); write_order(0x80);/lcd的第一行 for(k=0;k16;k+) write_date(lcd1k); write_order(0x80+0x40);/lcd的第二行 write_date(lcd2k);

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

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