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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

完美升级版温度显示的数字时钟设计毕业论文报告Word文件下载.docx

1、由于将多功能8位CPU和闪烁存储器组合在单个芯片中。单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,相较于方案一为更优方案。故选择此方案。2.1.2 时钟模块选择由单片机实现时钟功能。单片机内部具有定时器,可方便实现定时功能。通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以此类推,从而实现时、分、秒的走时,并加以显示。但由于系统晶振误差、温漂、中断响应时间的不确定性及定时器重新装载时间常数所带来的误差,决定它不能用来作为时钟的时间基准。采用此

2、种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。采用DS1302时钟芯片。该芯片内含一个实时时钟日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AMPM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根IO线:复位(RST)、IO数据线、串行时钟(SCLK)。采用DS1302可以提高计时精度,更重要的就是DS1302可以在很小的后备电源下继续计时,并可编程选择充电电流来对后备电源进行充电,可

3、以保证后备电源基本不耗电。比较两种方案,用软件实现时钟固然可以,但是程序运行需占用大量的CPU资源,会影响记时的准确度。而用专用时钟芯片可以实现准确记时。故采用专用时钟芯片DS1302来实现时钟功能,即选择方案二。2.1.3测温模块选择:可以采用热敏电阻来实现温度的测量,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差。且由于传统的热敏电阻等测温元件测出的一般都是电压,再转换成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。对于检测到的温度的精确度不能够得到保证。故不作选择。采用数字温度传感器DS18B20。它能直接读出被测温度,并且可根据实际要

4、求通过简单的编程实现912位的数字值读数方式。DS18B20测量温度,输出信号全数字化,便于单片机处理及控制,单总线的数据传输,省去传统的测温方法的很多外围电路,系统的结构可以做得较为紧凑。故采用数字温度传感器DS18B20,即方案二。2.1.4显示模块选择:使用多个数码管LED显示。LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点。但是由于它工作电流较大、不能显示汉字,显示的信息量有限,若在此题目中应用就会受到很大的限制。将导致硬件电路复杂化,也会占用较多的线路板面积,也会给软件设计实现上带来困难,并且整个电路的功耗也会较大。采用液晶显示器LCD

5、1602作为显示输出。该芯片可显示162个字符,可显示字符较多。另外,l602芯片编程和电路设计比较简单,1602液晶显示器有微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点。系统采用方案二,设计选用1062液晶板。2.1.5键盘接口模块:DS1302必须设定初始时间才能正常工作,顾本系统必须有初始时间输入电路。可以考虑通过PC机通过串口通讯将初始时间数据送入单片机内部,但这给时间的调整带来一定不便,不能随时随地的调整时间。采用独立按键,按键均采用低电平有效连接方式。用来用作调节时钟以及闹铃。几个按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。键盘接口

6、是单片机应用系统中最常用的接口之一,键盘的类型很多,常用的有独立式键盘和矩阵式键盘。采用独立式按键电路,每个键单独占有一根IO接口线,每个IO口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的IO数目较多。采用阵列式键盘。此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的IO口数目。因为本设计需要的键盘比较少,所以采用独立式的应用中,当然需要解决键盘消抖的问题,一般使用的是软件消抖的方法。由于本系统所使用的按键不多(4个按键足以满足设置要求)因此采用1*4键盘,采用独立式按键电路。2.2系统总体方案论证:综上所述,该系统用主芯片为AT89C51的单片机控

7、制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用独立式按键进行时间的调整和定时,温度传感器使用DS18B20。显示时间和温度使用LCD1602显示。当单片机上电,单片机就初始化。单片机接收并处理来自DS18B20传过来的数据在液晶上显示当时的室内温度,液晶还显示当前的时间,日期。当需要设置闹钟或调整时间时,又检测按键是否按下,以便对时间进行修正、设置闹钟时间,最后进入循环。如下图:系统设计结构图三、单元电路分析与设计3.1时钟电路系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。51单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTA

8、L2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。3.2复位电路复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通常采用上电自动复位和按键手动复位两种方式,此电路系统采用的是按键手动复位电路,高电平时复位。3.3 DS1302时钟电路DS1302内含一个实时时钟日历和31字节静态RAM,可以通过串行接口与单片机进行通信。3.4 DS18B20温度计电路DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PPRAM,后者存放高

9、温度和低温度触发器TH、T和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算.DS18B20它具有3引脚TO92小体积封装形式,温度测量范围为55125,可编程为9位12位AD转换精度,测温分辨率可达0.0625,被测温度用符号扩展的16位数字量方式串行输出,其工作电源既可在远端引入,也可采用寄生电源方式产生,多个DS18B20可以并联到3根或2根线上,CPU只需一

10、根端口线就能与多个DS18B20通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。以上特点使DS18B20非常适用于远距离多点温度检测系统。DS18B20测温原理在正常测温情况下,DS1820的测温分辨力为0.5,可采用下述方法获得高分辨率的温度测量结果:首先用DS1820提供的读暂存器指令(BEH)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(LSB),得到所测实际温度的整数部分Tz,然后再用BEH指令取计数器1的计数剩余值Cs和每度计数值CD。考虑到DS1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度Ts可用下式计算:Ts=(Tz-0.

11、25)+(CD-Cs)CD3.5按键电路独立按键用来用作调节时钟以及闹铃。按键均采用低电平有效连接方式。按键有6个,分别实现为时间调整键、时间增加,时间减少、时间确认按键、复位键、闹铃时间设置键。3.6显示电路LCD1602液晶显示器属于工业字符型液晶,能够同时显示16x02即32个字符(2行16列)。LCD1602液晶模块内部的字符发生内存(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。LCD1602与单片机之间通过3根控制线和8

12、位并行数据IO线实现交互,电路下图所示。总原理图 仿真图 PCB图 实物图四、软件部分设计系统运行流程图 主函数流程图18B20温度计流程图程序设计(节选):#include intrins., = P22; 减法按钮sbit out = P23; 立刻跳出调整模式按钮sbit DQ = P10; 温度传送数据IO口sbit dd=P37;char done,count,temp,flag,up_flag,down_flag,key;uchar temp_value; 温度值void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;yy-);void

13、 music()uint i,j,k=0,m;for(m=0;m26;m+)for(i=0;ilonk*20;i+)beep=beep;for(j=0;j i-)DS1302_IO = ACC0; 相当于汇编中的 RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC 1;unsigned char DS1302OutputByte(void) 实时时钟读取一字节(内部函数)1; 相当于汇编中的 RRCACC7 = DS1302_IO;return(ACC);void Write1302(unsigned char ucAddr, unsigned char uc

14、Da) ucAddr: DS1302地址, ucData: 要写的数据DS1302_RST = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); 地址,命令DS1302InputByte(ucDa); 写1Byte数据unsigned char Read1302(unsigned char ucAddr) 读取DS1302某地址的数据unsigned char ucData;DS1302InputByte(ucAddr|0x01); 地址,命令ucData = DS1302OutputByte(); 读1Byte数据return(ucData);void DS

15、1302_GetTime(SYSTEMTIME *Time) 获取时钟芯片的时钟数据到自定义的结构型数组unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time-Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MINUTE);Minute = (ReadValue&ReadValue = Read1302(DS1302_HOUR);Hour = (ReadValue&ReadValue = Read1302(DS13

16、02_DAY);Day = (ReadValue&ReadValue = Read1302(DS1302_WEEK);Week = (ReadValue&ReadValue = Read1302(DS1302_MONTH);Month = (ReadValue&ReadValue = Read1302(DS1302_YEAR);Year = (ReadValue&void DateToStr(SYSTEMTIME *Time) 将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString if(Minute10 + 0;TimeString4 = Time-Minute%10

17、 + elseTimeString3 = TimeString4 = TimeString5 = :if(dat);*ds18b20写一个字节*void WriteOneChar(uchar dat)unsigned char i=0;for (i=8;DQ = 0;DQ = dat&0x01;delay_18B20(5);DQ = 1;dat=1;*读取ds18b20当前温度*void ReadTemp(void)unsigned char a=0;unsigned char b=0;unsigned char t=0;Init_DS18B20();WriteOneChar(0xCC); 跳

18、过读序号列号的操作WriteOneChar(0x44); 启动温度转换delay_18B20(100); this message is wery importantWriteOneChar(0xBE); 读取温度寄存器等(共可读9个寄存器) 前两个就是温度a=ReadOneChar(); 读取温度值低位b=ReadOneChar(); 读取温度值高位temp_value=bvoid temp_to_str() 温度数据转换成液晶字符显示TempBuffer0=temp_value10+ 十位TempBuffer1=temp_value%10+ 个位TempBuffer2=0xdf; 温度符号

19、TempBuffer3=CTempBuffer4=0void naoz() if(=0,=0,=1;if(Down=0|wireless_3=1)mdelay(8);switch(count)case 1:temp=Read1302(DS1302_SECOND); 读取秒数temp=temp-1; 秒数减1down_flag=1; 数据调整后更新标志if(temp=0x7f) 小于0秒,返回59秒temp=0x59;break;case 2:temp=Read1302(DS1302_MINUTE); 读取分数 分数减1if(temp=-1) 小于0秒,返回59秒case 3:temp=Read

20、1302(DS1302_HOUR); 读取小时数 小时数减1temp=0x23;case 4:temp=Read1302(DS1302_WEEK); 读取星期数 星期数减1if(temp=0)temp=0x7;case 5:temp=Read1302(DS1302_DAY); 读取日数 日数减1temp=31;case 6:temp=Read1302(DS1302_MONTH); 读取月数 月数减1temp=12;case 7:temp=Read1302(DS1302_YEAR); 读取年数 年数减1temp=0x85;default:while(Down=0);while(wireless_

21、3=1);void Downkey1()降序按键Down=1; mdelay(8); kaiguan=1; naotime(); count=count+1; Setkey按一次,count就加1 key=1; 进入调整模式 while(dd=0); void keydone()按键功能执行 uchar Second;if(flag=0) 关闭时钟,停止计时 Write1302(0x8e,0x00); 写入允许temp=Read1302(0x80);Write1302(0x80,temp|0x80);Write1302(0x8e,0x80); 禁止写入flag=1;Setkey(); 扫描模式切换按键do count=1,调整秒outkey(); 扫描跳出按钮Upkey(); 扫描加按钮Downkey(); 扫描减按钮if(up_flag=1|down_flag=1) 数据更新,重新写入新的数据Write1302(0x8e,0x00); 写入新的秒数up_flag=0;down_flag=0;

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

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