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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

温度显示的数字时钟设计课程设计报告.docx

1、温度显示的数字时钟设计课程设计报告温度显示的数字时钟设计课程设计报告 “电子系统设计”课程设计报告设计课题: 电子系统课程设计 专业班级: 11级电本1班 姓 名: 学 号: 2011041513 设计时间: 评阅意见物理与机电工程学院多功能数字时钟一、设计任务与要求设计任务:本项目拟设计基于单片机的数字时钟和数字温度计,并将时间和温度显示在液晶显示器上。根据主要功能要求,该设计利用51单片机实现了电子时钟、温度的显示以及设置闹铃等功能。主要功能要求:1.以24h计数方式。2.时钟要求可以显示时间:年、月、日、时、分、秒。3.可调整显示日期、时间,具有整点报时功能,具有闹铃设置功能。4.显示当

2、前屋内温度,温度显示稳定。二、系统设计方案2.1 设计与论证按照系统的设计功能要求,本时钟温度系统的设计必须采用单片机软件系统实现,用单片机的自动控制能力配合按键控制,来控制时钟、温度的存储和查询及显示。按照系统的设计功能要求,初步确定系统由主控单元、时钟模块、测温模块、显示模块、键盘接口模块共五个模块组成。2.1.1 主控模块选择方案一:纯硬件电路系统,各功能采用分离的硬件电路模块实现。用时序逻辑电路实现时钟功能,用555定时器实现闹钟的设定。但这种实现方法可靠性差、控制精度低,灵活性小、线路复杂、安装调试不方便,而且不方便实现对系统的扩展。方案二:AT89C51是一种带4K字节闪烁可编程可

3、擦除只读存储器的低电压,高性能CMOS8位微处理器。AT89C51是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。由于将多功能8位CPU和闪烁存储器组合在单个芯片中。单片机AT89S51具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要。AT89C51单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案,相较于方案一为更优方案。故选择此方案。2.1.2 时钟模块选择方案一:由单片机实现时钟功能。单片机内部具有定时器,可方便实现定时功能。通过计算可知,使定时器每25ms产生一次中断,当产生40次中断后秒单元将加一,以

4、此类推,从而实现时、分、秒的走时,并加以显示。但由于系统晶振误差、温漂、中断响应时间的不确定性及定时器重新装载时间常数所带来的误差,决定它不能用来作为时钟的时间基准。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大。所以不采用此方案。方案二:采用DS1302时钟芯片。该芯片内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O

5、线:复位(RST)、I/O数据线、串行时钟(SCLK)。采用DS1302可以提高计时精度,更重要的就是DS1302可以在很小的后备电源下继续计时,并可编程选择充电电流来对后备电源进行充电,可以保证后备电源基本不耗电。比较两种方案,用软件实现时钟固然可以,但是程序运行需占用大量的CPU资源,会影响记时的准确度。而用专用时钟芯片可以实现准确记时。故采用专用时钟芯片DS1302来实现时钟功能,即选择方案二。2.1.3测温模块选择:方案一:可以采用热敏电阻来实现温度的测量,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差。且由于传统的热敏电阻等测温元件测出的一般都是电压,再转换

6、成对应的温度,需要比较多的外部元件支持,且硬件电路复杂,制作成本相对较高。对于检测到的温度的精确度不能够得到保证。故不作选择。方案二:采用数字温度传感器DS18B20。它能直接读出被测温度,并且可根据实际要求通过简单的编程实现912位的数字值读数方式。DS18B20测量温度,输出信号全数字化,便于单片机处理及控制,单总线的数据传输,省去传统的测温方法的很多外围电路,系统的结构可以做得较为紧凑。故采用数字温度传感器DS18B20,即方案二。2.1.4显示模块选择:方案一:使用多个数码管LED显示。LED数码管是利用二极管发光显示数字和字母,具有亮度大、接口设计比较容易,价格相对较便宜等优点。但是

7、由于它工作电流较大、不能显示汉字,显示的信息量有限,若在此题目中应用就会受到很大的限制。将导致硬件电路复杂化,也会占用较多的线路板面积,也会给软件设计实现上带来困难,并且整个电路的功耗也会较大。方案二:采用液晶显示器LCD1602作为显示输出。该芯片可显示162个字符,可显示字符较多。另外,l602芯片编程和电路设计比较简单,1602液晶显示器有微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点。系统采用方案二,设计选用1062液晶板。2.1.5键盘接口模块:方案一:DS1302必须设定初始时间才能正常工作,顾本系统必须有初始时间输入电路。可以考虑通过PC机通过串口通讯将初始时间数据送入单片机内

8、部,但这给时间的调整带来一定不便,不能随时随地的调整时间。方案二:采用独立按键,按键均采用低电平有效连接方式。用来用作调节时钟以及闹铃。几个按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。键盘接口是单片机应用系统中最常用的接口之一,键盘的类型很多,常用的有独立式键盘和矩阵式键盘。采用独立式按键电路,每个键单独占有一根I/O接口线,每个I/O口的工作状态互不影响,此类键盘采用端口直接扫描方式。但是当按键较多时占用单片机的I/O数目较多。采用阵列式键盘。此类键盘是采用行列扫描方式,当按键较多时可以降低占用单片机的I/O口数目。因为本设计需要的键盘比较少,所

9、以采用独立式的应用中,当然需要解决键盘消抖的问题,一般使用的是软件消抖的方法。由于本系统所使用的按键不多(4个按键足以满足设置要求)因此采用1*4键盘,采用独立式按键电路。2.2系统总体方案论证:综上所述,该系统用主芯片为AT89C51的单片机控制实现,为了满足单片机系统的实时控制的需求,采用实时钟芯片DS1302,使用独立式按键进行时间的调整和定时,温度传感器使用DS18B20。显示时间和温度使用LCD1602显示。当单片机上电,单片机就初始化。单片机接收并处理来自DS18B20传过来的数据在液晶上显示当时的室内温度,液晶还显示当前的时间,日期。当需要设置闹钟或调整时间时,又检测按键是否按下

10、,以便对时间进行修正、设置闹钟时间,最后进入循环。如下图:系统设计结构图三、单元电路分析与设计3.1时钟电路系统的时钟电路设计是采用的内部方式,即利用芯片内部的振荡电路。51单片机内部有一个用于构成振荡器的高增益反相放大器。引脚XTAL1和XTAL2分别是此放大器的输入端和输出端。这个放大器与作为反馈元件的片外晶体谐振器一起构成一个自激振荡器。外接晶体谐振器以及电容C1和C2构成并联谐振电路,接在放大器的反馈回路中。3.2复位电路复位是由外部的复位电路来实现的。片内复位电路是复位引脚RST通常采用上电自动复位和按键手动复位两种方式,此电路系统采用的是按键手动复位电路,高电平时复位。3.3 DS

11、1302时钟电路DS1302内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。3.4 DS18B20温度计电路DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2PPRAM,后者存放高温度和低温度触发器TH、T和结构寄存器。暂存存储器包含了8个连续字

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

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

14、钟以及闹铃。按键均采用低电平有效连接方式。几个按键可以对时钟进行设置调节,并调节设置闹铃,当时间与设置的时间一致是闹铃报警,即蜂鸣器响。按键有6个,分别实现为时间调整键、时间增加,时间减少、时间确认按键、复位键、闹铃时间设置键。3.6显示电路LCD1602液晶显示器属于工业字符型液晶,能够同时显示16x02即32个字符(2行16列)。LCD1602液晶模块内部的字符发生内存(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把

15、地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。LCD1602与单片机之间通过3根控制线和8位并行数据IO线实现交互,电路下图所示。总原理图 仿真图 PCB图 实物图四、软件部分设计系统运行流程图 主函数流程图18B20温度计流程图程序设计(节选):#include #include /#include LCD1602.h/#include DS1302.h#define uint unsigned int#define uchar unsigned charsbit DS1302_CLK = P17; /实时时钟时钟线引脚sbit DS1302_IO = P16; /实时时钟数据

16、线引脚sbit DS1302_RST = P15; /实时时钟复位线引脚sbit wireless_1 = P30;sbit wireless_2 = P31;sbit wireless_3 = P32;sbit wireless_4 = P33;sbit beep=P34;sbit ACC0 = ACC0;sbit ACC7 = ACC7;char hide_sec,hide_min,hide_hour,hide_day,hide_week,hide_month,hide_year,hide_m,hide_f,hide_h;sbit Set = P20; /模式切换键sbit Up = P2

17、1; /加法按钮sbit Down = P22; /减法按钮sbit out = P23; /立刻跳出调整模式按钮sbit DQ = P10; /温度传送数据IO口sbit dd=P37;char done,count,temp,flag,up_flag,down_flag,key;uchar temp_value; /温度值uchar m,f,h,mo,d,y,w,kaiguan,h=12,f=30;uchar TempBuffer5,week_value2,nao8;void naotime();uchar code tone=212,212,190,212,159,169,212,212

18、,190,212,142,159,212,212,106,126,159,169,190,119,119,126,159,142,159,0;uchar code lon=9,3,12,12,12,24,9,3,12,12,12,24,9,3,12,12,12,12,12,9,3,12,12,12,24,0;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void music()uint i,j,k=0,m;for(m=0;m26;m+)for(i=0;ilonk*20;i+)beep=beep;for(j=0;j0; i-)

19、DS1302_IO = ACC0; /相当于汇编中的 RRCDS1302_CLK = 1;DS1302_CLK = 0;ACC = ACC 1;unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数)unsigned char i;for(i=8; i0; i-)ACC = ACC 1; /相当于汇编中的 RRCACC7 = DS1302_IO;DS1302_CLK = 1;DS1302_CLK = 0;return(ACC);void Write1302(unsigned char ucAddr, unsigned char ucDa) /u

20、cAddr: DS1302地址, ucData: 要写的数据DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS1302InputByte(ucAddr); / 地址,命令DS1302InputByte(ucDa); / 写1Byte数据DS1302_CLK = 1;DS1302_RST = 0;unsigned char Read1302(unsigned char ucAddr) /读取DS1302某地址的数据unsigned char ucData;DS1302_RST = 0;DS1302_CLK = 0;DS1302_RST = 1;DS13

21、02InputByte(ucAddr|0x01); / 地址,命令ucData = DS1302OutputByte(); / 读1Byte数据DS1302_CLK = 1;DS1302_RST = 0;return(ucData);void DS1302_GetTime(SYSTEMTIME *Time) /获取时钟芯片的时钟数据到自定义的结构型数组unsigned char ReadValue;ReadValue = Read1302(DS1302_SECOND);Time-Second = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValu

22、e = Read1302(DS1302_MINUTE);Time-Minute = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_HOUR);Time-Hour = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_DAY);Time-Day = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_WEEK);Time-Week =

23、 (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_MONTH);Time-Month = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);ReadValue = Read1302(DS1302_YEAR);Time-Year = (ReadValue&0x70)4)*10 + (ReadValue&0x0F);void DateToStr(SYSTEMTIME *Time) /将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DateString if(hide_

24、year2) /这里的if,else语句都是判断位闪烁,2就不显示,输出字符串为 2007/07/22Time-DateString0 = 2;Time-DateString1 = 0;Time-DateString2 = Time-Year/10 + 0;Time-DateString3 = Time-Year%10 + 0;elseTime-DateString0 = ;Time-DateString1 = ;Time-DateString2 = ;Time-DateString3 = ;Time-DateString4 = /;if(hide_monthDateString5 = Tim

25、e-Month/10 + 0;Time-DateString6 = Time-Month%10 + 0;elseTime-DateString5 = ;Time-DateString6 = ;Time-DateString7 = /;if(hide_dayDateString8 = Time-Day/10 + 0;Time-DateString9 = Time-Day%10 + 0;Time-DateString10 = ;Time-DateString11 = ;elseTime-DateString8 = ;Time-DateString9 = ;Time-DateString10 = ;

26、Time-DateString11 = ;if(hide_weekWeek%10 + 0; /星期的数据另外放到 week_value数组里,跟年,月,日的分开存放,因为等一下要在最后显示elseweek_value0 = ;week_value1 = 0;Time-DateString10 = 0; /字符串末尾加 0 ,判断结束字符void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString;if(hide_hourTimeString0 = Time-Hour/10 + 0;Time-TimeString1 = Ti

27、me-Hour%10 + 0;elseTime-TimeString0 = ;Time-TimeString1 = ;Time-TimeString2 = :;if(hide_minTimeString3 = Time-Minute/10 + 0;Time-TimeString4 = Time-Minute%10 + 0;elseTime-TimeString3 = ;Time-TimeString4 = ;Time-TimeString5 = :;if(hide_secTimeString6 = Time-Second/10 + 0;Time-TimeString7 = Time-Second%10 + 0;Time-

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

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