单片机lcd电子时钟的设计_第1页
单片机lcd电子时钟的设计_第2页
单片机lcd电子时钟的设计_第3页
单片机lcd电子时钟的设计_第4页
单片机lcd电子时钟的设计_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

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

文档简介

LCD电子时钟的设计摘要本设计采用LCD液晶屏幕显示系统,以STC89C52RC单片机为核心,由键盘、定时闹铃、日期提醒、温度显示等功能模块组成。基于题目基本要求,本系统对时间显示、闹铃方式进系统行了重点设计。本系统大部分功能由软件来实现,吸收了硬件软件化的思想,大部分功能通过软件来实现,使电路简单明了,系统稳定性大大提高。本系统不仅成功的实现了要求的基本功能,多数发挥部分也得到了实现,而且还具有一定的创新功能。关键字STC89C52RC单片机、LCD液晶显示、双电源供电、定时闹铃第1章绪论第2章总体设计要求第三章总体设计方案31方案的选择与论证32总体方案第4章系统主要硬件简介41STC89C52RC42LCD160243DS1302第5章系统硬件设计51STC89C52RC单片机最小系统52温度测量模块53时钟模块54LCD液晶显示模块55键盘模块56系统电源57整体电路第6章系统软件设计61主程序流程图62时间设定程序流程图63温度测量流程图64闹铃设定流程图第7章备注71参考文献72程序第一章绪论在新的世纪我们已经步入了第二个十年,随着全球经济的复苏和发展,由于在世界范围内人类需求的巨大释放,以及消费结构的升级,同时传统能源的稀缺以及带来的环境的破坏,都将带来新一轮的科技革命的巨变。因此,更适合人类社会协调、健康、可持续发展的新能源、新材料等便应运而生。LCD作为一种新的材料,LCD的设计制造技术与应用水平上都得到了迅速的提高,生产也得到了迅速的发展,并逐步形成产业,成为光电子行业的新兴产业领域。然而随着人们生活节奏的加快,时间对人们的重要性也越来越重要,因此,拥有一个不错的时钟对人们的生活将带来很大的方便。时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢这就要求人们不断设计出新型时钟。第2章总体设计要求21设计要求(1)使用集成数字电路或单片机作为主控制芯片;(2)使用LCD来显示现在的时间,显示格式为上行显示年月日;下行显示时时分分秒秒;(3)使用时钟芯片DS1302实现时钟定时;(4)具有闹铃功能,一旦时间到则发出警报声;(5)具有调整日期与时间的功能。22设计内容(1)查阅相关资料,整体构思,(2)进行调研和总体设计,并绘制系统方框图和主程序流程图等;(3)详细设计1)LCD显示电路的设计及功能实现2)实时时钟电路的设计及其功能实现3)按键设置电路的设计及其功能实现第3章总体设计方案31方案的选择与论证311显示部分显示部分是本次设计的重要部分,一般有以下两种方案方案一采用LED显示,分静态显示和动态显示。对于静态显示方式,所需的译码驱动装置很多,引线多而复杂,且可靠性也较低。而对于动态显示方式,虽可以避免静态显示的问题,但设计上如果处理不当,易造成亮度低,有闪烁等问题。方案二采用LCD显示。LCD液晶显示具有丰富多样性、灵活性、电路简单、易于控制而且功耗小等优点,对于信息量多的系统,是比较适合的。鉴于上述原因,我们采用方案二。312数字时钟数字时钟是本设计的核心的部分。根据需要可采用以下两种方案实现方案一方案完全用软件实现数字时钟。原理为在单片机内部存储器设三个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将时字节清零。该方案具有硬件电路简单的特点,但当单片机不上电,程序将不执行。而且由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。方案二方案采用DALLAS公司的专用时钟芯片DS1302。该芯片内部采用石英晶体振荡器,其芯片精度不大于10MS/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,可使系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。基于时钟芯片的上述优点,本设计采用方案二完成数字时钟的功能。313温度采集由于现在用品追求多样化,多功能化,给系统加上温度测量显示模块,能够方便人们的生活,使该设计具有人性化。方案一采用热敏电阻,可满足40摄氏度至90摄氏度测量范围,但热敏电阻精度、重复性、可靠性较差,对于检测小于1摄氏度的信号是不适用的。方案二采用温度传感器DS18B20。DS18B20可以满足从55摄氏度到125摄氏度测量范围,且DS18B20测量精度高,增值量为05摄氏度,在一秒内把温度转化成数字,测得的温度值的存储在两个八位的RAM中,单片机直接从中读出数据转换成十进制就是温度,使用方便。基于DS18B20的以上优点,我们决定选取DS18B20来测量温度。314闹铃部分一般的时钟都带有闹铃,实现闹铃方式可采用以下两种方案一将闹钟信息存放在非易失储存器中。该方案即使在完全的掉电的情况下也不会造成闹钟信息的丢失,但该方案成本较高且难于实现。方案二将闹钟信息存放在单片机自带的存储器中。该方案成本低而且易于实现,但是一但掉电会造成之前信息的丢失。基于成本及易于实现的角度,我们选择方案二。315电源模块方案一采用干电池作为系统电源。但需经常换电池,不符合节约型社会的要求。方案二采用直流稳压电源作为系统主电源,干电池作为辅助电源。不仅不需要经常更换电源,并且当市电停止时能够采用干电池做为系统电源,使用更加安全可靠。基于以上分析,我们决定采用方案二32总体方案321工作原理本设计采用STC89C52RC单片机作为本系统的控制模块。单片机可把由DS18B20、DS1302、AT24C02中的数据利用软件来进行处理,从而把数据传输到显示模块,实现温度、日历和闹铃的显示。以LCD液晶显示器为显示模块,把单片机传来的数据显示出来,并且显示多样化。在显示电路中,主要靠按键来实现各种显示要求的选择与切换。322总体设计框图如图1第4章系统主要硬件简介41STC89C52RC单片机简介STC89C52RC单片机采用高性能的静态80C51设计,并采用先进工艺制造,还带有非易失去性FLASH程序储器。它是一种高性能、低功耗的8位CMOS微处理芯片,市场上应用最多。其主要性能如下8KBFLASHROM,可以擦除1000次以上,数据保存10年。256字节内部RAM。电源控制模式时钟可停止和恢复;空闲模式;掉电模式。6个中断源。4个中断优先级。4个8位I/O口。全双工增强型UART。3个16位定时器/计数器T0、T1、T2。全静态工作方式024MHZ42LCD1602简介421LCD简述LCD液晶显示器是LIQUIDCRYSTALDISPLAY的简称,LCD的构造是在两片平行的玻璃当中放置液态的晶体,两片玻璃中间有许多垂直和水平的细小电线,透过通电与否来控制杆状水晶分子改变方向,将光线折射出来产生画面。LCD可以分为为两种类型,一种是文字模式LCD,一种是绘图模式LCD。LCD1602属于字符型液晶,能够同时显示16X2即32个字符。可以与位CPU相联,指令功能强可以组合成各种输入、显示、移位方式以满足不同要求。显示黄绿带背光,显示对比度可以调节,正常工作电压(VDD)为V,工作电流约为MA不计背光功耗,同时可靠性高寿命达,小时()。422LCD1602特性具有如下特性5V供电,亮度可以调整。内藏振荡电路,系统内含重置电路。提供各种控制命令,如清除显示器、字符闪烁、光标闪烁、显示移位等多种功能显示数据RAM共有80个字节字符产生器ROM有60个57点阵字型。字符产生器RAM可由用户自行定义8个57的点阵字型。423LCD1602的引脚定义字符型LCD1602的引脚定义为下表1引脚号引脚名电平输入/输出作用1VSS电源地2VCC电源(5V)3VEE对比调整电压4RS0/1输入0输入指令1输出指令5R/W0/1输入0向LCD写入指令或数据1从LCD读取信息6E1,10输入使能信号,1是读取信息10(下降沿)执行指令714DB0DB70/1输入/输出数据总线15AVCCLCD背光源正极16K接地LCD背光源负极424LCD内部的内存LCD内部存储器共分三种,分别为CGROM、CGRAM和DDROM。CGROM内存储着192个57点阵的字型,这些字型均已固定。CGRAM此区域只有64个字节,可将用户将自行设计的字型写入LCD中,一个字的大小为57个点阵,共可存储8个字型,其显示码为00H到07H。DDRAM就是显示数据RAM,用来寄存待显示的字符代码。共80个字节,其地址和屏幕的对应关系如下表2显示位置123456740第一行00H01H02H03H04H05H06H27HDDRAM地址第二行40H41H42H43H44H45H46H67H也就是说想要在LCD1602屏幕的第一行第一列显示一个“A“字,就要向DDRAM的00H地址写入“A”字的代码就行了。425LCD控制指令LCD控制指令包含以下几项消除显示器,光标归位设置,设置字符进入模式,显示器开关,显示光标移位,功能设置,CGRAM、DDRAM地址设置等等。43DS1302简介DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟芯片,它可以对年、月、日、周日、时、分、秒进行计时,且具有闰年补偿功能,工作电压宽达2555V。时钟可工作在24小时格式或12小时(AM/PM)格式。DS1302与单片机的接口使用同步串行通信,仅用3条线与之相连接。可采用一次传送一个字节或突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力。431DS1302引脚功能与内部结构DS1302的引脚功能如表3所示,外形及内部结构如图2所示表3DS1302引脚功能表引脚号引脚名称功能1VCC2主电源2、3X1、X2振荡源,外接32768HZ晶振4GND地线5RST复位/片选线6I/O串行数据输入/输出端(双向)7SCLK串行时钟输入端8VCC1后备电源图2DS1302管脚图及内部结构图432DS1302的控制字DS1302的控制字节如图3所示图3DS1302控制字节的含义765432101RAMCKA4A3A2A1A0RAMK控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据位5至位1指示操作单元的地址最低有效位(位0)如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。433DS1302的复位引脚通过把输入驱动置高电平来启动所有的数据传送。输入有两种功能首先,接RSTRSTRST通控制逻辑,允许地址命令序列送入移位寄存器;其次,提供了终止单字节或多字节数据的传送手段。当为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程RST中置为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。上电运行时,在VCC25V之前,必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。434DS1302的数据输入输出在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302数据,读出数据时从低位0位至高位7,数据读写时序如图4所示图4数据读写时序435DS1302的寄存器DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字见表4。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;再一类再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。表4DS1302的日历、时钟寄存器及其控制字命令字各位内容寄存器名写操作读操作取值范围76543210秒寄存器80H81H0059CH10SECSEC分寄存器82H83H0059010MINMIN时寄存器84H85H0112或002312/24010HRHR7654107653210ADTI/OBYE2DTI/OBYERCR/WI/OSTCLK日寄存器86H87H0128,29,30,310010DATEDATE月寄存器88H89H011200010MMONTH第5章系统硬件设计51STC89C52RC单片机最小系统最小系统包括晶体振荡电路、复位开关和电源部分。图3为STC89C52RC单片机的最小系统。52温度测量模块温度测量传感器采用DALLAS公司DS18B20的单总线数字化温度传感器,测温范围为55125,可编程为9位12位A/D转换精度,测温分辨率达到00625,采用寄生电源工作方式,CPU只需一根口线便能与DS18B20通信,占用CPU口线少,可节省大量引线和逻辑电路。接口电路如图4所示。图4DS18B20测量电路53时钟模块周寄存器8AH8BH010700000DAY年寄存器8CH8DH009910YEARYEAR图3最小系统电路图时钟模块采用DS1302芯片,DS1302是DALLAS公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31字节静态RAM通过简单的串行接口与单片机进行通信实时时钟/日历电路提供秒分时日日期月年的信息每月的天数和闰年的天数可自动调整时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信仅需用到三个口线RST复位、I/O数据线、SCLK串行时钟。时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时功率小于1MW,其接线电路如图5图5时钟电路54LCD液晶显示模块LCD液晶显示模块采用LCD1602型号,具有很低的功耗,正常工作时电流仅20MA/50V。通过编程实现自动关闭屏幕能够更有效的降低功耗。LCD1602分两行显示,每行可显示多达16个字符。LCD1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,通过内部指令可实现对其显示多样的控制,并且还能利用空余的空间自定义字符。其接线如图7图7LCD显示电路55键盘模块它是整个系统中最简单的部分,根据功能要求,本系统共需四个按键功能移位键、功能加键、功能减键、立刻跳出调整模式键采用独立式按键。56系统电源双电源设计是本设计的重点。220V交流转5V直流稳压电源会更加安全、实用。当没有交流电时,系统采用干电池供电;当接通交流电时,则电路自动切换到交流电供电,并且对干电池进行慢性充电。电路图如图8图8电源电路57整体电路系统整体电路如图9所示图9系统总体电路图第六章系统软件设计61主程序流程如图10图10系统主程序流程62时间设定程序流程如图11图11显示时间子程序流程63温度测量流程图如图12图12温度测量程序流程图64闹铃设定流程图如图13图13闹铃设定程序流程图第6章备注71参考文献1求是科技单片机典型模块设计实例导航北京人民邮电出版社200582徐淑华,程退安等单片微型机原理及应用哈尔滨哈尔滨工业大学出版社200513孙余凯精选实用电子电路260例北京电子工业出版社200764殷春浩,崔亦飞电磁测量原理及应用徐州中国矿业大学出版社200375LCD1602A数据手册6DS1302数据手册7DS18B20数据手册72程序INCLUDEINCLUDE/INCLUDE“LCD1602H“/INCLUDE“DS1302H“DEFINEUINTUNSIGNEDINTDEFINEUCHARUNSIGNEDCHARSBITDS1302_CLKP17/实时时钟时钟线引脚SBITDS1302_IOP16/实时时钟数据线引脚SBITDS1302_RSTP15/实时时钟复位线引脚SBITWIRELESS_1P30SBITWIRELESS_2P31SBITWIRELESS_3P32SBITWIRELESS_4P33SBITACC0ACC0SBITACC7ACC7CHARHIDE_SEC,HIDE_MIN,HIDE_HOUR,HIDE_DAY,HIDE_WEEK,HIDE_MONTH,HIDE_YEAR/秒,分,时到日,月,年位闪的计数SBITSETP20/模式切换键SBITUPP21/加法按钮SBITDOWNP22/减法按钮SBITOUTP23/立刻跳出调整模式按钮SBITDQP10/温度传送数据IO口CHARDONE,COUNT,COUNT1,TEMP,FLAG,UP_FLAG,DOWN_FLAGCHARCLOCK_MINUTE,CLOCK_HOUR,CLOCK_DAYUCHARTEMP_VALUE/温度值UCHARTEMPBUFFER5,WEEK_VALUE2VOIDSHOW_TIME/液晶显示程序/1602液晶显示部分子程序/PORTDEFINITIONSSBITLCDRSP25SBITLCDRWP26SBITLCDENP27SFRDBPORT0X80/P00X80,P10X90,P20XA0,P30XB0数据端口/内部等待函数UNSIGNEDCHARLCD_WAITVOIDLCDRS0LCDRW1_NOP_LCDEN1_NOP_LCDEN0RETURNDBPORT/LCD写入命令或数据DEFINELCD_COMMAND0/COMMANDDEFINELCD_DATA1/DATADEFINELCD_CLEAR_SCREEN0X01/清屏DEFINELCD_HOMING0X02/光标返回原点VOIDLCD_WRITEBITSTYLE,UNSIGNEDCHARINPUTLCDEN0LCDRSSTYLELCDRW0_NOP_DBPORTINPUT_NOP_/注意顺序LCDEN1_NOP_/注意顺序LCDEN0_NOP_LCD_WAIT/设置显示模DEFINELCD_SHOW0X04/显示开DEFINELCD_HIDE0X00/显示关DEFINELCD_CURSOR0X02/显示光标DEFINELCD_NO_CURSOR0X00/无光标DEFINELCD_FLASH0X01/光标闪动DEFINELCD_NO_FLASH0X00/光标不闪动VOIDLCD_SETDISPLAYUNSIGNEDCHARDISPLAYMODELCD_WRITELCD_COMMAND,0X08|DISPLAYMODE/设置输入模DEFINELCD_AC_UP0X02DEFINELCD_AC_DOWN0X00/DEFAULTDEFINELCD_MOVE0X01/画面可平移DEFINELCD_NO_MOVE0X00/DEFAULTVOIDLCD_SETINPUTUNSIGNEDCHARINPUTMODELCD_WRITELCD_COMMAND,0X04|INPUTMODE/初始化LCDVOIDLCD_INITIALLCDEN0LCD_WRITELCD_COMMAND,0X38/8位数据端口,2行显示,57点阵LCD_WRITELCD_COMMAND,0X38LCD_SETDISPLAYLCD_SHOW|LCD_NO_CURSOR/开启显示,无光标LCD_WRITELCD_COMMAND,LCD_CLEAR_SCREEN/清屏LCD_SETINPUTLCD_AC_UP|LCD_NO_MOVE/AC递增,画面不动/液晶字符输入的位置VOIDGOTOXYUNSIGNEDCHARX,UNSIGNEDCHARYIFY0LCD_WRITELCD_COMMAND,0X80|XIFY1LCD_WRITELCD_COMMAND,0X80|X0X40VOIDPRINTUNSIGNEDCHARSTRWHILESTR0LCD_WRITELCD_DATA,STRSTRVOIDINITIAL_CLOCKCLOCK_DAY0CLOCK_HOUR0CLOCK_MINUTE0VOIDCLOCK_BEEPVOIDCLOCKIFCLOCK_DAYDS1302_DAY/DS1302时钟部分子程序/TYPEDEFSTRUCT_SYSTEMTIME_UNSIGNEDCHARSECONDUNSIGNEDCHARMINUTEUNSIGNEDCHARHOURUNSIGNEDCHARWEEKUNSIGNEDCHARDAYUNSIGNEDCHARMONTHUNSIGNEDCHARYEARUNSIGNEDCHARDATESTRING11UNSIGNEDCHARTIMESTRING9SYSTEMTIME/定义的时间类型SYSTEMTIMECURRENTTIMEDEFINEAMXXDEFINEPMXX12/转成24小时制DEFINEDS1302_SECOND0X80/时钟芯片的寄存器位置,存放时间DEFINEDS1302_MINUTE0X82DEFINEDS1302_HOUR0X84DEFINEDS1302_WEEK0X8ADEFINEDS1302_DAY0X86DEFINEDS1302_MONTH0X88DEFINEDS1302_YEAR0X8CVOIDDS1302INPUTBYTEUNSIGNEDCHARD/实时时钟写入一字节内部函数UNSIGNEDCHARIACCDFORI8I0IDS1302_IOACC0/相当于汇编中的RRCDS1302_CLK1DS1302_CLK0ACCACC1UNSIGNEDCHARDS1302OUTPUTBYTEVOID/实时时钟读取一字节内部函数UNSIGNEDCHARIFORI8I0IACCACC1/相当于汇编中的RRCACC7DS1302_IODS1302_CLK1DS1302_CLK0RETURNACCVOIDWRITE1302UNSIGNEDCHARUCADDR,UNSIGNEDCHARUCDADS1302_RST0DS1302_CLK0DS1302_RST1DS1302INPUTBYTEUCADDR/地址,命令DS1302INPUTBYTEUCDA/写1BYTE数据DS1302_CLK1DS1302_RST0UNSIGNEDCHARREAD1302UNSIGNEDCHARUCADDR/读取DS1302某地址的数据UNSIGNEDCHARUCDATADS1302_RST0DS1302_CLK0DS1302_RST1DS1302INPUTBYTEUCADDR|0X01/地址,命令UCDATADS1302OUTPUTBYTE/读1BYTE数据DS1302_CLK1DS1302_RST0RETURNUCDATAVOIDDS1302_GETTIMESYSTEMTIMETIME/获取时钟芯片的时钟数据UNSIGNEDCHARREADVALUEREADVALUEREAD1302DS1302_SECONDTIMESECONDREADVALUEREADVALUEREAD1302DS1302_MINUTETIMEMINUTEREADVALUEREADVALUEREAD1302DS1302_HOURTIMEHOURREADVALUEREADVALUEREAD1302DS1302_DAYTIMEDAYREADVALUEREADVALUEREAD1302DS1302_WEEKTIMEWEEKREADVALUEREADVALUEREAD1302DS1302_MONTHTIMEMONTHREADVALUEREADVALUEREAD1302DS1302_YEARTIMEYEARREADVALUEVOIDDATETOSTRSYSTEMTIMETIME/将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DATESTRINGIFHIDE_YEAR2就不显示,输出字符串为2007/07/22TIMEDATESTRING02TIMEDATESTRING10TIMEDATESTRING2TIMEYEAR/100TIMEDATESTRING3TIMEYEAR100ELSETIMEDATESTRING0TIMEDATESTRING1TIMEDATESTRING2TIMEDATESTRING3TIMEDATESTRING4/IFHIDE_MONTHDATESTRING5TIMEMONTH/100TIMEDATESTRING6TIMEMONTH100ELSETIMEDATESTRING5TIMEDATESTRING6TIMEDATESTRING7/IFHIDE_DAYDATESTRING8TIMEDAY/100TIMEDATESTRING9TIMEDAY100ELSETIMEDATESTRING8TIMEDATESTRING9IFHIDE_WEEKWEEK100/星期的数据另外放到WEEK_VALUE数组里,跟年,月,日的分开存放,因为等一下要在最后显示ELSEWEEK_VALUE0WEEK_VALUE10TIMEDATESTRING100/字符串末尾加0,判断结束字符VOIDTIMETOSTRSYSTEMTIMETIME/将时,分,秒数据转换成液晶显示字符IFHIDE_HOURTIMESTRING0TIMEHOUR/100TIMETIMESTRING1TIMEHOUR100ELSETIMETIMESTRING0TIMETIMESTRING1TIMETIMESTRING2IFHIDE_MINTIMESTRING3TIMEMINUTE/100TIMETIMESTRING4TIMEMINUTE100ELSETIMETIMESTRING3TIMETIMESTRING4TIMETIMESTRING5IFHIDE_SECTIMESTRING6TIMESECOND/100TIMETIMESTRING7TIMESECOND100ELSETIMETIMESTRING6TIMETIMESTRING7TIMEDATESTRING80VOIDINITIAL_DS1302VOID/时钟芯片初始化UNSIGNEDCHARSECONDREAD1302DS1302_SECONDIFSECOND/写入允许WRITE13020X8C,0X07/写入初始化值07/07/25星期3时间235955WRITE13020X88,0X07WRITE13020X86,0X25WRITE13020X8A,0X07WRITE13020X84,0X23WRITE13020X82,0X59WRITE13020X80,0X55WRITE13020X8E,0X80/禁止写入/DS18B20子程序/DS18B20延迟子函数(晶振12MHZ)/VOIDDELAY_18B20UNSIGNEDINTIWHILEI/DS18B20初始化函数/VOIDINIT_DS18B20VOIDUNSIGNEDCHARX0DQ1/DQ复位DELAY_18B208/稍做延时DQ0/单片机将DQ拉低DELAY_18B2080/精确延时大于480USDQ1/拉高总线DELAY_18B2014XDQ/稍做延时后如果X0则初始化成功X1则初始化失败DELAY_18B2020/DS18B20读一个字节/UNSIGNEDCHARREADONECHARVOIDUCHARI0UCHARDAT0FORI8I0IDQ0/给脉冲信号DAT1DQ1/给脉冲信号IFDQDAT|0X80DELAY_18B204RETURNDAT/DS18B20写一个字节/VOIDWRITEONECHARUCHARDATUNSIGNEDCHARI0FORI8I0IDQ0DQDATDELAY_18B205DQ1DAT1/读取DS18B20当前温度/VOIDREADTEMPVOIDUNSIGNEDCHARA0UNSIGNEDCHARB0UNSIGNEDCHART0INIT_DS18B20WRITEONECHAR0XCC/跳过读序号列号的操作WRITEONECHAR0X44/启动温度转换DELAY_18B20100/THISMESSAGEISWERYIMPORTANTINIT_DS18B20WRITEONECHAR0XCC/跳过读序号列号的操作WRITEONECHAR0XBE/读取温度寄存器两个就是温度DELAY_18B20100AREADONECHAR/读取温度值低位BREADONECHAR/读取温度值高位TEMP_VALUEB4VOIDTEMP_TO_STR/温度数据转换成液晶字符显示TEMPBUFFER0TEMP_VALUE/100/十位TEMPBUFFER1TEMP_VALUE100/个位TEMPBUFFER20XDF/温度符号TEMPBUFFER3CTEMPBUFFER40VOIDDELAY1MSUNSIGNEDINTCOUNTUNSIGNEDINTI,JFORI0I0DELAYFORI0I0X59/超过59秒,清零TEMP0BREAKCASE2TEMPREAD1302DS1302_MINUTE/读取分数TEMPTEMP1/分数加1UP_FLAG1IFTEMP0X59/超过59分,清零TEMP0BREAKCASE3TEMPREAD1302DS1302_HOUR/读取小时数TEMPTEMP1/小时数加1UP_FLAG1IFTEMP0X23/超过23小时,清零TEMP0BREAKCASE4TEMPREAD1302DS1302_WEEK/读取星期数TEMPTEMP1/星期数加1UP_FLAG1IFTEMP0X7TEMP1BREAKCASE5TEMPREAD1302DS1302_DAY/读取日数TEMPTEMP1/日数加1UP_FLAG1IFTEMP0X31TEMP1BREAKCASE6TEMPREAD1302DS1302_MONTH/读取月数TEMPTEMP1/月数加1UP_FLAG1IFTEMP0X12TEMP1BREAKCASE7TEMPREAD1302DS1302_YEAR/读取年数TEMPTEMP1/年数加1UP_FLAG1IFTEMP0X85TEMP0BREAKDEFAULTBREAKWHILEUP0WHILEWIRELESS_21VOIDDOWNKEY/降序按键DOWN1IFDOWN0|WIRELESS_31MDELAY8SWITCHCOUNTCASE1TEMPREAD1302DS1302_SECOND/读取秒数TEMPTEMP1/秒数减1DOWN_FLAG1/数据调整后更新标志IFTEMP0X7F/小于0秒,返回59秒TEMP0X59BREAKCASE2TEMPREAD1302DS1302_MINUTE/读取分数TEMPTEMP1/分数减1DOWN_FLAG1IFTEMP1TEMP0X59/小于0秒,返回59秒BREAKCASE3TEMPREAD1302DS1302_HOUR/读取小时数TEMPTEMP1/小时数减1DOWN_FLAG1IFTEMP1TEMP0X23BREAKCASE4TEMPREAD1302DS1302_WEEK/读取星期数TEMPTEMP1/星期数减1DOWN_FLAG1IFTEMP0TEMP0X7BREAKCASE5TEMPREAD1302DS1302_DAY/读取日数TEMPTEMP1/日数减1DOWN_FLAG1IFTEMP0TEMP31BREAKCASE6TEMPREAD1302DS1302_MONTH/读取月数TEMPTEMP1/月数减1DOWN_FLAG1IFTEMP0TEMP12BREAKCASE7TEMPREAD1302DS1302_YEAR/读取年数TEMPTEMP1/年数减1DOWN_FLAG1IFTEMP1TEMP0X85BREAKDEFAULTBREAKWHILEDOWN0WHILEWIRELESS_31VOIDUPKEY_CLOCK/升序按键UP1IFUP0|WIRELESS_21MDELAY8SWITCHCOUNT1CASE1CLOCK_MINUTECLOCK_MINUTE1UP_FLAG1IFCLOCK_MINUTEBREAKCASE2CLOCK_HOURCLOCK_HOUR1UP_FLAG1IFCLOCK_HOUR0X59CLOCK_HOUR0BREAKCASE3CLOCK_DAYCLOCK_DAY1UP_FLAG1IFCLOCK_DAY0X23CLOCK_DAY0BREAKVOIDDOWNKEY_CLOCK/降序按键DOWN1IFDOWN0|WIRELESS_31MDELAY8SWITCHCOUNT1CASE1CLOCK_MINUTECLOCK_MINUTE1DOWN_FLAG1IFCLOCK_MINUTE1CLOCK_MINUTE0X59BREAKCASE2CLOCK_HOURCLOCK_HOUR1DOWN_FLAG1IFCLOCK_HOUR1TEMP0X59BREAKCASE3CLOCK_DAYCLOCK_DAY1DOWN_FLAG1IFCLOCK_DAY0CLOCK_DAY31BREAKVOIDSETKEY/模式选择按键SET1IFSET0|WIRELESS_41MDELAY8COUNTCOUNT1/SETKEY按一次,COUNT就加1DONE1/进入调整模式WHILESET0WHILEWIRELESS_41VOIDCLOCK_ADJUSTSET1IFSET0|WIRELESS_41MDELAY8COUNT1COUNT11IFCOUNT13COUNT10DONE1/进入调整模式WHILESET0WHILEWIRELESS_41VOIDKEYDONE/按键功能执行UCHARSECONDIFFLAG0/关闭时钟,停止计时WRITE13020X8E,0X00/写入允许TEMPREAD13020X80WRITE13020X80,TEMP|0X80WRITE13020X8E,0X80/禁止写入FLAG1SETKEY/扫描模式切换按键SWITCHCOUNTCASE1DO/COUNT1,调整秒OUTKEY/扫描跳出按钮UPKEY/扫描加按钮DOWNKEY/扫描减按钮IFUP_FLAG1|DOWN_FLAG1/重新写入新的数据WRITE13020X8E,0X00/写入允许WRITE13020X80,TEMP|0X80/写入新的秒数WRITE13020X8E,0X80/禁止写入UP_FLAG0DOWN_FLAG0HIDE_SEC/位闪计数IFHIDE_SEC3HIDE_SEC0SHOW_TIME/液晶显示数据WHILECOUNT2BREAKCASE2DO/COUNT2,调整分HIDE_SEC0OUTKEYUPKEYDOWNKEYIFTEMP0X60TEMP0IFUP_FLAG1|DOWN_FLAG1WRITE13020X8E,0X00/写入允许WRITE13020X82,TEMP/写入新的分数WRITE13020X8E,0X80/禁止写入UP_FLAG0DOWN_FLAG0HIDE_MINIFHIDE_MIN3HIDE_MIN0SHOW_TIMEWHILECOUNT3BREAKCASE3DO/COUNT3,调整小时HIDE_MIN0OUTKEYUPKEYDOWNKEYIFUP_FLAG1|DOWN_FLAG1WRITE13020X8E,0X00/写入允许WRITE13020X

温馨提示

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

评论

0/150

提交评论