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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

51单片机时钟显示+温度显示Word文档下载推荐.docx

1、内部的寄存器为我们调时,闹钟定时提供了寄存空间。备用用电源也实现了当系统断电后,时钟仍然可以保持。而且它是串行接口,与单片机通信所需要的接口少。2.2 显示系统的方案比较 方案1:用数码管或LED显示。 方案2:用液晶1602显示。方案3:用液晶12864显示。时钟和温度的显示可以用数码管或LED,而且价格便宜。但是数码管的只能显示简单的设计的系统,与我们设计要求也不相符。有很多东西需要显示,还是用显示功能更好的液晶显示器比较好,它能显示更多的数据,用12864显示略想复杂,用1602液晶显示可以完全满足本次设计的数据显示要求。2.3 温度系统方案选择用热敏电阻等测温元件测出电压,再转换成对应

2、的温度。需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。用DS18B20直接测温。DS18B20温度传感器是美国DALLAS半导体公司最新推出的一种改进型智能温度传感器,它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。经比较,我们选择方案2。温度实现只能通过外部的温度传感器来实现。经上网查阅,DS18b20体积小,只有3只脚,电路接法简单。精度为0.5C,也符合我们设计的要求。DS18B20也是我们通常使用的型号,因此温度传感器用DS18B20。2.4 键盘控制方案选择购买集成键盘,采用矩阵形式连接。购买单个复位开关做成键盘。虽然集成键盘美观,与

3、单片机的接口少,但是它的成本比较高。单片机的IO口对于我们的设计绰绰有余。通常我们选用价格便宜单个复位开关做成键盘。3.时钟显示和温度测量系统总体设计初步确定设计系统由单片机主控模块、时钟模块、测温模块、闹铃模块、显示模块、键盘接口模块共6个模块组成,电路系统框图如下图所示。 图1:电路系统框图三、硬件电路单元设计1、单片机最小系统设计1.1复位电路:复位电路有两种方式:上电复位和按钮复位,我们主要用按钮复位方式。如下图所示: 图2:复位电路1.2 晶振电路晶振电路选取条件:晶振12M,电容20pF到30pF,本电路选取20pF。晶振电路原理如下图: 图3:晶振电路2、时钟系统设计DS1302

4、时钟电路晶振选用3.2678KHZ,原理图如下: 图4:基于ds1302时钟系统设计电路3、温度系统设计DS18B20温度传感DQ端接单片机P1.3口,电路原理图如下: 图5:基于DS18b20温度系统设计电路4、液晶显示系统设计1602液晶显示电路由1K电阻和10K的精密电阻组成,控制端接P1.0、P1.1、P1.2口,数据端接P2口,电路图如下: 图6:液晶1602显示电路5、蜂鸣器系统设计蜂鸣器闹铃电路由蜂鸣器跟1K限流电阻组成,电路图如下: 图7:蜂鸣器电路6、电源模块本系统采用USB供电,用发光二极管显示通电状况,电源电源电路如下: 图8:电源电路7、时间调节模块本系统采用3个按键调

5、节时间。S1是菜单键,选择要调节的位;S2按一下表示加一;S3按一下表示减一。电路如下: 图9:时钟调节电路四、软件调试1、程序流程图如下: 图10:程序流程图 2、程序见附录5、硬件调试1、原理图如下: 图11:总原理图2、PCB图如下: 图12:PCB图其中红色部分为跳线;3、实物测试板子制作完成后上电测试发现电源灯没有显示,用万用表测量之后发现精密电阻接线错误,导致VCC与GND直接连通。修正之后发现电源指示灯还是没有亮,测量USB两端电压为-4.88V,卸掉USB口,插上排针用杜邦线连接单片机的VCC和GND之后,电源灯能够点亮,液晶能够驱动,但是亮度不够。测量液晶两端的电压发现只有2

6、.5V,用导线将液晶背光的VCC直接接上电源VCC后,液晶亮度正常。将程序下载之后经过几次调试和修改,最终实现了想要达到的效果。6、总结与体会在开始本次课程设计前花费了十多天的时间认真学习了单片机,通过书本和视频的学习,对单片机有了进一步的掌握并学会C51编程的一些方法。这对于完成本次课程设计提供了很大的帮助。从这次的课程设计中,我真真正正的意识到,在写程序时,逻辑思维要清晰,要有耐心。同时要巧妙的利用C语言的可移植性,这对写程序有很大的帮助。参考文献:1.郭天祥单片机学习板配套资料2.51单片机C语言教程 郭天祥主编 电子工业出版社3.C语言程序设计 尹业安,白燕主编 国防科技大学出版社4.

7、单片机原理与应用及C51程序设计 谢维成 杨加国 主编 清华大学出版社程序如下: #include#include#define uchar unsigned char #define uint unsigned int#define LCDIO P2sbit DQ=P13;/ds18b20与单片机连接口sbit rs=P12;sbit rd=P11;sbit lcden=P10;sbit acc0=ACC0; /移位时的第0位sbit acc7=ACC7; /移位时用的第7位uchar second,minute,hour,day,month,year,week,count=0;uchar

8、ReadValue,num,time;uint tvalue;/温度值uchar tflag;uchar code table= 2012-06-29 FIR;uchar code table1= 08:45:00 000.0Cuchar code table2= FRISATSUNMONTUEWESTUR;uchar data disdata5;sbit DATA=P01; /时钟数据接口sbit RST=P02;sbit SCLK=P00;sbit menu=P35; /菜单sbit add=P36; /加一sbit dec=P37; /减一void delay(uint z) uint

9、x,y; for(x=z;x0;x-) for(y=110;yy-);void delay1(uint z) for(;zz-);void write_com(uchar com) /lcd写命令指令:RS=L,RW=L, D0D7=指令码,E=高脉冲 rs=0; rd=0; lcden=0; P2=com; delay(5); lcden=1;void write_date(uchar date) /lcd写数据指令:RS=H,RW=L, D0D7=数据,E=高脉冲 rs=1; P2=date;void init() uchar num; write_com(0x38); /显示模式设置,默

10、认为0x38,不用变。 write_com(0x0c); /显示功能设置0x0f为开显示,显示光标,光标闪烁;0x0c为开显示,不显光标,光标不闪 write_com(0x06); /设置光标状态默认0x06,为读一个字符光标加1. write_com(0x01); /显示清屏,将上次的内容清除,默认为0x01. write_com(0x80); /设置初始化数据指针,是在读指令的操作里进行的 /初始化显示时间(table table1中的内容) for(num=0;num15;num+) write_date(tablenum); delay(5); write_com(0x80+0x40)

11、; write_date(table1num); void Write1302(uchar dat) /写8bit数据 uchar i; SCLK=0; /拉低SCLK,为脉冲上升沿写入数据做好准备 delay1(2); /稍微等待,使硬件做好准备 for(i=0;i=1; /将dat的各数据位右移1位,准备写入下一个数据位 void WriteSet1302(uchar Cmd,uchar dat) /向cmd相应地址中写入一个字节的数据 RST=0; /禁止数据传递 /确保写数居前SCLK被拉低 RST=1; /启动数据传输 Write1302(Cmd); /写入命令字 Write1302

12、(dat); /写数据 /将时钟电平置于已知状态uchar Read1302(void) /读8bit数据 uchar i,dat;i+) /连续读8个二进制位数据 /将dat的各数据位右移1位,因为先读出的是字节的最低位 if(DATA=1) /如果读出的数据是1 dat|=0x80; /将1取出,写在dat的最高位 /将SCLK置于高电平,为下降沿读出 /稍微等待 /拉低SCLK,形成脉冲下降沿 return dat; /将读出的数据返回uchar ReadSet1302(uchar Cmd) /从cmd相应地址中读一个字节的数据 uchar dat; /拉低RST dat=Read130

13、2(); /读出数据void Init_DS1302(void) WriteSet1302(0x8E,0x00); /根据写状态寄存器命令字,写入不保护指令 WriteSet1302(0x80,(0/10)4|(0%10); /根据写秒寄存器命令字,写入秒的初始值 WriteSet1302(0x82,(45/10)4|(45%10); /根据写分寄存器命令字,写入分的初始值 WriteSet1302(0x84,(8/10)4|(8%10); /根据写小时寄存器命令字,写入小时的初始值 WriteSet1302(0x86,(29/10)4|(29%10); /根据写日寄存器命令字,写入日的初始值

14、 WriteSet1302(0x88,(6/10)4|(6%10); /根据写月寄存器命令字,写入月的初始值 WriteSet1302(0x8c,(12/10)4|(12%10); / 根据写年寄存器命令字,写入年的初始值 WriteSet1302(0x8a,(1/10)4)*10 + (ReadValue&0x0F); /从DS1302读取时间秒 ReadValue = ReadSet1302(0x83); minute=(ReadValue& /从DS1302读取时间分 ReadValue = ReadSet1302(0x85); hour=(ReadValue& /从DS1302读取时间

15、小时 ReadValue = ReadSet1302(0x87); day=(ReadValue& /从DS1302读取日期 日 ReadValue = ReadSet1302(0x89); month=(ReadValue& /从DS1302读取日期 月 ReadValue = ReadSet1302(0x8d); year=(ReadValue& /从DS1302读取日期 年 ReadValue=ReadSet1302(0x8b); week=ReadValue&0x07; /从DS1302读星期 DisplaySecond(second); / 显示秒、分、小时、天、月、年、星期 Dis

16、playMinute(minute); DisplayHour(hour); DisplayDay(day); DisplayMonth(month); DisplayYear(year); DisplayWeek(week);void turn_val(char newval,uchar flag,uchar newaddr,uchar s1num) /刷新时间(将改变的时间显示到LCD上) newval=ReadSet1302(newaddr); /读取当前时间 newval=(newval&4)*10+(newval&0x0f); /将bcd码转换成十进制 if(flag) /判断是加一

17、还是减一 newval+; switch(s1num) case 1: if(newval99) newval=0; DisplayYear(newval); break; case 2:12) newval=1; DisplayMonth(newval); case 3:31) newval=1; DisplayDay(newval); case 4:6) newval=0; DisplayWeek(newval); case 5:23) newval=0; DisplayHour(newval); case 6:59) newval=0; DisplayMinute(newval); ca

18、se 7: DisplaySecond(newval); default:break; else newval-; switch(s1num) if(newval=0) newval=99; if(newval=0) newval=12; break; if(newval=0) newval=31; DisplayDay(newval); if(newval0) newval=6;0) newval=23;0) newval=59; default: WriteSet1302(newaddr-1),(newval/10)4)|(newval%10); /将新数据写入寄存器void key_scan(void) /键盘扫描程序 uchar miao,s1num=0; if(menu=0) while(!menu); s1num+; while(1)

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

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