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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(基于单片机的多功能电子钟设计Proteus仿真程序Word格式.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于单片机的多功能电子钟设计Proteus仿真程序Word格式.docx

1、uchar inittime7=0x00,0x00,0x16,0x01,0x05,0x07,0x11; /初始化后设置为:/11年5月1日星期日,16点0分0秒, /从左往右的数据依次是,秒,分,时,日,月,星期,年。uchar code t1= 20 - - ; /液晶固定显示部分。uchar code t2= : uchar code t3=CLOCK ALARM:/各函数声明.void delay(uint z); /毫秒级延时函数。void di(); /蜂鸣器发声函数。void writecom(uchar com); /液晶写命令函数。void writedata(uchar da

2、t); /液晶写数据函数。void writetime(uchar add,char dat); /液晶刷新时分秒。void writenyr(uchar add,char dat); /液晶刷新日期。void writeweek(char week); /液晶星期几显示函数。void keyscan(); /键盘扫描函数。void dswritebyte(uchar d);/往DS1302写入一个字节。 uchar dsreadbyte(); /从DS1302读出一个字节。void dswrite(uchar add, uchar dat); /向DS1302的指定地址写入一个字节。ucha

3、r dsread(uchar add); /从DS1302的指定地址读出一个字节.void init1302time(uchar *pClock); /DS1302时间初始化函数.void init(); /初始化函数。ds18b20_delay(uchar xus); /延时xusvoid write_onechar(uchar dat); /向18B20写一字节uchar read_onechar(); /从18B20读一字节uint read_wendu(); /DS18B20读温度void wendu_desplay(uint dat); /温度值送液晶显示函数 void delay(

4、uint z) /毫秒级延时函数。 uint x,y; for(x=z;x0;x-) for(y=110;yy-); ds18b20_delay(uchar xus) /延时xus while(xus-);/*ds18b20*/void ds18b20_init() /DS18B20初始化 uchar x=0; DQ=1; ds18b20_delay(8); DQ=0; ds18b20_delay(80); ds18b20_delay(14); x=DQ; ds18b20_delay(20);void write_onechar(uchar dat) /写一字节 uchar i; for(i=

5、8;ii-) DQ=0; if(dat&0x01=0x01) DQ=1; else DQ=0; ds18b20_delay(5); DQ=1; ds18b20_delay(1); dat=1; uchar read_onechar() /读一字节 uchar value=0,i; value DQ=0; ds18b20_delay(1); DQ=1; if(DQ=1) value|=0x80; else value&=0x7f; ds18b20_delay(4); return value;uint read_wendu() /DS18B20读温度 uchar a=0,b=0; uint we

6、n=0x0000; ds18b20_init(); /初始化 write_onechar(0xcc); / 跳过读序号列号的操作 write_onechar(0x44); / 启动温度转换 ds18b20_delay(150); /跳过读序号列号的操作 write_onechar(0xbe); /读取温度寄存器等(共可读9个寄存器) 前两个就是温度 b=read_onechar(); /读取温度值低位 a=read_onechar(); /读取温度值高位 wen=a; wen=(wen8)|b; return wen;void wendu_desplay(uint dat) /温度转换后送显示

7、 float temp; unsigned char temp_shi,temp_ge,temp_shu; temp=dat*0.625; /dat*0.0625*10 temp_shi=temp/100; /取十位 temp除不用定义类型 temp_ge =(uint)temp)%100/10; /取个位 temp求模要定义类型,为16位,故定义uint temp_shu=(uint)temp)%100%10; /取小数 writecom(0x80+0x40+10); /送显示 writedata(0x30+temp_shi); writedata(0x30+temp_ge); writed

8、ata(0x2e); writedata(0x30+temp_shu); writedata(0xdf); /温度符号 writedata(0x43);void di() /蜂鸣器发声函数。 beep=0; delay(100); beep=1;void writecom(uchar com) /液晶写命令函数。 lcden=0; lcdrw=0; lcdrs=0; lcddata=com; delay(3); lcden=1;void writedata(uchar dat) /液晶写数据函数。 lcdrs=1; lcddata=dat;void writetime(uchar add,ch

9、ar dat) /液晶刷新时分秒。 /0为时的开始位置,3为分,6为秒。 char shi,ge; shi=dat/10; ge=dat%10; writecom(0x80+0x40+add); writedata(0x30+shi); writedata(0x30+ge);void writenyr(uchar add,char dat) /液晶刷新日期。 /2为年,5为月,8为日。 writecom(0x80+add);void writeweek(char week) /液晶星期几显示函数。 writecom(0x80+12); switch(week) case 1: writedat

10、a(M);delay(5); writedata(ON break; case 2:TUE case 3:WD case 4:H case 5:FRI case 6:SA case 7:void keyscan() /键盘扫描函数。 if(flagalarm=1) /如果闹钟在响,任意键停止闹钟响。 if(kmenu=0)|(kup=0)|(kdown=0)|(kalarm=0) delay(4); if(kmenu=0)|(kup=0)|(kdown=0)|(kalarm=0) while(!(kmenu&kup&kdown&kalarm); di(); flagalarm=0; /清除闹钟

11、标志。 if(kmenu=0) /检测功能键。 delay(4); if(kmenu=0) kmenunum+; /记录功能键按下次数。 if(flagseta=1) / 检测是否在进行闹钟设置。 if(kmenunum=4) kmenunum=1; /因为进行闹钟设置时,只调节 /时分秒,所以,kmenunum 只能等于1,2,3。 flagset=1; /设置标志位,表示在进行各种时间设置。 while(!kmenu); di(); switch(kmenunum) /定位光标闪烁点。 case 1: writecom(0x80+0x40+7); /秒闪烁。 writecom(0x0f);

12、 /开光标闪烁。 break; case 2: writecom(0x80+0x40+4); /分闪烁。 case 3: writecom(0x80+0x40+1); /时闪烁。 case 4: /星期闪烁. case 5: writecom(0x80+9); /日闪烁. case 6: writecom(0x80+6); /月闪烁. case 7: writecom(0x80+3); /年闪烁. case 8: kmenunum=0; writecom(0x0c); /取消光标闪烁。 flagset=0; /取消时间调节标志。 dswrite(0x8e,0x00); /*允许写操作*/ ds

13、write(0x80,second/10*16+second%10); /退出时间设置功能时,往DS1302 dswrite(0x82,minute/10*16+minute%10); /中保存所有时间变量的值。 dswrite(0x84,hour/10*16+hour%10); dswrite(0x8a,week/10*16+week%10); dswrite(0x86,day/10*16+day%10); dswrite(0x88,month/10*16+month%10); dswrite(0x8c,year/10*16+year%10); dswrite(0x8e,0x80); /*禁

14、止写操作*/ if(kmenunum!=0) /只有当功能键按下时,才检测增大,减小键. if(kup=0) delay(2); if(kup=0)kup); switch(kmenunum) /根据功能键被按下的次数,调节相应数值。 case 1: second+; if(second=60) second=0; writetime(7,second); writecom(0x80+0x40+7); /因为,上面送液晶显示 break; /一次,光标后移一位,所以要将光标复位. case 2: minute+; if(minute=60) minute=0; writetime(4,minu

15、te); writecom(0x80+0x40+4); case 3: hour+; if(hour=24) hour=0; writetime(1,hour); writecom(0x80+0x40+1); case 4: week+; if(week=8) week=1; writeweek(week); writecom(0x80+12); case 5: day+; if(day=32) day=1; writenyr(9,day); writecom(0x80+9); case 6: month+; if(month=13) month=1; writenyr(6,month); w

16、ritecom(0x80+6); case 7: year+; if(year=100) year=0; writenyr(3,year); writecom(0x80+3); if(kdown=0) if(kdown=0)kdown); switch(kmenunum) /根据功能键被按次数调节相应数值. second-; if(second=-1) second=59; minute-; if(minute=-1) minute=59; hour-; if(hour=-1) hour=23; week-; if(week=0) week=7; day-; if(day=0) day=31;

17、 month-; if(month=0) month=12; year-; if(year=-1) year=99; if(kalarm=0) /检测闹钟调节键是否按下,此条if语句与 if(kmenunum!=0) /在同一个层次。 delay(2); if(kalarm=0) flagseta=flagseta;kalarm); if(flagseta=0) /此时,退出闹钟设置,保存各相关数值。 flagset=0; /清除时间设置标志,在if(kalarm=0)这个if语句 writecom(0x80+0x40);/中,不用flagset=1这条语句来设置 /flagset标志位,因为

18、,如果进行了闹钟时间的设置 /,就会执行前面if(kmenunum=0)语句中的flagset=1这条语句。 /清除液晶上的“Ri”闹钟调节标志。 /writedata( /*for(i=0;i13;i+) writedata(t3i); */ writecom(0x0c); dswrite(0x8e,0x00); dswrite(writealarmsecond,second/10*16+second%10); /往DS1302中保存闹钟的时分秒值。 dswrite(writealarmminute,minute/10*16+minute%10); dswrite(writealarmhour,hour/10*16+hour%10); dswrite(0x8e,0x80); else /进入闹钟设置。 s=dsread(readalarmsecond)/16*10+dsread(readalarmsecond)%16; /读取DS1302中闹钟的原始时间,转化为十进制数存进s,m,h保存,用以后面判断闹钟时间是否到达。 m=dsread(readalarmminute)/16*10+dsread(re

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

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