毕业设计(论文)-家用多功能数字仪表设计.docx_第1页
毕业设计(论文)-家用多功能数字仪表设计.docx_第2页
毕业设计(论文)-家用多功能数字仪表设计.docx_第3页
毕业设计(论文)-家用多功能数字仪表设计.docx_第4页
毕业设计(论文)-家用多功能数字仪表设计.docx_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

太原科技大学毕业设计(论文)任务书学院(直属系):电子信息工程学院 学 生 姓 名指 导 教 师设计(论文)题目家用多功能数字仪表主要研究内容掌握单片机控制系统的设计方法,掌握单片机的编程方法,利用单片机实现家用多功能数字仪表的设计。研究方法理论设计 主要技术指标(或研究目标)1, 根据控制系统功能需求分析,给出设计方案,完成控制系统硬件设计,绘制电气原理图;2, 在硬件设计基础上完成软件开发;3, 通过实验验证所设计的控制系统是否实现了预期的设计要求。 教研室意见教研室主任(专业负责人)签字: 年 月 日 说明:一式两份,一份装订入学生毕业设计(论文)内,一份交学院(直属系)目录摘 要IABSTRACTII引言1第一章 功能需求分析与设计方案31.1功能需求分析31.1.1硬件功能需求分析31.1.2软件功能需求分析41.2单片机控制方案设计41.3 液晶屏方案设计41.4 时钟芯片方案设计51.5 温度传感器方案设计51.6 按键方案设计51.7 PM2.5检测方案设计61.8 本章小结6第二章 系统硬件设计72.1 硬件系统设计及组成72.2 主控电路的设计72.3 时钟电路的设计72.4 温度电路的设计82.5 按键电路的设计82.6 显示电路的设计92.7 PM2.5检测电路的设计92.8 本章小结10第三章 系统软件设计113.1 软件的总体设计113.2 软件主程序设计113.3 按键扫描程序123.4 显示程序设计133.5 温度读取程序设计143.6 时间读取程序设计163.7 农历转换函数183.8 检测PM2.5程序设计193.9 本章小结20第四章 系统仿真模拟仿真与结果分析214.1. 系统软件检测214.2. 功能仿真224.3 本章小结22第六章 结论23致谢24参考文献25附录26附录A 总体电路图26附录B部分源程序27III太原科技大学毕业设计摘 要本文完成了家用多功能数字仪表的设计。系统选用AT89C51作为主控制器,同时结合键盘模块、显示模块、时钟模块、温度采集模块、PM2.5检测模块等完成硬件电路的设计。本设计在万年历的基础上加上了PM2.5检测,利用C语言完成家用多功能数字仪表的软件设计。最后对系统进行仿真,系统能正确显示时间与温度,PM2.5的检测,达到了预期控制目标。关键词:AT89C51,多功能数字仪表ABSTRACTThe design of home multi-function digital instrument is completed in this paper. AT89C51was used as the main controller, combined with the keyboard module, display module, clock module, temperature acquisition module, PM2.5 detection module to complete the hardware circuit design. The design is based on the calendar with PM2.5 detection, the use of C language to complete the home multi-function digital instrument software design. Finally, the system simulation, the system can correctly display the time and temperature, PM2.5 detection, to achieve the desired control objectives.Keywords: AT89C51,Multi-function digital instrumentationII30引言时间是一个更古不变的话题,无论是国家的发展,社会的繁荣,科技的进步,还是个人的成长,这些都是以时间为轴的一部史书,轴上的每一点都记录着过去发生的点点滴滴,从中华上下五千年,朝代的更替,社会的进步,都记录在长长的历史中,没有时间的概念,哪来这些辉煌的历史。时间的记录从古至今都非常重要,古代有沙漏计时,到近代的机械表,现在随处可见的电子表、石英钟等,这些充分体现了时间在人类生活中的重要性,所以本课题研究的电子万年历有着很重要的意义。 随着电子产品应用的普及,到处都能够获取到很多的信息,所以电子技术将人类带向了一个信息化的时代。科技的发展速度如此之快,就像人类与时间在赛跑一样,在当今社会如此高效率、快节奏的生活,时间对于每个人来说总是那么宝贵,上班要准时、上课不能迟到、工程要按时完成等等,在工业生产中,有关时序的工作流程更是对时间要求严格,所以说合理利用时间,在生活中尤为重要。在人们周围充满着时间的信息,手表、手机、电视、广告牌等,很多地方都会显示时间的信息,随着科技的发展,手表的发展也变得多种多样,电子时钟以它功能多、性能强、造价低、多样化而深受人们的喜爱。电子时钟可以设置闹铃,时间提醒,有些带有语音功能,非常方便。在这些基础上,我再加入了检测空气质量和甲醛浓度的功能,让我设计的万年历更加实用。电子万年历的多功能,使它得到了广泛的应用,无论在家庭、车站、码头、办公室甚至小区门口都随处可见,在室内的万年历更是因为具有优美的外形、时尚的设计,深受人们的喜爱,电子万年历已经成为了人们生活中的必需品。所以研究这个可以有很积极的意义,让我们的生活更加美好。当前,数字万年历在我们生活中随处可见,早已经悄悄的进入了千千万万的家庭中,不管是在国内还是在国外,都深受人们的喜爱。现在,数字万年历不仅仅是一个计时的工具,而且具备了很多其他功能,例如温度、定时、自动报警、日期查阅等等,除了多功能的特点外,另一个为人们喜欢和接受的特点是它具有精美的外观,每一种样式都是经过特别精心的设计,有高山流水样式、深海游鱼样式、花鸟树木样式等等,所以电子万年历在未来将会具有越来越多的功能,并且在人们家居环境中越来越会受到欢迎,电子万年历未来发展之路是不容忽视的。随着科技不断地进步,万年历的应用也在渐渐变的完美、实用,数字电子万年历正朝着更微型、更高效以及更实用的方向发展。在我们平时经常去的商场里,到处可以看到万年历,他们有着各种各样的款式,其中很多是通过单片机技术来实现的。现在的数字万年历都拥有个体小、耗电少、精确计时、功能强大、修理简单、容易携带等特点。另外,现在市场上都能够买到,功能强大,价格也不贵。 近几年来,数字万年历一直追求着高精度、高性能、低功耗、多功能、低成本等优点,在特殊场合的特殊应用也要考虑到一些其他特点,例如外形优美、使用方便、体积灵活、适应环境等。现在,最新的数字万年历,除了具有显示时间日期的用途外,还具有环境温度检测、报时、闹钟、定时等多种用途。除此之外还具有多样的款式和广大的实用性。第一章 功能需求分析与设计方案1.1功能需求分析设计一个多功能电子万年历,显示界面通过显示器进行显示,具体设计要求:显示年月日、星期、时分秒、阴历。在现有的万年历的功能的基础上,本设计还需完成如下功能:1 显示时间日期,并带有闹钟功能。(基础功能)2 可以检测环境温度,3 可以检测环境中的PM2.5系数。1.1.1硬件功能需求分析按照设计的需求,第一步是选择我的万年历的主要功能,它的主要功能是:时间显示、温度显示、PM2.5显示、闹钟功能等,并可以自行设置时间和闹钟。功能确定后便进行系统框图的制定,以及硬件系统的设计,硬件系统大体可包括主控电路、显示电路、时钟电路、温度检测电路、按键电路、PM2.5检测电路。所以根据设计要求确定系统结构框图如图1-1所示。1 显示电路:用来显示时间、温度、PM2.5等信息的显示;2 时钟电路:用来提供时钟信号;3 温度检测电路:用来检测温度;4 按键电路:用来设置闹钟、时间等。图1-1 系统结构框图1.1.2软件功能需求分析结合硬件功能,本系统需要实现按键输入、温度检测、液晶显示、PM2.5检测。所以本次设计需要编写键盘扫描程序、温度检测程序、液晶显示程序、PM2.5检测程序。要实现以上软件功能,需要用到Protues软件进行仿真、Keil软件进行程序编写和Office Visio软件流程图和系统框图的绘制。1.2单片机控制方案设计方案一 单片机的种类多种多样,常见的单片机有AVR系列、51系列、MSP430等。AVR单片机的显著特点是高性能、高速度、低功耗,并且应用非常普遍;MSP430单片机功耗低且速度快,缺点是占的指令空间大且没有串口。方案二 AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k BytesISP的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。方案三 AT89C51是美国ATMEL公司生产的一种高性能、低功耗的8位CMOS单片微型计算机芯片。可靠性高、实时性好、速度快、系统掉电后重要数据和状态信息不会丢失 , 其性能价格比远高于同类芯片。综上所述,我选择了AT89C51单片机来做为我的控制芯片。1.3 液晶屏方案设计本次设计主要是通过液晶显示屏显示必要信息,包括时间、温度、节日信息等,所以液晶选择一定要能满足设计要求的,性能稳定可靠的液晶显示屏。方案1:数码管显示。数码管应用十分广泛,它的主要优点是显示效果好、携带方便、价格低,但是它不能显示汉字。不适合本次设计的要求。 方案2:点阵式液晶。液晶显示可以显示字符、汉字等,它的主要优点寿命长、重量小,可以显示内容比较多,满足本次设计的要求。常见的液晶显示屏有1602液晶和12864液晶,1602只能显示字符、数字且信息显示量相对较小,12864液晶不仅可以显示字符,还可以显示汉字、图形,显示内容更加丰富,并有较大的信息显示量。综上所述,考虑本次设计需要显示信息量比较大,且显示内容既有汉字又有字符等,所以本次显示采用点阵式128*64液晶屏。1.4 时钟芯片方案设计万年历系统的设计,时钟功能当然是重中之重,是系统的核心部件之一,其精度要求十分严格,所以时钟功能的实现该如何选择,应全面仔细的分析考虑。 方案1:由单片机实现时钟功能。单片机内部具有多个定时器,通常时间延时函数等都是通过定时器功能实现,十分方便。但由于系统最终计时的误差偏大,决定它不能用来作为时钟的时间基准。 方案2:DS1302时钟芯片,它内部都有时间、日期功效,效果好、能省电。时钟芯片内都集成了时钟、日历功能,高性能、低功耗,且具有闰年补偿等优点,外围电路非常简单并具有掉电保护功能,给时钟系统设计带来很多方便。综上所述,万年历系统设计对时间准确的要求非常高,所以应该选择适合的时钟芯片。考虑到价格及市场多种因素,所以本次设计采用的是DS1302时钟芯片。1.5 温度传感器方案设计方案1:采用选择热敏电阻进行温度信号的采集。传统的温度检测大多以热敏电阻为传感器,采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻可靠性差,测量温度准确率低,对于1摄氏度的信号是不适用的,还得经过专门的接口电路转换成数字信号才能由微处理器进行处理。方案2:选择DS18B20。它可以把检测到的温度信号直接转换成数字信号,并且方便进行多点温度采集,价格相对低廉,功耗也非常低,有很好的温度分辨率,并且仅有一根总线传输,直接与单片机端口连接,电路非常简单,主要通过编程来计算温度。 DS18B20最大温度分辨率高达0.0625,并且测温范围相对较宽,可达-55到125。综上所述,DS18B20芯片其各方面均更适合设计要求。 1.6 按键方案设计方案1:独立式按键。每个按键单独与单片机的I/O接口连接。每个端口不会打扰其他的端口,不足的是占用的端口比较多。方案2:行列式键盘。行列式键盘工作原理是单片机内部对I/O接口进行行列扫描来确定哪一个键被按下,当按键较多时可以降低占用单片机的I/O口数目。可以提高单片机端口的利用率 。本次设计只采用4个按键,所以采用方案1。1.7 PM2.5检测方案设计方案一 夏普GP2Y1010AU是设计用来检测大气中的灰尘,在传感器里面装有红外线发光二极管和光电晶体管,可以侦查出细小的灰尘。这个传感器只需很小的电流。它的特点是尺寸小,单脉冲即可检测出颗粒浓度,安全无害。非常适合家庭空气质量检测。所以我选用GP2Y1010AU0F作为PM2.5传感器这一方案。1.8 本章小结本章重点对本次设计中所涉及到的器件进行选择,大概的介绍了每个器件的优缺点,来选择对应的芯片。本着性能稳定、符合设计要求等原则进行选择,其中电源模块采用USB供电,下章将会对硬件进行详细地设计。42第二章 系统硬件设计2.1 硬件系统设计及组成根据设计的要求,以及总体方案的设计,确定系统的工作模块:电源模块、主控模块、时钟模块、温度模块、按键模块、液晶屏模块和扬声器模块、PM2.5检测模块。基本工作原理:时钟芯片将时间信息送到单片机进行处理,传感器收集温度信息传送给单片机处理,PM2.5传感器采集粉尘浓度信息需经A/D转换将信息传送给单片机处理。单片机把处理好的信息通过液晶屏显示,并可以通过按键控制单片机进行更改时间、设置闹钟。总体电路图见附录1。2.2 主控电路的设计AT89C51单片机作为本系统的控制芯片,除最小系统和复位电路外,其他的外围电路连接,在附录1总体电路图中可以体现出来。其中,按端口顺序可以看出,P0口与蜂鸣器发声电路连接,时钟芯片DS1302的控制端SCLK、I/O、CE与单片机P21、P22、P23连接,四个按键接在单片机的P24-P27端口,P20口接DS18B20数字温度传感器上,A/D数模转换接P21、P22。LCD1602的RS口接P30,RW口接P31,EN端接P32,D0D7为8位双向数据端接P10-P17。单片机的这些端口可以接收、处理和发送信息。2.3 时钟电路的设计时钟模块电路是由时钟芯片DS1302与一个32.768KHz的晶振所组成。采取串行连接方式,具体的时间采集电路如图2-1所示。图2-1 时钟模块设计电路图如图3-2所示,DS1302有两个电源VCC1和VCC2,一个是主电源另一个是后备电源。DS1302由VCC1或VCC2中较大者供电,本次设计中 VCC2提供主电源, VCC1 连接到备份电源,备份电源的作用是在没有主电源的情况下能保证时钟芯片内部正常计时5。VCC2主电源由系统总电路的电源提供,大于VCC1的电压,因此,系统正常供电时VCC2为时钟芯片供电,断电后由VCC1供电,所以此时钟电路具有掉电保护的功能,主电源恢复后,显示实时时间。2.4 温度电路的设计本设计中的温度采集是温度传感器DS18B20。DSl8B20的电路十分简单,可以把温度变换成数字。然后送到单片机内进行处理。温度检测电路如图2-2所示。图2-2 温度采集电路图本次设计对需要显示的室温要求不高,而DS18B20的测温精度为0.5,分辨率可达0.0625,所以此芯片十分适合本系统的设计要求。2.5 按键电路的设计按键电路就是四个微动开关,一端接在公共地上,另一端与单片机的P24-P27口相连接。当无键按下时P24-P27口输入为高电平,有键按下时P3口所对应I/O口会被拉低,P24-P27中有低电平输入。所以单片机通过扫描P24-P27端口的高低电平就可以确定有没有按键按下,或是那个按键被按下。初步设计,K1、K2、K3、K4键分别对应的功能是退出设置、设置时间和闹铃、数字减一、数字加一。键盘输入电路如图所示。图2-3按键设计电路图2.6 显示电路的设计本系统信息显示内容有时间、阴历、农历、星期、温度、PM2.5等,信息量非常大,所以选用12864汉字图形点阵液晶作为显示模块, VSS、LEDA接低;VDD、LEDK、PST接电源; V0为调节屏幕亮度,与滑动变阻器连接,通过变阻器改变V0电压,从而得到适合的亮度;RS、R/W、EN、DB与单片机相连,其他可以空脚。图2-4 显示设计电路图2.7 PM2.5检测电路的设计粉尘传感器输出模拟电压,其值与粉尘浓度成正比。传感器采集的数据需经A/D转换为数字信号才能被单片机识别。系统采用A/D转换器为ADC0832模数转换器。具有分辨率高、一般功耗低等优点。(一) 第一脚接电压输入端。(二) 第二脚是数据输出。(三) 第三脚是串口数据输入。(四) 第四脚是灰尘浓度模拟电压输出。(五) 第五脚不连接,第六脚接地。粉尘传感器GP2Y1010AU通过对空气粉尘颗粒浓度的检测输出模拟电压,其值与粉尘浓度成正比。图2-5 PM2.5检测设计电路图2.8 本章小结这一章主要介绍了系统每个模块的设计,其中的重点是:主控模块、时钟模块、液晶模块、温度模块、按键模块、PM2.5检测模块。具体连接图见附录1。第三章 系统软件设计3.1 软件的总体设计系统由单片机控制,所以系统软件应该完成的工作分为系统初始化部分和主体循环部分2个部分。系统初始化部分主要是对系统的键盘初始化、数据刷新、液晶初始化、定时器中断进行设置等,其他模块的初始化在各模块函数中初始化。接着进入主体循环部分。主体循环部分也是两部分。分为按键扫描显示程序和闹钟时间判定程序。按键扫描显示程序中有时间、日期、温度、PM2.5等信息的显示,闹钟时间判定程序对时间的监控,如果符合设置的闹钟时间,那么蜂鸣器就发出警报。具体的设计在详细设计部分叙述。根据总体设计的思路及本系统所需实现的功能,需要设计的程序函数包括:显示函数,温度函数,时间、日期读取函数,PM2.5读取函数等。液晶显示程序:1602通过D0D7的8位数据端传输数据和指令,其模块内的控制器有11条控制指令。当液晶显示屏的接口电路与单片机系统I/O按照并行数据传输方式连接完成以后,即可以对AT89C51单片机进行编程。在液晶屏完成显示之前首先要对液晶进行初始化。时钟程序:首先进行初始化,当有中断信号时,读取时钟芯片的数据送入液晶屏显示。这时若有设置键按下时,进行时间修改,完成后将数据送入时钟芯片;若没有按键按下,则直接存入EPROM,送入液晶屏显示。温度程序:DS18B20进行读写操作时必须按照它的时序进行。一般访问DS18B20时按如下步骤进行:初始化;ROM操作命令;存储器操作命令;执行/数据。PM2.5读取程序:首先进行初始化,通过按键检测以后进行一次检测,求取10次AD采样的值,然后转化成电压值,计算固体悬浮颗粒浓度,送入液晶屏显示。3.2 软件主程序设计本次设计的软件设计首先进行子函数的编程。子函数有显示模块、温度读取模块、时间读取模块、PM2.5读取模块等等,然后编写主函数,在主函数需要调用子函数时直接调用,这种方法方便他人阅读,并有很好的可移植性,主函数的工作顺序如下:1、启动后,进行系统的初始化。同时启动中断程序进入主循环。2、从DS1302中读出年、月、日、星期、时、分、秒,从18B20读出温度值,并通过液晶显示屏显示初始值。3、设置时间、闹铃等信息,并判断节日信息时间,实时显示。4、判断闹钟时间,时间到蜂鸣器响。5、系统启动后,开始进行A/D转换,检测PM2.5数据,并进行实时显示。主程序的程序流程图如所示。图3-1 主程序流程图3.3 按键扫描程序按键扫描程序是构成主函数的关键程序之一,它在主函数的循环体中,一共四个按键,K1、K2、K3、K4分别表示的功能为退出设置、设置、减一、加一,按键程序中包括对时间的设置以及信息的显示,具体流程图如图3-2所示。否是是 图3-2 按键扫描流程图首先判断K2键是否按下,若其他键按下正常显示信息,则一切正常。当K2键按下则进入时间调整,首先按一下调整年、按两下调整月,依次调整年月日、星期、时分秒,时间调整完成后再按下K2键则进入闹钟设置,设置方法与时间设置一样,在设置过程中,按下K1键退出设置,按下K3键减一,按下K4键加一。3.4 显示程序设计本次设计的显示模块,采用的是12864液晶,并行接口方式,通过P2口输出数据,片选地址输出口是P30,读/写控制口是P31,实钟信号输出口是P32实现显示功能。显示界面的设计:初步设计分为分频显示。可以分别显示星期、时间、温度,以及PM2.5等其他信息。编写程序:/第一步 首先定义端口#define LCM_data P2 / 数据传输端,并行输入命令、数据sbit LCM_RS=P30;/ 定义液晶RS端,H:数据寄存器;L:指令寄存器sbit LCM_RW=P31; / 定义液晶RW端,读写信号,H:读;L写sbit LCM_EN=P32; / 定义液晶EN端,片选信号,下降沿触发sbit LCM_PSB=P01; /定义液晶PSB端,H:并行;L:串行sbit LCM_RST=P02; /定义液晶RST端,H:不复位;L复位第二步 函数声明void LCM_WriteString(unsigned char *str) ;/写字符void LCM_WriteDatOrCom(bit ,unsigned char );/输入数据或命令void LCM_w_byte(unsigned char bbyte);/ 写一个字节void LCM_init(void);/液晶初始化void LCM_clr(void);/清屏第三步 调用函数通过对每一个函数的调用来对液晶进行控制,例如若要控制液晶显示年,则需调用void LCM_WriteDatOrCom与void LCM_WriteString函数,如下。LCM_WriteDatOrCom(0,0x80);LCM_WriteString(20);LCM_WriteDatOrCom(0,0x81);LCM_WriteDatOrCom(1,(yy/16)+0x30);LCM_WriteDatOrCom(1,yy%16+0x30);LCM_WriteDatOrCom(0,0x82);LCM_WriteString(年);3.5 温度读取程序设计本次设计温度检测采用的是DS18B20芯片,它的硬件电路十分简单,这就使得它的编程略显复杂。DS18B20通过单总线端口访问,所以每一次DS18B20都应满足初始化、ROM操作指令、功能指令三个步骤,缺少步骤或是顺序混乱,该器件将不会返回值。温度读取函数首先要初始化DS18B20,然后进行温度读取,通过DS18B20写字节函数写入命令字,再写命令字,然后再初始化DS18B20,写命令字,写命令字,这样就读出了温度,将温度值返回,其工作流程图如3-3所示。 图3-3 温度读取流程图部分源程序如下: Init_DS18B20(); /初始化,调用初始化函数WriteOneChar(0xcc); /跳过读序列号的操作,调用写函数,写0xcc指令码WriteOneChar(0x44); /启动温度转换,调用写函数,写0x44指令码DS18_delay(125); /转换需要一点时间,延时Init_DS18B20(); /初始化,调用初始化函数WriteOneChar(0xcc); /跳过读序列号的操作,调用写函数,写0xcc指令码WriteOneChar(0xbe); /调用写函数,写0xbe指令码,读温度寄存器tempL=ReadOneChar(); /读出温度的低位LSBtempH=ReadOneChar(); /读出温度的高位MSB tempa=(tempH*256)+tempL)*0.0625; /温度转换DS18_delay(20);return(tempa); /运算结果返回到函数 :ReadTemperature()3.6 时间读取程序设计DS1302芯片是本系统核心芯片之一,从时钟芯片DS1302中读取时间、日期和星期的数据是本系统就基本也是最要的环节,它是实现其它显示功能的基础。所采用的是时钟芯片DS1302,时间、日期只需从寄存器中读出时间数据进行处理。在进行操作之前,应该把它初始化。所以要先编写初始化函数、写命令函数、读数据函数等,然后子函数中需要时进行调用。之后从中读出数据,经过单片机处理后,传送到显示屏上。单片机需要不断的读取时间信息然后通过液晶显示出来,DS1302芯片采用三总线与单片机对话,DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。“CH”是时钟暂停标志位,当该位为1时,时钟振荡器停止,DS1302处于低功耗状态;当该位为0时,时钟开始运行。“WP”是写保护位,在任何的对时钟和RAM的写操作之前,“WP”必须为0。当“WP”为1时,写保护位防止对任一寄存器的写操作。此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。DS1302是通过SPI串行总线跟单片机通信的,当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作。第二个字节就是要读或写的数据了。 单字节读:只有在SCLK为低电平时,才能将CE置为高电平。所以在进行操作之前先将SCLK置低电平,然后将CE置为高电平,接着开始在IO上面放入要传送的电平信号,然后跳变SCLK。数据在SCLK上升沿时,DS1302读取数据,在SCLK下降沿时,DS1302放置数据到IO上。接下来简单介绍关于时间的算法,星期=5+A(实际天数) mod 7 ,实际天数A的计算,A=B(基本天数)+C(闰日天数),B=(计算年-1)*365+(要计算到年的月日天数)。 例:1984年2月1日的基本天数B=(1984-1)*365+(31+1)=723827(天),其中,31是1月为31天,1为2月1日为1天。公元308年8月28日的基本天数B=(308-1)*365+(31+28+31+30+31+30+31+27)=112055+239=112294(天),C=(计算年-1) div 4 -误差修正值 + fixValue2,fixValue2为0或者1。常值为0,当年数为闰年(公历闰年法)之中的3月 1日之后的为1。平年一年有365天,即52周多1天。闰年为366天即52周多2天。我们先只考虑平年的情况。假设第N年的代码为W,则第N+1年的代码为(W+1)7,而第N+K年的代码则为(W+K)%7。这是因为从第N年到第N+K年共经过了K年,每过一年也就是过了52周余1天,经过K年也就是过了52*K周余K天,将多余的天数K加上第N年的代码W再对7取模,所得也就是第N+K年的代码了。下面我们把闰年也考虑进来。判断闰年的规则是,能被4整除,并能被100和400同时整除的年份就是闰年。所以从第N年到第N+K年间共有K/4 -K/100+K/400个闰年,而每个闰年有52周余2天,要比平年多余了1天,即共多余了K/4-K/100+K/400天。我们应该把这些天也加进去,所以第N+K年的代码应为:(W+K+K/4-K/100+K/400)%7。由此我们可以得出当第N年为闰年时,第N+K年的代码计算式为: A=(W+(K+1)+(K-1)/4-(K-1)/100+(K-1)/400)%7 为了方便计算,我们可以取N为0,也就是假设公元元年的代码为W。因为公元元年也是闰年,符合上式,那么当我们输入的年份为Y时,此时就有K=Y,也就是说第Y年的代码为 : A=(W+(Y+1)+(Y-1)/4-(Y-1)/100+(Y-1)/400)%7。月的算法:(Ayear+2*(M+2)+3*(M+2)/5)%7 但是上公式所反映的仅为平年的情况,若Y为闰年,则在M大于2时,每个月的代码还需再加1。这可用一个IF语句解决:if (Y%4=0 & Y%100!=0) | (Y%400=0) & M 2) Amonth = (Amonth+1)%7; 有了上面的公式,当我们输入日期后,就很容易算出当天为星期几了,而且可以计算变量允许范围内的任意一天的星期数:A = (Amonth+D)%7单片机读写时钟芯片内日历寄存器数据的程序流程如图3-4所示。图3-4 DS1302程序流程图 3.7 农历转换函数阴历与阳历之间可以相互转换,但没有固定的公式,无法做到根据任意的阳历年月推算出阴历的年月,所以本次设计采用一种方法,使阴历可以在1901年到2099年之间可以相互转换,根据阳历可以推算出阴历,所以液晶显示阳历时,阴历自然就会跟随阳历的显示而变化。阴历一年有12个月或13个月(含闰月),一个月为30天或29天。把阴历月份的大小月分开表示,29天的月份用0表示,30天的月份用1表示,采用三个字节来储存一年中任意一天的阳历和阴历关系对照表,第一个字节的前4位二进制表示闰月月份,后4位二进制能表示1至4月的大小,第二个字节的八位制表示5至12月的大小,第三个字节的第一位表示13月的大小,大月为0,小月为1,第二、三位表示当年春节的阳历月,剩下的五个位表示当年春节的阳历日。例如2004年的阴历和阳历对应关系如表3-1所示,所以2004年的阴历阳历对照表为0X5C、0X95、0XBA。表3-1 2004年的阴历和阳历对应关系表第一个字节(十六进制:0X5C)月份闰月月份1月2月3月4月二进制01011100大小5大大小小第二个字节(十六进制:0X95)月份5月6月7月8月9月10月11月12月二进制10010101大小大小小大小大小大第三个字节(十六进制:0XBA)月份十三月春节的阳历月春节的阳历日二进制10111010大小大126本次设计采用的此种方法,可以显示1901到2099年之间的阴历农历转换。 根据阴历阳历关系对照表,可以进行编写程序。首先确定当前阳历日期为该年中第几天,假设为X天,然后确定该年中元旦和春节的日差,记为Y,如果够减,则阴历日期为该年的第(X-Y)天,根据查表就可以推算出当前阴历的具体日期;如果不够减,则表示阳历元旦已过,阴历为阳历的前一年,这种情况下,要改变下算法,用春节和元旦的日差减去当前日期的阳历天数,结果表示当前阴历日期到春节的天数,再根据查表就可以推算出当前阴历的具体日期。3.8 检测PM2.5程序设计除主程序外,还定义了其他函数,供给主程序。以下主要介绍A/D转换函数。一般来说A/D转换与单片机应该有四个接口,他们为CS、CLK、DO、DI。但由于 DO端与 DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO 和 DI并联在一根数据线上使用。(见图 3)当 ADC0832未工作时其CS 输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行 A/D转换时,须先将 CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端 CLK 输入时钟脉冲,DO/DI 端则使用 DI端输入通道功能选择的数据信号。在第 1 个时钟脉冲的下沉之前 DI端必须是高电平,表示启始信号。在第 2、3 个脉冲下沉之前 DI端应输入 2位数据用于选择通道功能,当此 2 位数据为“1”、“0”时,只对 CH0 进行单通道转换。当 2 位数据为“1”、“1”时,只对 CH1进行单通道转换。当 2 位数据为“0”、“0”时,将 CH0作为正输入端 IN+,CH1作为负输入端 IN-进行输入。当 2 位数据为“0”、“1”时,将 CH0作为负输入端 IN-,CH1作为正输入端 IN+进行输入。到第 3 个脉冲的下沉之后 DI端的输入电平就失去输入作用,此后 DO/DI端则开始利用数据输出DO 进行转换数据的读取。从第4个脉冲下沉开始由 DO端输出转换数据最高位DATA7,随后每一个脉冲下沉 DO端输出下一位数据。直到第11个脉冲时发出最低位数据 DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第 11个字节的下沉输出 DATD0。随后输出 8位数据,到第 19 个脉冲时数据输出完成,也标志着一次 A/D 转换的结束。最后将 CS 置高电平禁用芯片,直接将转换后的数据进行处理就可以了。3.9 本章小结本章对整个系统的软件部分进行了详细的设计,采用分块化介绍了每一部分,包括温度的读取、农历的转换、A/D转换、PM2.5检测等,通过先对每一部分子函数的编写,最后在主程序中调用编写好的子程序。第四章 模拟仿真与结果分析再完美的设计,没有通过检验难免会有瑕疵,所以本章对系统仿真在整个系统制作中至关重要进行了仿真,检测设计结果是否能够达到预期的效果。下文分别对时间显示、PM2.5进行了验证。仿真参数设置符合运行环境的要求。一个完整的系统在开始着手设计的时候往往要考虑很多的环节,该系统在设计的时候就要考时钟准确走时、虑温度检测、数据显示、闹铃、按键识别与处理等很多环节。为了更好的完成本系统的设计,在进行调试的时候,采用的是分块化,一步一步进行调试,这样会减少很多不必要的麻烦,若把每一块的功能都实现了,然后再组装起来进行联合调试,就会取得事半功倍的效果。首先进行系统的仿真。4.1. 系统软件检测本系统的软件编程使用的是KeilC51软件通过C语言进行编写的,KeilC51软件可以开发51系列单片机,它集编辑、编译、仿真于一体,支持汇编语言和C语言的程序设计,界面友好。用此软件建立工程的步骤如下,第一步 建立一个新项目;第二步 保存项目;第三步 选择单片机型号;第四步 创建C文件;第五步 将C文件加入项目;第六步 输入C语言源程序;第七步 设置输出文件格式;第八步 编译程序,生成HEX文件。最后,将文件通过下载到单片机中,打开电源,检查设计功能是否正确,若不正确,需要修改源程序,直到单片机实现的功能正确为止。前面的软件设计已经详细说明了各个部分是如何设计的,当各个部分放到一起编译时,程序内容会非常多,难免会有一些错误,需要耐心的排查,终于通过了编译。4.2. 功能仿真前面已经把单片机系统的硬件设计和软件设计完成了,下一步就可以着手进行仿真,因为在设计的过程之中肯定有许多的错误,需要进行仿真来发现错误和调试错误,使设计更加完善。本次系统仿真采用的是protues软件。Proteus软件由ISIS和ARES两个软件构成。其中ISIS是原理图编辑与仿真软件,ARES是布线编辑软件。本次系统的硬件设计其中的原理图编辑和PCB布线就是在这个软件环境中完成的,至于软件设计,则是采用protues软件中的ISIS和KEIL软件进行联合调试。 当所有设计都完成的后就可以看到仿真的结果了。图4-1 PM2.5仿真图图4-2 万年历仿真图4.3 本章小结本章对系统进行了仿真。首先对硬件仿真,来验证我所做的工作是否正确,并且显示出我所需要的设计要求,能够正确的显示时间、日期、温度、农历、PM2.5等。可以通过按键进行设置。第六章 总结结论本次设计对多功能万年历系统家用多功能数字仪表进行了详细的分析与制作,从最初的背景研究到方案的选择和确定,以及温度采集电路、显示电路、PM2.5检测电路等硬件设计,选择Protel绘图软件绘制电路原理图,同时采用Keil软件完成软件部分的程序编写;利用MATLAB对PID控制算法仿真;最后选择Protues软件对系统进行模拟仿真。在克服了种种困难之后,基本上实现了基本要求。该系统的显示采用的是分频显示,具有界面友好、走时准确、性能稳定等优点,并且单片机上剩余了很多I/O接口,这就方便了对该系统进行二次开发,具有很好的扩展功能,当然扩展后需要对单片机进行增加程序。由于液晶显示屏可以显示图片、字符、汉字等信息,所以可以对显示界面进行个性化设置,设置成自己喜欢的显示界面。在整个设计过程中,根据设计要求,系统需要检测和显示时间、温度、PM2.5等信息,通过算法控制时间,用传感器检测温度和PM2.5信息,并实时显示。 该系统的显示采用的是12864点阵式液晶显示屏,具有界面友好、走时准确、性能稳定等优点,并且单片机上剩余了很多I/O接口,这就方便了对该系统进行二次开发,具有很好的扩展功能,当然扩展后需要对单片机进行增加程序。由于液晶显示屏可以显示图片、字符等信息,所以可以对显示界面进行个性化设置,设置成自己喜欢的显示界面。经过多次调试,系统能够准确计算时间信息,精确检测温度信息和PM2.5系数,并且通过液晶屏显示信息。时间可以通过按键来设置和调节。综上所述,本次毕业设计的方案是可行的。致谢通过本次的毕业设计,我学到了很多东西。最想感谢的是金坤善老师,他是一个很好的导师。不论金老师的工作如何繁重,时间是多么的珍贵,但总是在每周抽出时间对我们进行指导监督,不仅教我们如何制作自己设计的东西,最主要的是教我们如何进行一个项目的研究、开发,让我们打开自己的思路,通过一个小小的万年历系统的设计,让我懂得了每一项工程开发的不易,学习未知的事物很重要。从刚刚确定论文题目的一脸茫然,到现在谈及万年历系统可以说出自己的一些看法,三个月的时间不长不短,但是对于我来说却是从无到有的一种升华。大学期间所学的科目很多,很零碎,直到把每个模块所用到的知识结合起来才意识到理论与实践的差距,现在看到这个题目感觉是那么亲切,在电子信息工程学院金坤善老师一点点的讲解下,对这个系统也不觉得有那么复杂了。通过查阅英文资料,参考别人的文献,对题目有了一定的了解之下,以及在金老师一遍又一遍讲解和一次又一次的修改之下我的论文终于完成。我想再次衷心的给老师说一声:谢谢!在这过程中,还有很多同学也帮了我很多。感谢那些帮助过我的同学们,让我能够顺利地完成这次设计,衷心的感谢老师和同学们。参考文献1王建华 计算机控制技术(第二版)M. 高等教育出版社 20092 梁少芳 论现代电子应用技术的现状及未来发展趋势 J. 期刊 20063谭浩强 C程序设计 (第四版)M. 清华大学出版社 20094毕满清 模拟电子技术基础 M. 电子工业出版社 20135刘畅生 传感器简明手册及应用电路 M. 西安电子科技大学出版社 20086何英 Protel99入门与实用 M. 机械工业出版社 2007 7郭强 最新液晶显示应用 M. 电子工业出版社 2006 8杨黎明 显示农历和节气的12864液晶万年历 J. 期刊 20099 何秋生 单片机原理与应用(第二版)M. 电子工业出版社 201010 郭天祥 新概念51单片机C语言教程 M.哈尔滨工业大学出版社 2009附录附录A 总体电路图附录B部分源程序/* 主函数 */void main(void)HandInit();while(1) Process(); buz();#include #define uchar unsigned char/宏定义#define uint unsigned int/#include /* 液晶引脚定义 */#define LCD_DB P0sbit LCD_RS=P20; sbit LCD_RW=P21; sbit LCD_E=P22; /* 温度传感器引脚定义 */sbit DSA=P13; /* 时钟芯片引脚定义 */sbit io=P10;sbit sck=P11;sbit rst=P12;/* 独立按键引脚定义 *

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论