多功能万年历的设计_第1页
多功能万年历的设计_第2页
多功能万年历的设计_第3页
多功能万年历的设计_第4页
多功能万年历的设计_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

多功能万年历的设计摘要:本设计采用了以广泛使用的单片机技术为核心,软硬件结合,使硬件部分大为简化,提高了系统稳定性,并采用LCD显示电路、键盘电路,使人机交互简便易行,此外还结合音乐闹铃电路、温度采集电路和供电电路。本方案设计出的万年历可以显示日期、时间、温度、农历,并且设置了音乐闹铃功能。该万年历可以应用于一般的生活和工作中,也可以通过改装,提高性能,增添新功能,从而给人们的生活和工作带来方便。关键词:万年历;AT89S52;LCD1602;时钟日历芯片DS1302;音乐闹钟1TheMulti-functionalCalendarDesignnaAbstract:Thisdesignhasadoptedbytheextensiveuseofsinglechipmicrocomputerasthecore.Hardwareandsoftwarecombinationmakethehardwarepartsgreatlysimplifiedandimprovethestabilityofthesystem.TheuseofLCDdisplaycircuit,keyboardcircuitmakestheinformationexchangesimple.Inaddition,thedesigniscombinedwithmusicalarmcircuit,temperatureacquisitioncircuitandpowersupplycircuit.Itcanshowacalendardate,time,temperature,thelunarandsetupmusicalarmfunction.Ononehangthecalendarcanbeappliedtogenerallifeandwork,ontheotherhang,itcanimproveperformancebymodificationtoaddnewfunctions,sothatitcanbringmoreconveniencetopeopleslifeandwork.Keywords:calendar;AT89S52;LCD1602;clockcalendarchipDS1302;musicalarmclock.2目录引言.11系统功能与方案论证.21.1系统功能.21.2系统基本方案选择和论证.21.2.1单片机芯片的选择方案和论证.21.2.2显示模块选择方案和论证.31.2.3时钟芯片的选择方案和论证.31.2.4温度传感器的选择方案与论证.31.3电路设计最终方案决定.42系统的硬件设计与实现.42.1电路设计框图.42.2系统硬件概述.42.3各系统电路及工作原理.52.3.1AT89S52单片机最小系统设计.52.3.2时钟电路模块的设计.62.3.3温度采集电路的设计.72.3.4LCD1602液晶显示模块设计.82.3.5电源电路.102.3.6闹钟电路设计.102.3.7键盘输入电路.113软件设计.113.1主程序框图.123.2DS1302时间处理.123.3环境温度采集.153.4键盘扫描.153.5音乐播放.153.6公历转农历.15结束语.17参考文献.18附录.19附录A程序.19附录B原理图.41致谢.413引言电子万年历是实现对年、月、日、时、分、秒数字显示的计时装置,广泛用于个人、家庭、车站、码头、办公室、银行大厅等场所,成为人们日常生活中的必需品。数字集成电路的发展和石英晶体振荡器的广泛应用,使得数字钟的精度远远超过老式钟表。钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的电子万年历精度高,功能易于扩展,可扩展成为诸如定时自动报警、按时自动打铃、时间程序自动控制、定时广播、自动启闭路灯等电路。因此,研究电子万年历及扩大其应用有着非常现实的意义。1系统功能与方案论证1.1系统功能LCD显示年、月、日、时、分、秒、星期、温度、农历等信息手动调整年、月、日、时、分、星期、温度上限、闹铃时间温度报警闹铃播放音乐日历时间掉电保护公历与农历自动关联闹铃可选择关闭、每天循环或只响应一次三种模式可选用USB、直流12V或5V电源或交流9V电源对电路进行供电1.2系统基本方案选择和论证由于现在市面上的电子万年历的种类比较多,因此到底选择什么样的方案在设计中是至关重要的。正确地选择方案就可以使产品更加人性化,并且可以减小开发的难度,缩短开发的周期,降低产品的成本等等,因此就会被人们普遍接受,并且能够更快地将产品推向市场实现其自身的价值。1.2.1单片机芯片的选择方案和论证方案一:采用89C51芯片作为硬件核心,采用FlashROM,内部具有4KBROM存储空间,4能于3V的超低压工作,而且与MCS-51系列单片机完全兼容,但是运用于电路设计中时由于不具备ISP在线编程技术,在烧写程序时需要专门的下载器。方案二:采用AT89S52,片内ROM全都采用FlashROM;能以3V的超底压工作;同时也与MCS-51系列单片机完全该芯片内部存储器为8KBROM存储空间,同样具有89C51的功能,且具有在线编程可擦除技术,当在对电路进行调试时,由于程序的错误修改或对程序的新增功能时,烧写程序方面,再加上本系统程序较大,需要较大的存储空间,因此选择采用AT89S52作为主控制系统。1.2.2显示模块选择方案和论证方案一:采用LED数码管动态扫描,LED数码管价格适中,对于显示数字最合适,而且采用动态扫描法与单片机连接时,占用的单片机口线少。但所需数码管太多,布线和焊接困难极易出错,因此不采用LED数码管作为显示。方案二:采用点阵式数码管显示,点阵式数码管是由八行八列的发光二极管组成,对于显示文字比较适合,如采用在显示数字显得太浪费,且价格也相对较高,所以也不用此种作为显示。方案三:采用LCD液晶显示屏,液晶显示屏的显示功能强大,可显示大量字符,显示多样,清晰可见,但是价格贵,需要的接口线多,本设计所需显示的内容较多。所以在此设计中采用LCD1602液晶显示屏。1.2.3时钟芯片的选择方案和论证方案一:直接采用单片机定时计数器提供秒信号,使用程序实现年、月、日、星期、时、分、秒计数。采用此种方案虽然减少芯片的使用,节约成本,但是,实现的时间误差较大,所以不采用此方案。方案二:采用DS1302时钟芯片实现时钟,DS1302芯片是一种高性能的时钟芯片,可自动对秒、分、时、日、周、月、年以及闰年补偿的年进行计数,而且精度高,318位的RAM做为数据暂存区,工作电压2.5V5.5V范围内,2.5V时耗电小于300nA。51.2.4温度传感器的选择方案与论证方案一:使用热敏电阻作为传感器,用热敏电阻与一个相应阻值电阻相串联分压,利用热敏电阻阻值随温度变化而变化的特性,采集这两个电阻变化的分压值,并进行A/D转换。此设计方案需用A/D转换电路,增加硬件成本而且热敏电阻的感温特性曲线并不是严格线性的,会产生较大的测量误差。方案二:采用数字式温度传感器DS18B20,此类传感器为数字式传感器而且仅需要一条数据线进行数据传输,易于与单片机连接,可以去除A/D模块,降低硬件成本,简化系统电路。另外,数字式温度传感器还具有测量精度高、测量范围广等优点。1.3电路设计最终方案决定综上各方案所述,对此次作品的方案选定:采用AT89S52作为主控制系统;DS1302实现时钟;数字式温度传感器;LCD1602字符液晶显示屏作为显示。2系统的硬件设计与实现2.1电路设计框图图1系统框图单片机控制电路键盘输入DS1302时钟电路DS18B20温度采集电路1602显示电路闹钟电路电源电路62.2系统硬件概述本设计以AT89S52单片机为核心,构成单片机控制电路,结合DS1302时钟芯片显示公历的年、月、日、星期、时、分、秒和农历的月、日,同时完成对它们的自动调整和掉电保护,全部信息用液晶显示器显示出来。键盘输入由四个按键来实现,用这四个按键可以对日期、时间、星期、温度报警上限进行调整,并可以对闹铃的开关和闹铃的时间进行设置。闹铃功能通过蜂鸣器来实现。温度的采集通过DS18B20来实现。电源电路可选用直流12V或5V电源9V交流电源输入,再经过稳压集成块输出+5V电压,可稳定工作。系统框图如图1所示,其软硬件设计简单,时间记录准确,可广泛应用于长时间连续显示的系统中。2.3各系统电路及工作原理本设计分为单片机控制电路、DS1302时钟电路、DS18B20温度采集电路、1602显示电路、键盘输入电路、闹铃电路、电源电路几个模块。充分利用硬件电路的可靠性、稳定性和芯片的方便性,使整体电路简单可行。2.3.1AT89S52单片机最小系统设计AT89S52是一种低功耗,高性能CMOS8位单片机,片内含8kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元。(1)AT89S52的引脚及功能AT89S52单片机的引脚说明如图2所示。P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78RST/VPD9RXD/P3.010TXD/P3.111INT0/P3.212INT1/P3.313T0/P3.414T1/P3.515WR/P3.616RD/P3.717XTAL218XTAL119GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30EA/Vpp31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40图2AT89S52的引脚7P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高,即是要接上拉电阻。P1、P2、P3口都是内部提供上拉电阻的8位双向I/O口,能接收输出4TTL门电流。当各自管脚写入1后,内部上拉为高,都可用作输入。在FLASH编程和校验时,P1口作为第八位地址接收;P2口接收高八位地址信号和控制信号。P3口可作为AT89S52的一些特殊功能口。RST是复位信号引脚。/EA/VPP是程序存储器的读选通信号端。当/EA保持低电平时,对ROM的读操作限定在外部程序存储器;当/EA端保持高电平时,对ROM的读操作从内部程序存储器开始。XTAL1(19脚)是反向振荡放大器的输入及内部时钟工作电路的输入端。XTAL2(18脚)是来自反向振荡器的输出端1。(2)AT89S52单片机最小系统单片机的最小系统如图3所示,电路中轻触按键、C3和R9组成单片机的复位电路,连接到单片机的第9脚,它是施密特触发输入,当振荡器起振后,单片机上电瞬间,RC电路充电,RST引脚端出现正脉冲,RST高电平单片机保持复位状态。此时,ALE、/PSEN、P0、P1、P2、P3口都输出高电平,RST变成低电平后,进入工作状态。当需要手动复位时,按下轻触按键,RST为高电平,单片机进入复位状态,松开按键后,进入工作状态。18、19脚之间接一个石英晶体及两个电容,构成稳定的自激振荡器,振荡信号是单片机工作的基本节拍。P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78RST/VPD9RXD/P3.010TXD/P3.111INT0/P3.212INT1/P3.313T0/P3.414T1/P3.515WR/P3.616RD/P3.717XTAL218XTAL119GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30EA/Vpp31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40AT89S52U1Y212MHzC122uFC222uFR910KRST20uFC35VK1K2K3K4P2_0P2_1P2_2P2_3P2_4P2_5P2_6P2_7P1_0P1_1P1_2P1_3P1_4P1_5P1_6P1_75V8图3单片机最小系统2.3.2时钟电路模块的设计(1)DS1302芯片介绍日历时钟芯片DS1302是一种串行接口的实时时钟,芯片内部具有可编程日历时钟和31个字节的静态RAM,日历时钟可自动进行闰年补偿,计时准确,接口简单,使用方便,工作电压范围宽(2.55.5V),功耗低,芯片自身还有对备份电池进行涓流充电的功能。DS1302采用8脚DIP封装,其引脚排列如图4所示VCC11X12X23GND4RST5I/O6SCLK7VCC28图4DS1302引脚图VCC1和VCC2分别是主电源和后备电源引脚,DS1302由VCC1或VCC2中较大者供电。X1,X2为振荡源引脚,需外接32.768KHZ晶振。(2)DS1302的应用DS1302与单片机之间采用3线串行通信方式。串行时钟信号SCLK接到单片机的P1.0引脚;数据输入/输出信号I/O接到单片机的P1.1引脚;复位/或通信允许信号RST接到单片机的P1.2引脚,RST=1允许通信,RST=0禁止通信。单片机AT89S52作为主机通过控制SCLK、I/O和RST信号实现两芯片间的数据传送。DS1302时钟电路如图5所示。9VCC11X12X23GND4RST5I/O6SCLK7VCC28ds1302U3Y132.768KHz3vBATTERY5VR1110KR1210KR1310KP1_0P1_1P1_2图5DS1302时钟电路2.3.3温度采集电路的设计温度传感器DS18B20,是一种数字式的温度传感器,具有测量精度高,电路连接简单等特点,此类传感器仅需要一条数据线进行数据传输。温度采集模块如图6所示。GND1DQ2VCC330.0DS18B20U25VR1010KP1_3图6温度采集模块2.3.4LCD1602液晶显示模块设计(1)1602字符型LCD简介LCD液晶显示器是一种被动式的显示器,本身并不发光,而是利用液晶在电压作用下,能改变光线通过方向的特性而达到显示白底黑字或黑字白底的目的。本设计采用16列2行的字符型LCD1602带背光的液晶显示器。LCD1602主要技术参数:显示容量:162个字符工作电压:.55.5V10工作电流:2.0mA(5.0V)它的引脚图如图8所示:VSS1VCC2V03RS4R/W5E6DB07DB18DB29DB310DB411DB512DB613DB714BLA15BLB16图81602引脚图第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”。第4脚:RS为寄存器选择,高电平时选择数据寄存器,低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平是进行读操作,低电平时进行写操作。当RS和RW同为低电平时可以写入指令或显示地址,当RS为低电平且RW为高电平是可以读忙信号,当RS为高RW为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变为低电平时,液晶执行指令。第15、16两脚为背光电源。(2)指令说明初始化设置1)显示模式设置表1显示模式指令表2)显示开关及光标设置表2显示开关及光标指令表指令码功能01100设置162显示,57点阵,8位数据接口指令码功能001DCB0001NSD=1开显示;D=0关显示C显示光标;C不显示光标光标闪烁;B光标不显示N=1当读写一个字符后地址指针加1,且光标加10当读写一个字符后地址指针减,且光标减当写一个字符,整屏显示左移(N=)或右移(N=),以得到光标不移动而屏幕移动的效果0当写一个字符整屏不移动11(3)LCD1602的应用电路P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78RST/VPD9RXD/P3.010TXD/P3.111INT0/P3.212INT1/P3.313T0/P3.414T1/P3.515WR/P3.616RD/P3.717XTAL218XTAL119GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30EA/Vpp31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40AT89S52U1Y212MHzC522uFC622uFR910KRST10uFC45V5VK1K2R110KR210KR310KR410KR510KR610KR710KR810KP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.75V5VR1010kP0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7P1_0P1_1P1_2P1_3P1_4P1_5P1_6P1_75VVSS1VCC2V03RS4R/W5E6DB07DB18DB29DB310DB411DB512DB613DB714BLA15BLB16LCD1602P1_0P1_1P1_2P2.0P2.1P2.2P3.2K3图9LCD1602显示模块2.3.5电源电路为了方便使用,本系统设计了双电源,既可选择交流9V供电,也可选用直流12V或5V供电。本系统还设置了USB接口,可方便使用MP3或手机充电器对电路进行供电。电源模块如图10所示。采用直流或交流电源供电时,电路经过二极管IN4007半波整流和电容C3滤波后送入三端稳压管7805产生+5V的电压再经滤波后为电路进行供电。采用直流+5V稳压电源时,须接上跳帽,这时三端稳压管7805不工作。12VCC1GND2GND3jiekou1IN4007C310uFC40.1uFVin1Vout3GND2U47805C52200uFSWITCHU4GND4VCC123USB5VR151KLED12J图10电源模块2.3.6闹钟电路设计本设计的闹钟电路直接采用PNP型三极管驱动蜂鸣器发声,当单片机的P1.7引脚送出低电平时,PNP型三极管饱和导通,蜂鸣器发声,为高电平时不发声,因此通过单片机产生不同频率的脉冲从P1.7引脚送出,蜂鸣器就会发出各种音调的声音。闹钟电路如图11所示。Q190125VR141KP1.7SPEAKER图11闹钟电路2.3.7键盘输入电路本系统设置了四个功能按键:K1、K2、K3、K4,如图12所示。K1的功能:按一下进入阴历显示界面,按两下进入模式选择界面,按三下,退出模式选择界面,回到主页面。在闹铃响的时候,按一下可停止闹铃。K2的功能:对时间、日历、闹铃时间、闹铃开关、温度报警等内容进行选择。K3的功能:对相应的内容进行加一操作。K4的功能:对相应的内容进行减一操作。13P1.0/T21P1.1/T2EX2P1.23P1.34P1.45P1.56P1.67P1.78RST/VPD9RXD/P3.010TXD/P3.111INT0/P3.212INT1/P3.313T0/P3.414T1/P3.515WR/P3.616RD/P3.717XTAL218XTAL119GND20P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.728PSEN29ALE/PROG30EA/Vpp31P0.732P0.633P0.534P0.435P0.336P0.237P0.138P0.039VCC40AT89S52U1K1K2K3K4K1K2K3K45V图12键盘输入电路3软件设计为了方便编写、调试和增加可读性,本设计的软件部分采用C语言进行编写。本系统主要程序模块包括AT89S52主控程序、DS1302时间处理、环境温度采集、LCD1602显示、键盘扫描、音乐播放、公历转农历等几部分。143.1主程序框图图13主程序框图3.2DS1302时间处理DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据的读/写可以用单字节或多字节的突发模式进行。所有的数据应在时钟的下降沿变化,而在时钟的上升沿,在芯片或与之相应的设备进行输入。15(1)命令字节命令字节的格式如表3所示表3DS1302的命令字节格式DD6D5D4D3D2D1D0RAMRD1CKA4A3A2A1A0WR每次数据的传输都是有命令字节开始的,这里的最高有效位必须是1。D6是RAM(为1)或时钟(为0)的标识位。D1D5定义片内寄存器的地址。最低有效位(D0)定义了写操作(为0时)或读操作(为1时),命令字节的传输时钟从最低有效位开始。(2)数据输入输出(I/O)在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始,如下图-14所示。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。如下图-15所示。图14读出DS1302数据图15写DS1302控制字(3)日历、时钟寄存器及其控制字16DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器及其控制字见表4所示,其中奇数为读操作,偶数为写操作。表4DS1302的日历、时钟寄存器及其控制字命令字各位内容寄存器名写操作读操作取值范围76543210秒寄存器80H81H00-59CH10SECSEC分钟寄存器82H83H00-59010MINMIN小时寄存器84H85H1-12或00-2312/24010APHRHR日期寄存器86H87H01-28,29,30,310010DATEDATE月份寄存器88H89H01-12000IOMMONTH周日寄存器8AH8BH01-0700000DAY年份寄存器8CH8DH00-9910YEARYEAR时间处理子程序流程图如图16所示,程序见附录一。开始变量初始化使DS1302不具备写保护复位端产生一个高电平写1302地址延时一段时间向该地址写数据数据写完了吗?复位端产生一个高电平写1302地址将该地址的数据读出地址增加数据读完了吗?地址加1延时一段时间显示数据YNYN17图16时间处理程序框图3.3环境温度采集温度采集子程序流程图如图17所示,程序见附录一。图17温度采集程序框图3.4键盘扫描键盘扫描子程序流程图如图18所示,按键功能说明详见键盘输入电路部分,程序则见附录一。3.5音乐播放对于单片机产生音乐,关键是控制频率的输出。一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,本设计中利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。程序和程序说明见附录一。3.6公历转农历本设计采用的是按年查表法来实现公历转换成农历,这样可最大限度地减少表格所占的程序空间。这里采用了三个字节来表示一年的农历信息。计算公历日对应的农历日期的方法:先计算出公历日离当年元旦的天数,然后查18表取得当年的春节日期计算出春节离元旦的天数,二者相减即可算出公历日离春节的天数,以后只要根据大小月和闰月信息,减一月天数调整一月农历月份,即可推算出公历日所对应的农历日期。如公历日不到春节日期,农历年要比公历年小一年,农历大小月取前一年的信息,农历月从12月向前推算2。公历转农历程序流程图如图19所示,程序见附录一。图18键盘扫描框图19图19公历转农历程序流程图结束语本设计以AT89S52单片机为核心,利用软件编程,通过键盘控制、温度传感器、日历时钟芯片和LCD液晶显示基本达到预想效果。本设计硬件系统相对简单,使用方便。程序部分是本设计的一个难点,为了实现较多的功能,程序变得相当庞大,调试20起来比较麻烦。由于本人能力有限,程序还未能进一步优化,为了节约成本,系统未能实现更多的功能,如农历年、天干地支和星期自动关联等。参考文献1顾滨,赵伟军,王泰,鲍可进,李铁香.单片微计算机原理、开发及应用M.北京:高等教育出版社,2000.15-35.2朱思荣.用51单片机实现公历与农历、星期的转换,1-2./view/4994b7d8ce2f0066f5332293.html3DS18B20中文资料,1-22./view/fe0be6e8998fcc22bcd10d2e.html4DS1302中文资料,1-8./phtml51602的使用说明及C语言例程,1-5./view/086ce729915f804d2b16c1b5.html67805应用电路图.电子技术资料网站./article/88/131/138/2007/200711256044.html7窦振中.单片机外围器件实用手册输出通道器件分册M.北京:北京航空航天大学出版社,2002.467-479.8刘建清,鲁金,王春生.从零开始学单片机技术M.北京:国防工业出版社,2006.28-31.。9徐爱钧.单片机原理实用教程-基于proteus虚拟仿真M.北京:电子工业出版社,1996.258-267.10张齐,朱宁西.单片机应用系统设计技术基于C51的protues仿真(第2版)M.北京:电子工业出版社,2009.260-269.21附录附录A程序/*使用LCD1602、DS1302时钟芯片、DS18B20温度传感器完成该万年历*/#include#includeLM016L.h#includeDS1302.h#includeyinli.h#includeDS18B20.h#includeKeyScan.h#includeMODE.h#includeOPEN.h#includeSoundPlay.h#defineuintunsignedint/宏定义#defineucharunsignedcharvoidopen();/上电显示voidKeyScan();/键盘扫描voidSetTime_Mode();/调时voidSetDate_Mode();/调日期voidSetYear_Week_Mode();/调年和星期voidSetRing_Mode();/闹钟设置voidSetTemp_Mode();/温度上限设置模式voidInitialSound(void);/音乐初始化voidGuangbiao_Flash();/光标闪烁voidPlay(unsignedchar*Sound,unsignedcharSignature,unsignedOctachord,unsignedintSpeed);/*日历主函数*/voidmain()init();Warn_Ling_init();Read_RTC();open();/上电显示函数write_com(0x01);/清屏while(1)time_date();/时间处理KeyScan();/键盘扫描if(ring_time1=l_tmpdate1&ring_time2=l_tmpdate2&flag=0&alarm!=0)/判断是否到闹钟设置的时间,是的话执行相应动作uchari;if(alarm=1)alarm=0;write_com(0x01);write_com(0x80+0x00);for(i=0;i=1;/右移一位sck=1;voidWrite_Ds1302(ucharaddress,uchardat)/写入rst=0;delay(1);sck=0;delay(1);rst=1;delay(1);/启动Write_Ds1302_Byte(address);/发送地址Write_Ds1302_Byte(dat);/发送数据24rst=0;/恢复ucharRead_Ds1302(ucharaddress)/读取时间uchari,time=0x00;rst=0;delay(1);sck=0;delay(1);rst=1;delay(1);Write_Ds1302_Byte(address);for(i=0;i=1;/右移一位sck=0;rst=0;delay(1);/以下为DS1302复位的稳定时间rst=0;sck=0;delay(1);sck=1;delay(1);io=0;delay(1);io=1;delay(1);return(time);voidRead_RTC()/读取日历uchari,*p;p=read_rtc_address;/地址传递for(i=0;isbitds=P13;/温度传感器信号线uchartemperature;uinttemp,limit=400;/整型温度值floatf_temp;/浮点型温度值uintget_temp();/获得温度voidtempchange(void);/转换温度voiddsreset(void);/DS18B20复位bittempreadbit(void);/读DS118B20一位uchartempreadbyte(void);/读DS18B20一个字节voidtempwritebyte(uchardat);/写入DS18B20一个字节voiddeal();/温度处理函数voidTemp_Display();/温度显示voidWarn_Ling_init();ucharcodetable=0123456789.C;voiddsreset(void)/DS18B20复位,初始化函数uinti;ds=0;i=103;while(i0)i-;ds=1;i=4;while(i0)i-;bittempreadbit(void)/读一位数据函数uinti;bitdat;ds=0;i+;/i+起延时的作用ds=1;i+;i+;dat=ds;i=8;while(i0)i-;return(dat);uchartempreadbyte(void)/读一个字节数据函数uchari,j,dat;dat=0;for(i=1;i1);/读出的数据最低位在最前面return(dat);voidtempwritebyte(uchardat)/写一个字节数据函数27uinti;charj;bittestb;for(j=1;j1;if(testb)/写1ds=0;i+;i+;ds=1;i=8;while(i0)i-;else/写0ds=0;i=8;while(i0)i-;ds=1;i+;i+;voidtempchange(void)/DS18B20开始获取温度并转换dsreset();delay(1);tempwritebyte(0xcc);/写跳过读ROM指令tempwritebyte(0x44);/写温度转换指令uintget_temp()/读取寄存器中存储的温度数据uchara,b;dsreset();delay(1);tempwritebyte(0xcc);/跳过RAM,适用于一个从机工作tempwritebyte(0xbe);/读RAM内部9字节的温度数据a=tempreadbyte();/读低8位b=tempreadbyte();/读高8位temp=b;templimit)/当温度超过设定的上限值时EA=1;TR2=1;ET2=1;else/当温度小于设定的上限值时BeepIO=1;TR2=0;ET2=0;EA=0;voidWarn_Ling_init()TL2=0x90;TH2=0xfe;RCAP2L=0x90;RCAP2H=0xfe;C_T2=0;CP_RL2=0;voidtimer2()interrupt5TF2=0;BeepIO=!BeepIO;/*END*END*/KeyScan.h/*键盘扫描函数*/sbitkey1=P30;/键盘位定义sbitkey2=P31;sbitkey3=P32;sbitkey4=P33;ucharflag,select,guangbiao1,guangbiao2,guangbiao3;voidKeyScan()/进入/退出模式键被按下/if(key1=0)write_com(0x01);/清屏flag+;/模式间的转换if(flag=3)flag=0;select=0;while(!key1);/检测键盘是否释放,下同/功能选择键被按下/if(key2=0&flag=2)write_com(0x01);/清屏select+;if(select=10)select=0;write_com(0x01);while(!key2);/时加/温度加一键被按下/if(key3=0)if(flag=2)ucharj;uchary1,y2;for(j=0;j4;y2=SetTime6y2+;if(y29)y2=0;y1+;29if(y19SetTime6=16*y1+y2;/写入数组Set_RTC(SetTime);break;case1:y1=SetTime5;y1+;if(y1=8)y1=1;SetTime5=y1;/写入数组Set_RTC(SetTime);break;case2:y1=SetTime44;y2=SetTime4y2+;if(y29)y2=0;y1+;if(y1=1SetTime4=16*y1+y2;/写入数组Set_RTC(SetTime);break;case3:y1=SetTime34;y2=SetTime3y2+;if(y29)y2=0;y1+;if(y1=3SetTime3=16*y1+y2;/写入数组Set_RTC(SetTime);break;case4:y1=SetTime24;y2=SetTime2y2+;if(y29)y2=0;y1+;if(y1=2SetTime2=16*y1+y2;/写入数组Set_RTC(SetTime);break;case5:y1=SetTime14;y2=SetTime1y2+;if(y2=10)y2=0;y1+;if(y1=6)y1=0;SetTime1=y1*16+y2;/写入数组Set_RTC(SetTime);break;case6:30y1=ring_time24;y2=ring_time2y2+;if(y29)y2=0;y1+;if(y1=2ring_time2=y1*16+y2;/写入数组break;case7:y1=ring_time14;y2=ring_time1y2+;if(y29)y2=0;y1+;if(y1=6)y1=0;ring_time1=y1*16+y2;/写入数组break;case8:alarm+;if(alarm2)alarm=0;break;case9:limit+=10;if(limit1270)limit=0;break;default:break;while(!key3);/分加/温度减一键被按下/if(key4=0)if(flag=2)ucharj;/;,y1,y2;inty1,y2;for(j=0;j4;y2=SetTime6y2-;if(y24;y2=SetTime4y2-;if(y24;y2=SetTime3y2-;if(y24;y2=SetTime2y2-;if(y24;y2=SetTime1y2-;if(y24;y2=ring_time2y2-;if(y24;y2=ring_time1y2-;if(y24);/读时的第一位write_date(table0SetTime2/读时的第二位elsewrite_date();write_date();write_date(:);if(guangbiao24);/读时的第一位write_date(table0SetTime1/读时的第二位elsewrite_date();write_date();voidSetDate_Mode()/调日期模式uchari;for(i=0;i4);/读月的第一位write_date(table0SetTime4/读月的第二位elsewrite_date();write_date();33write_date(:);if(guangbiao24);/读日的第一位write_date(table0SetTime3/读日的第二位elsewrite_date();write_date();voidSetYear_Week_Mode()/调年、星期模式uchari;for(i=0;i4);/读年的第一位write_date(

温馨提示

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

评论

0/150

提交评论