




已阅读5页,还剩31页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业设计基于单片机的数字时钟的设计1目录摘要1第一章引言2第二章方案要求与论证421设计要求422方案论证4第三章设计所用器件及硬件介绍531器件532硬件介绍5321AT89C525322DS1302633系统设计7331晶体振荡器电路7332分频器电路8333时间计数器电路8334内部时钟电路8335复位电路9336按键部分9第四章系统软件总体设计1141主程序流程图1142时钟模块程序设计11421单字节数据程序模块12422初始化设置程序模块1243按键处理13第五章总结14附录15参考文献32致谢332摘要本设计以数字集成电路技术为基础,单片机技术为核心。软件设计采用模块化结构,C语言编程。系统通过LCD显示数据,可以显示公历日期(年、月、日、时、分、秒)以及星期,并实现闹钟功能。在内容安排上首先描述系统硬件工作原理,着重介绍了各硬件接口技术和各个接口模块的功能;其次,详细的阐述了程序的各个模块和实现过程。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。本论文所做的数字时钟采用了以单片机(AT89C52)为核心,结合相关的外围元器件例如液晶显示、按键电路、复位电路、,再配以相应的软件,达到制作简易数字钟的目的,能实现实时时钟显示的功能,能进行年、月、日、时、分、秒的显示,并且有远程通信功能。其硬件部分难点在于元器件的选择、布局及焊接。关键词单片机万年历3第一章引言1课题的背景与意义近年来,随着电子产品的发展,随着社会竞争的激烈,人们对数字时钟的要求越来越高。时间对人们来说总是那么宝贵,工作的忙碌性和繁杂性容易使人忘记当前的时间,忘记了要做的事情,当事情不是很重要的时候,这种遗忘无伤大雅。但是,一旦重要事情,一时的耽误可能酿成大祸。因此从人们的日常生活到工厂的自动控制,从民用时钟到科学发展所需的时钟,现代人对时间的精度和观察时间的方便有了越来越多的需求。人们要求随时随地都能快速准确的知道时间,并且要求时钟能够更直观、更可靠、价格更便宜。这种要求催生了新型时钟的产生。除此之外,由于对社会责任的更多承担,人们要求所设计的产品能够产生尽量少的垃圾、能够消耗尽量少的能量。因此人们对时钟的又有了体积小、功耗低的要求。传统的机械表由于做工的高精细要求,造价的昂贵,材料的限制,时间指示精度的限制,使用寿命方面,以及其它方面的限制,已不能满足人们的需求。另外,近些年随着科技的发展和社会的进步,人们对时钟的要求也越来越高,而使得新型电子钟表成了大势所趋。20世纪末,电子技术获得了飞速的发展,在其推动下微机开始向社会各个领域渗透同时大规模集成电路获得了高速发展,单片机的应用正在不断地走向深入,由于它具有功能强,体积小,功耗低,价格便宜,工作可靠,使用方便等特点,因此特别适合于与控制有关的系统,越来越广泛地应用于自动控制,4智能化仪器,仪表,数据采集,军工产品以及家用电器等各个领域,单片机往往是作为一个核心部件来使用,在根据具体硬件结构,以及针对具体应用对象特点的软件结合,以作完善。另外单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命。单片机模块中最常见的是数字钟,数字钟是一种用数字电路技术实现时、分、秒计时的装置,与机械式时钟相比具有更高的准确性和直观性,且无机械装置,具有更更长的使用寿命,因此得到了广泛的使用。这正符合了现代时钟的设计要求。另一方面,电子技术的告诉发展,有力地推动了社会生产力的发展和社会信息化程度的提高,这些使时间显得更加宝贵,从时间就是生命,时间就是效率这些名言警句中就能看出。数字钟是采用数字电路实现对时,分,秒数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中的必需品,因此本论文所做的数字时钟采用了以单片机(AT89C52)为核心,结合相关的外围元器件例如液晶显示、按键电路、复位电路,再配以相应的软件,达到制作简易数字钟的目的,能实现实时时钟显示的功能,能进行年、月、日、时、分、秒的显示,并且有远程通信功能。其硬件部分难点在于元器件的选择、布局及焊接。2课题任务与设计思路时间是两时刻之间的时刻间隔,是一种最基本的环境参数,人们的生活与时间息息相关,在工业生产过程中需要实时地观察时间,设定时间,因此研究时间的测量方法和设计测量装置具有重要的意义。鉴于时间使用的普遍性和重要性,本课题选用时间作为实时监测的参量。本课题设计单片机与时钟芯片相结合的电路,实现实时显示时间,并能够进行远程通信,实现数据与电脑的交换。按照课题的要求,初步确定设计系统由主控模块、时钟模块、显示模块、键扫描电路模块共4个模块组成。设计AT89C52系列单片机,以汇编语言为程序设计的基础,设计出用液晶显示年、月、日、周、时、分、秒的时钟。5第二章方案论证与设计21设计要求本设计准备实现的功能1显示公历日期功能(年、月、日、时、分、秒以及星期)2可通过按键切换年、月、日及时、分、秒的显示状态3可随时调校年、月、日或时、分、秒4可动态完整显示年份,实现真正的万年历显示5可实现闹钟功能22方案论证单片机微型计算机是微型计算机的一个重要分支,也是颇具生命力的机种。单片机微型计算机简称单片机,特别适用于控制领域,故又称为微控制器。通常,单片机由单块集成电路芯片构成,内部包含有计算机的基本功能部件中央处理器、存储器和I/O接口电路等。因此,单片机只需要和适当的软件及外部设备相结合,便可成为一个单片机控制系统。单片机经过1、2、3、3代的发展,正朝着多功能、高性能、低电压、低功耗、低价格、大存储容量、强I/O功能及较好的结构兼容性方向发展。凌阳16位单片机有丰富的中断源准确度相当高,并且C语言和汇编兼容的编程环境也很方便来实现一些递归调用。I/O口功能也比较强大,方便使用。6用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善。成本也相对低一些。但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高,而且就需要完成万年历这个不太复杂的设计可以不必用凌阳16位单片机来完成,采用单片机既能够实现既定功能,成本也不高。综合考虑最后选择用单片机来作为中心控制器件。传统的数据记录方式是隔时采样或定时采样,没有具体的时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1288,则能很好地解决这个问题。第三章设计所用器件及硬件介绍31器件6V电源;单片机1个;液晶显示器THS12864121个;DS13021个;DHT211个;电阻10K的滑动变阻器1个、1K的电阻的2个、2K的1个、排阻1个、导线若干;晶振12M的一个32768K的一个;电容(30P的4个);22PF电容2个、100PF的电解电容1个、轻触开关6个、发光二极管2个;32硬件介绍321AT89C52本设计采用的是PDIP封装40管脚的单片机,各引脚如图31所示。40个引脚中,4组8位共32个I/O口,正电源和地线两根,外置石英振荡器的时钟线两根,现在对这些引脚的功能加以说明7(1)PIN9RESET/VPP复位信号复用脚,当AT89C52通电,时钟电路开始工作,在RESET引脚上出现24个时钟周期以上的高电平,系统开始复位。而RESET由高电平下降为低电平后,系统即从0000H地址单元开始执行程序。(2)PIN29PESN当访问外部程序存储器时,此脚输出负脉冲选通信号,外部程序存储器则把指令数据放到P0口上,由CPU读入并执行。(3)PIN30ALE/PROG地址锁存允许信号端。单片机上电后,ALE引脚不断向外输出正脉冲信号,ALE信号可以用作对外输出时钟或定时信号。(4)PIN31EA/VPP程序存储器的内外部选通线,89C52单片机,内置有4KB的程序存储器,当EA为高电平并且程序地址小于4KB时,读取内部程序存储器指图31AT89C52的PDIP封装引脚图令数据,而超过4KB地址则读取外部指令数据。如EA为低电平,则不管地址大小,一律读取外部程序存储器指令322THS1286412A简介1概述带中文字库的1286412A是一种具有4位/8位并行、2线或3线串行多种接口方式,内部含有国标一级、二级简体中文字库的点阵图形液晶显示模块;其显示分辨率为12864,内置8192个1616点汉字,和128个168点ASCII字符集利用该模块灵活的接口方式和简单、方便的操作指令,可构成全中文人8机交互图形界面。可以显示84行1616点阵的汉字也可完成图形显示低电压低功耗是其又一显著特点。由该模块构成的液晶显示方案与同类型的图形点阵液晶显示模块相比,不论硬件电路结构或显示程序都要简洁得多,且该模块的价格也略低于相同点阵的图形液晶模块2基本特性(1)低电源电压(VDD3055V)(2)显示分辨率12864点(3)内置汉字字库,提供8192个1616点阵汉字简繁体可选(4)内置128个168点阵字符(5)2MHZ时钟频率(6)显示方式STN、半透、正显(7)驱动方式1/32DUTY,1/5BIAS(8)视角方向6点(9)背光方式侧部高亮白色LED,功耗仅为普通LED的1/51/10(10)通讯方式串行、并口可选(11)内置DCDC转换电路,无需外加负压(12)无需片选信号,简化软件设计(13)工作温度055,存储温度20603模块接口说明32表一管脚号管脚名称电平管脚功能描述1VSS0V电源地2VCC305V电源正3V0对比度(亮度)调整4RSCS)H/LRS“H”,表示DB7DB0为显示数据RS“L”,表示DB7DB0为显示指令数据5R/WSIDH/LR/W“H”,E“H”,数据被读到DB7DB0R/W“L”,E“HL”,DB7DB0的数据被写到IR或DR6ESCLKH/L使能信号7DB0H/L三态数据线8DB1H/L三态数据线9DB2H/L三态数据线10DB3H/L三态数据线11DB4H/L三态数据线12DB5H/L三态数据线13DB6H/L三态数据线14DB7H/L三态数据线15PSBH/LH8位或4位并口方式,L串口方式(见注释1)916NC空脚17/RESETH/L复位端,低电平有效(见注释2)18VOUTLCD驱动电压输出端19AVDD背光源正端(5V)(见注释3)20KVSS背光源负端(见注释3)注释1如在实际应用中仅使用串口通讯模式,可将PSB接固定低电平,也可以将模块上的J8和“GND”用焊锡短接。注释2模块内部接有上电复位电路,因此在不需要经常复位的场合可将该端悬空。注释3如背光和模块共用一个电源,可以将模块上的JA、JK用焊锡短接。33系统设计331晶体振荡器电路晶体振荡器电路给数字钟提供一个频率稳定准确的32768HZ的方波信号,可保证数字钟的走时准确及稳定。不管是指针式的电子钟还是数字显示的电子钟都使用图32晶振电路了晶体荡器电路。本设计中的震荡电路如图32所示332分频器电路10分频器电路将高频方波信号经分频后得到1HZ的方波信号供秒计数器进行计数,分频器实际上也就是计数器。333时间计数器电路时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器及时个位和时十位计数器电路构成,其中秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器而根据设计要求,时个位和时十位计数器为12进制计数器。图33内部时钟电路334内部时钟电路内部时钟电路如图33所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHZ,电容采用30PF335复位电路MCS51单片机的复位是由外部的复位电路来实现的。复位引脚RST通过一个斯密特触发器与复位电路相连,斯密特触发器用来抑制噪声,在每个机器周期的S5P2,斯密特触发器的输出电平由复位电路采样一次,然后才能得到内部复位操作所需要的信号。上电复位上电复位电路是种简单的复位电路,只要在RST复位引脚接一个电容到VCC,接一个电阻到地就可以了。上电复位是指在给系统上电时,复位电路通过电容加到RST复位引脚一个短暂的高电平信号,这个复位信号随着VCC对电容的充电过程而回落,所以RST引脚复位的高电平维持时间取决于电容的充电时间。为了保证系统安全可靠的复位,RST引脚的高电平信号必须维持足够长的时间。11图34复位电路RC上电自动复位是通过外部复位电路的电容充电来实现的。只要VCC的上升时间不超过1MS,就可以实现自动上电复位。电路如图34所示336按键部分本设计总的用了五个按扭开关作为键盘,用于调整时间和设置状态。电路如图35按键电路图35所示12第四章系统软件总体设计1341主程序流程图图41系统流程框图42时钟模块程序设计DS1302是一块精度高,功耗小,运行时间长的始终芯片,适用于时间显示。该芯片线路简单、体积小,易于操作,DS1302与单片机之间能简单的采用同步串行方式进行通信,仅需用到三个口线(1)RES(复位),(2)I/O(数据线),(3)SCLK(串行时钟)。X1和X2是振荡源,外接32768KHZ晶振。RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在VCC20V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。其总的流程图如图42所示14图42DS1302程序流程图在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。DS1302的程序设计包含有写单字节数据程序模块、读单字节数据程序模块、初始化设置程序模块。421单字节数据程序模块该程序模块是对DS1302进行写一个字节数据的子程序,其工作方式先给RST端口一个低信号,禁止数据传递。然后拉低SCLK,确保写数据前SCLK被拉低,升高RST,延时2US,稍微等待,使硬件做好准备。取出DAT的第0位数据写入1302,稍微延时等待,使硬件做好准备,拉高SCLK,上升沿写入数据,再稍微等待,重新拉低SCLK,形成脉冲将DAT的各数据位右移1位,准备写入下一个数据位。循环八次,传送一个字节。422初始化设置程序模块该程序模块是对DS1302进行初始化,根据写状态寄存器命令字,写入不保护指令,然后分别对秒、分、时、日、月、周、年进行初始化,初始化结束后,15写入保护指令。流程图如43所示。图43DS1302初始化流程图43按键处理当系统在正常显示状态下要进行调整时,按一下切换键进入按键处理中断程序,并且此时默认的是调整年,在液晶显示器上显示N,此时按加或减按钮可以进行加减调整,若再按一下切换键,则跳到月上显示Y,同样可以调整加减,同样的道理,进入日R、时S、分F、秒M的调整,最后再按一下切换键时退出中断程序,星期系统自动的调整过来。16第五章总结毕业设计的数字钟是采用数字电路实现对时,分,秒数字显示的计时装置,广泛用于个人家庭,车站,码头办公室等公共场所,成为人们日常生活中的必需品,因此本论文所做的数字时钟采用了以单片机(AT89C52)为核心,结合相关的外围元器件例如液晶显示、按键电路、复位电路,再配以相应的软件,达到制作简易数字钟的目的,能实现实时时钟显示的功能,能进行年、月、日、时、分、秒的显示,并且有远程通信功能。这次毕业设计,让我学到了很多有用的知识和加强了能力,让我知道了STC89C52在整个时钟电路中的作用以及各部分电路的原理,更是看到了上拉电阻的作用,可谓受益匪浅,当然也发现自己许多不足之处,尤其是在理论与实践中脱节。也体会到其实自己想到的并不一定是自己能够轻易做到的,凡事都要靠自己的不断实践,进而将自己的实践水平不断提高到相应的理论水平上来,当然自己的理论知识也不够火候,还得努力加强。这次毕业设计明白其实动手操作是以牢固的理论知识为基础的。因而这就要求我更加努力去学好课本知识。17附录程序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,TEMP,FLAG,UP_FLAG,DOWN_FLAGUCHARTEMP_VALUE/温度值UCHARTEMPBUFFER5,WEEK_VALUE2VOIDSHOW_TIME/液晶显示程序/1602液晶显示部分子程序/PORTDEFINITIONSSBITLCDRSP25SBITLCDRWP26SBITLCDENP27SFRDBPORT0X80/P00X80,P10X90,P20XA0,P30XB0数据端口/内部等待函数UNSIGNEDCHARLCD_WAITVOIDLCDRS0LCDRW1_NOP_18LCDEN1_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/DEFAULT19VOIDLCD_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|X0X40/将字符输出到液晶显示VOIDPRINTUNSIGNEDCHARSTRWHILESTR0LCD_WRITELCD_DATA,STRSTR/DS1302时钟部分子程序/TYPEDEFSTRUCT_SYSTEMTIME_UNSIGNEDCHARSECONDUNSIGNEDCHARMINUTEUNSIGNEDCHARHOURUNSIGNEDCHARWEEKUNSIGNEDCHARDAYUNSIGNEDCHARMONTHUNSIGNEDCHARYEAR20UNSIGNEDCHARDATESTRING11UNSIGNEDCHARTIMESTRING9SYSTEMTIME/定义的时间类型SYSTEMTIMECURRENTTIMEDEFINEAMXXDEFINEPMXX12/转成24小时制DEFINEDS1302_SECOND0X80/时钟芯片的寄存器位置,存放时间DEFINEDS1302_MINUTE0X82DEFINEDS1302_HOUR0X84DEFINEDS1302_WEEK0X8ADEFINEDS1302_DAY0X86DEFINEDS1302_MONTH0X88DEFINEDS1302_YEAR0X8CVOIDDS1302INPUTBYTEUNSIGNEDCHARD/实时时钟写入一字节内部函数UNSIGNEDCHARIACCDFORI8I0IDS1302_IOACC0/相当于汇编中的RRCDS1302_CLK1DS1302_CLK0ACCACC1UNSIGNEDCHARDS1302OUTPUTBYTEVOID/实时时钟读取一字节内部函数UNSIGNEDCHARIFORI8I0IACCACC1/相当于汇编中的RRCACC7DS1302_IODS1302_CLK1DS1302_CLK0RETURNACCVOIDWRITE1302UNSIGNEDCHARUCADDR,UNSIGNEDCHARUCDA/UCADDRDS1302地址,UCDATA要写的数据DS1302_RST0/WRITE13020X8E,0X00DS1302_CLK0DS1302_RST1DS1302INPUTBYTEUCADDR/地址,命令DS1302INPUTBYTEUCDA/写1BYTE数据21DS1302_CLK1DS1302_RST0UNSIGNEDCHARREAD1302UNSIGNEDCHARUCADDR/读取DS1302某地址的数据UNSIGNEDCHARUCDATADS1302_RST0DS1302_CLK0DS1302_RST1DS1302INPUTBYTEUCADDR|0X01/地址,命令UCDATADS1302OUTPUTBYTE/读1BYTE数据DS1302_CLK1DS1302_RST0RETURNUCDATAVOIDDS1302_GETTIMESYSTEMTIMETIME/获取时钟芯片的时钟数据到自定义的结构型数组UNSIGNEDCHARREADVALUEREADVALUEREAD1302DS1302_SECONDTIMESECONDREADVALUE/高三位取出读出乘READVALUEREAD1302DS1302_MINUTETIMEMINUTEREADVALUEREADVALUEREAD1302DS1302_HOURTIMEHOURREADVALUEREADVALUEREAD1302DS1302_DAYTIMEDAYREADVALUEREADVALUEREAD1302DS1302_WEEKTIMEWEEKREADVALUEREADVALUEREAD1302DS1302_MONTHTIMEMONTHREADVALUEREADVALUEREAD1302DS1302_YEARTIMEYEARREADVALUEVOIDDATETOSTRSYSTEMTIMETIME/将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里DATESTRINGIFHIDE_YEAR2就不显示,输出字符串为2007/07/22TIMEDATESTRING02TIMEDATESTRING10TIMEDATESTRING2TIMEYEAR/100TIMEDATESTRING3TIMEYEAR10022ELSETIMEDATESTRING0TIMEDATESTRING1TIMEDATESTRING2TIMEDATESTRING3TIMEDATESTRING4/IFHIDE_MONTHDATESTRING5TIMEMONTH/100TIMEDATESTRING6TIMEMONTH100ELSETIMEDATESTRING5TIMEDATESTRING6TIMEDATESTRING7/IFHIDE_DAYDATESTRING8TIMEDAY/100TIMEDATESTRING9TIMEDAY100ELSETIMEDATESTRING8TIMEDATESTRING9IFHIDE_WEEKWEEK100/星期的数据另外放到WEEK_VALUE数组里,跟年,月,日的分开存放,因为等一下要在最后显示ELSEWEEK_VALUE0WEEK_VALUE10TIMEDATESTRING100/字符串末尾加0,判断结束字符VOIDTIMETOSTRSYSTEMTIMETIME/将时,分,秒数据转换成液晶显示字符放到数组TIMESTRINGIFHIDE_HOURTIMESTRING0TIMEHOUR/100TIMETIMESTRING1TIMEHOUR100ELSETIMETIMESTRING0TIMETIMESTRING1TIMETIMESTRING2IFHIDE_MINTIMESTRING3TIMEMINUTE/100TIMETIMESTRING4TIMEMINUTE100ELSETIMETIMESTRING3TIMETIMESTRING4TIMETIMESTRING5IFHIDE_SECTIMESTRING6TIMESECOND/100TIMETIMESTRING7TIMESECOND100ELSETIMETIMESTRING6TIMETIMESTRING7TIMEDATESTRING80VOIDINITIAL_DS1302VOID/时钟芯片初始化UNSIGNEDCHARSECONDREAD1302DS1302_SECONDIFSECOND/写入允许WRITE13020X8C,0X07/以下写入初始化时间日期07/07/25星期3时间235955WRITE13020X88,0X07WRITE13020X86,0X25WRITE13020X8A,0X07WRITE13020X84,0X23WRITE13020X82,0X5924WRITE13020X80,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写一个字节/VOIDWRITEONECHARUCHARDAT25UNSIGNEDCHARI0FORI8I0IDQ0DQDATDELAY_18B205DQ1DAT1VOIDMDELAYUINTDELAYUINTIFORDELAY0DELAYFORI0I0X59/超过59秒,清零26TEMP0BREAKCASE2TEMPREAD1302DS1302_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/年数加127UP_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/读取28星期数TEMPTEMP1/星期数减1DOWN_FLAG1IFTEMP0TEMP0X7BREAKCASE5TEMPREAD1302DS1302_DAY/读取日数TEMPTEMP1/日数减1DOWN_FLAG1IFTEMP0TEMP31BREAKCASE6TEMPREAD1302DS1302_MONTH/读取月数TEMPTEMP1/月数减1DOWN_FLAG1IFTEMP0TEMP12BREAKCASE7TEMPREAD1302DS1302_YEAR/读取年数TEMPTEMP1/年数减1DOWN_FLAG1IFTEMP1TEMP0X85BREAKDEFAULTBREAKWHILEDOWN0WHILEWIRELESS_31VOIDSETKEY/模式选择按键SET1IFSET0|WIRELESS_41MDELAY8COUNTCOUNT1/SETKEY按一次,COUNT就加1DONE1/进入调整模式29WHILESET0WHILEWIRELESS_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_FLAG130WRITE13020X8E,0X00/写入允许WRITE13020X82,TEMP/写入新的分数WRITE13020X8E,0X80/禁止写入UP_FLAG0DOWN_FLAG0HIDE_MINIFHIDE_MIN3HIDE_MIN0SHOW_TIMEWHILECOUNT3BREAKCASE3DO/COUNT3,调整小时HIDE_MIN0OUTKEYUPKEYDOWNKEYIFUP_FLAG1|DOWN_FLAG1WRITE13020X8E,0X00/写入允许WRITE13020X84,TEMP/写入新的小时数WRITE13020X8E,0X80/禁止写入UP_FLAG0DOWN_FLAG0HIDE_HOURIFHIDE_HOUR3HIDE_HOUR0SHOW_TIMEWHILECOUNT4BREAKCASE4DO/COUNT4,调整星期HIDE_HOUR0OUTKEYUPKEYDOWNKEYIFUP_FLAG1|DOWN_FLAG1WRITE13020X8E,0X00/写入允许WRITE13020X8A,TEMP/写入新的星期数WRITE13020X8E,0X80/禁止写入UP_FLAG0DOWN_FLAG0HIDE_WEEK31IFHIDE_WEEK3HIDE_WEEK0SHOW_TIMEWHILECOUNT5BREAKCASE5DO/COUNT5,调整日HIDE_WEEK0OUTKEYUPKEYDOWNKEYIFUP_FLAG1|DOWN_FLAG1WRITE13020X8E,0X00/写入允许WRITE13020X86,TEMP/写入新的日数WRITE13020X8E,0X80/禁止写入UP_FLAG0DOWN_FLAG0HIDE_DAYIFHIDE_DAY3HIDE_DAY0SHOW_TIMEWHILECOUNT6BREAKCASE6D
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025英大证券有限责任公司高校毕业生招聘约1人(第二批)笔试参考题库附带答案详解
- 2025浙江温州市国资委公开遴选市属国有企业外部董事专家库人选40人笔试参考题库附带答案详解
- 2025江苏无锡市宜兴市宜能实业有限公司招聘线路设计辅助人员2人笔试参考题库附带答案详解
- 2025广西文化产业集团有限公司春季招聘36人笔试参考题库附带答案详解
- 2025年合肥高新美城物业有限公司招聘30人笔试参考题库附带答案详解
- 2025年中国邮政集团有限公司甘肃省分公司春季校园招聘笔试参考题库附带答案详解
- 卸料安全培训课件
- 2025山东省国际信托股份有限公司社会招聘8人笔试参考题库附带答案详解
- 2025安徽蚌埠市城市投资控股集团有限公司所属公司社会招聘11人笔试参考题库附带答案详解
- 2025四川成都三和来科技有限公司招聘50人笔试参考题库附带答案详解
- 陪诊服务培训课件模板
- 严禁管制刀具进校园主题班会课件
- 2024年山东省春季高考技能考试汽车专业试题库-上(单选题汇总)
- 国庆、中秋双节前安全排查记录
- 八年级上学期轴对称练习题
- 双姿培训课件
- GB/Z 41082.2-2023轮椅车第2部分:按GB/Z 18029.5测得的尺寸、质量和操作空间的典型值和推荐限制值
- 实施项目经理岗位的工作职责描述
- 中频操作评分标准
- 生活中的理财原理知到章节答案智慧树2023年暨南大学
- GB/T 22588-2008闪光法测量热扩散系数或导热系数
评论
0/150
提交评论