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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

温度万年历的单片机实现实验报告.docx

1、温度万年历的单片机实现实验报告 一、温度万年历设计的目的和意义.1一、温度万年历设计的目的和意义 随着社会的发展,信息量的不断提升以前对信息交换的要求提高,温度万年历的发展以及投入市场变得非常有必要。本设计是基于51单片机并模拟日常所用的日历,而51系列单片机是各单片机中最为典型和最有代表性的一种。通过本次设计,学习和巩固了单片机指令编程的相关知识,熟悉单片机各部件的组成及其功能。 本设计将制作一种基于单片机控制的带实时温度显示、具有定时功能的电子万年历。传统的电子日历大都体积大,功耗大,显示不准确等特点。为了缩小体积,减小功耗,使其变得小巧灵敏,本设计加入了时钟芯片DS1302,可对时间进行

2、准确记时,同时可设置定时时间,实现定时功能。另外本设计具有显示实时温度的功能。传统的温度传感器系统大都采用放大、调理、A/D转换,转换后的数字信号送入计算机处理,处理电路复杂、可靠性相对较差,占用计算机的资源比较多。本设计将采用DS18B20一线制数字温度传感器,可将温度信号直接转换成数字信号送给微处理器,电路简单,成本低,实现了时间温度同时显示的效果。最后,温度和时间都将通过LCD1602液晶显示器进行显示。测试表明系统达到了设计要求的各项功能,各部分工作正常。二、电路设计方案采用AT89S52作为主控制系统; 直接采用单片机定时计数器提供秒信号;LCD液晶显示屏作为显示。三、原理设计1.

3、基本原理:本电路是由AT89S52单片机为控制核心,具有在线编程功能,低功耗,能在3V超低压工作;时钟电路直接采用单片机定时计数器提供秒信号;温度的采集由DS18B20构成;显示部份由LCD液晶显示屏显示。同时还添加了提醒功能,通过蜂鸣器实现。2. 总体框图 图13. 单元电路设计 单片机主控制模块的设计 AT89S52单片机为40引脚双列直插芯片,有四个I/O口P0,P1,P2,P3, MCS-51单片机共有4个8位的I/O口(P0、P1、P2、P3),每一条I/O线都能独立地作输出或输入。单片机的最小系统如下图2所示,18引脚和19引脚接时钟电路,XTAL1接外部晶振和微调电容的一端,在片

4、内它是振荡器倒相放大器的输入,XTAL2接外部晶振和微调电容的另一端,在片内它是振荡器倒相放大器的输出。第9引脚为复位输入端,接上电容,电阻及开关后够上电复位电路,20引脚为接地端,40引脚为电源端。 DS18B20性能 独特的单线接口仅需一个端口引脚进行通信 简单的多点分布应用 无需外部器件 可通过数据线供电 零待机功耗 测温范围-55+125,以0.5递增 可编程的分辨率为912位,对应的可分辨温度分别为0.5、0.25、0.125和0.0625 温度数字量转换时间200ms,12位分辨率时最多在750ms内把温度转换为数字 应用包括温度控制、工业系统、消费品、温度计和任何热感测系统 负压

5、特性:电源极性接反时,传感器不会因发热而烧毁,但不能正常工作 GND:地 DQ:单线运用的数据输入/输出引脚 VD:可选的电源引脚4. 元件列表元件列表器件数量光汇51单片机开发板1杜邦线若干DS18B201LCD1602液晶屏1四、方案结构图 此方案由于只用到51单片机芯片,因此各个功能都是由编程来实现。大体程序流程框图如下按键调整结构图:时钟调整一 时钟调整二 Protues电路图(部分): 温度万年历整体电路图 时钟调整按键图时钟调整LCM显示图五、温度万年历1602驱动及显示的详细设计驱动部分的代码:头文件如下:#ifndef _1602_H_#define _1602_H_void

6、RdBusy(void);void WrCommand(char command);void WrData(char wrdata);#endif1602驱动源代码如下:/*LCM1602驱动程序8线间接控制方式晶体频率12MHz*/*1602LCD各引脚接口说明VSS 电源地VDD 电源正极VL 液晶显示偏压RS 数据/命令选择R/W RW 读写选择/*LCM1602驱动程序8线间接控制方式晶体频率12MHz*/#include #include /*1602LCD各引脚接口说明VSS 电源地VDD 电源正极VL 液晶显示偏压RS 数据/命令选择R/W RW 读写选择E 使能信号D0 数据

7、背光源正极D1 数据 背光源负极*/*1602接口定义*/#define LCM P0 sbit RS = P25; /0,command; 1,datajkhjholkhkksbit RW = P26; /0,write; 1,readsbit E = P27; /下降沿有效/*常数定义*/#define CMD 0 /RS=0,命令#define DAT 1 /RS=1,数据/模块忙闲判断void RdBusy(void) char flag=0xff; do LCM=0xff; RS=CMD; RW=1; E=1; _nop_(); _nop_(); _nop_(); /这三句很重要 f

8、lag=LCM; E=0; flag&=0x80; while(flag);/写命令void WrCommand(char command) LCM=command; RS=CMD; RW=0; E=1; E=0; RW=1; RdBusy(); /等待LCM完成本次操作/写数据void WrData(char wrdata) LCM=wrdata; RS=DAT; RW=0; E=1; E=0; RW=1; RdBusy(); /等待LCM完成本次操作/*E 使能信号D0 数据 背光源正极D1 数据 背光源负极*/显示头文件:#ifndef _DISPLAY_H_#define _DISPL

9、AY_H_#define uchar unsigned charvoid delayx5ms(int dcnt);void LcmInit(void);void ClrLine(uchar line );void Write1Line(uchar line,uchar* buf);void WrData2Addr(uchar addr,uchar dat);void disall();void offall();#endif显示C源代码:#include #include 1602.h#define LCM P0#define uchar unsigned charextern uchar f

10、lag;extern uchar year,month,date,day,hour,minu,sec;extern uchar Dispbuf016;extern uchar Dispbuf116;extern code uchar Num2Asc16;extern code uchar WEEK21;extern uchar s1num;/延迟子程序,基数5msvoid delayx5ms(int dcnt) int tmp; for(; dcnt0; dcnt-) tmp=0x230; while(tmp-)continue; /模块初始化void LcmInit(void) LCM=0;

11、 delayx5ms(40); /延迟200ms WrCommand(0x38); /8bit接口,两行显示,57点阵 delayx5ms(2); /延迟10ms WrCommand(0x38); /同上,该指令要写两次 delayx5ms(1); /延迟5ms WrCommand(0x06); /地址加一,字符不移动 WrCommand(0x0c); /开显示,光标不显示,光标不闪烁 WrCommand(0x01); /清屏/指定行清屏子程序void ClrLine(uchar line ) unsigned char i=0; WrCommand(0x80+line); /指向擦除行的首字

12、符位 for(;i16;i+) WrData( );void Write1Line(uchar line,uchar* buf) uchar addr=0,i; if(line=0) addr=0x80; else addr=0xc0; WrCommand(addr); for(i=0;i16;i+) WrData(*buf+);void WrData2Addr(uchar addr,uchar dat) WrCommand(addr); WrData(dat);void disall() Dispbuf03=Num2Ascyear/10; Dispbuf04=Num2Ascyear%10;

13、Dispbuf06=Num2Ascmonth/10; Dispbuf07=Num2Ascmonth%10; Dispbuf09=Num2Ascdate/10; Dispbuf010=Num2Ascdate%10; Dispbuf012=WEEKday*3; Dispbuf013=WEEKday*3+1; Dispbuf014=WEEKday*3+2; Dispbuf11=Num2Aschour/10; Dispbuf12=Num2Aschour%10; Dispbuf14=Num2Ascminu/10; Dispbuf15=Num2Ascminu%10; Dispbuf17=Num2Ascse

14、c/10; Dispbuf18=Num2Ascsec%10; Write1Line(0,&Dispbuf00); Write1Line(1,&Dispbuf10);void offall() switch(s1num) case 1: Dispbuf17= ; Dispbuf18= ; break; case 2: Dispbuf14= ; Dispbuf15= ; break; case 3: Dispbuf11= ; Dispbuf12= ; break; case 4: Dispbuf012= ; Dispbuf013= ; Dispbuf014= ; break; case 5: Di

15、spbuf09= ; Dispbuf010= ; break; case 6: Dispbuf06= ; Dispbuf07= ; break; case 7: Dispbuf03= ; Dispbuf04= ; break; default : *Dispbuf0 = ; *Dispbuf1 = ; Write1Line(0,&Dispbuf00); Write1Line(1,&Dispbuf10);六、心得与总结经过万年历的设计,让我学到了很多,让我认识到了学习基础知识的重要性,当设计完整的系统时,要考虑到硬件和软件两者的结合,有时硬件的不足,我们可以用软件程序来弥补,从而节约硬件成本,在

16、设计软件程序时要模块化,可以提高程序的可读性。有一些灵活的技巧就需要我们认真的阅读元件的数据手册,从中索取对自己有用的信息。在这短暂的一个星期课程序设计中,收获知识的同时,还收获了阅历,收获了成熟,通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手制作的能力,在各种其它能力上也都有了提高。更重要的是,在课程序设计里,我们学会了很多学习的方法,知道了理论和实践的巨大差别。而这是以后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。同时在与老师和同学的交流过程中,互动学习,将知识融会贯通。通过自己的努力,做出了一个万年历,对以后的学习是一个莫大的鼓舞,激起了我的学习兴趣和开发创新思维。

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

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