基于STC89C52的多功能实时时钟_第1页
基于STC89C52的多功能实时时钟_第2页
基于STC89C52的多功能实时时钟_第3页
基于STC89C52的多功能实时时钟_第4页
基于STC89C52的多功能实时时钟_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计课程名称单片机题目名称 基于STC89C52的多功能实时时钟学生学院材料与能源学院一 专业班级1、k 0 1、k-、k-、1、b 、学生姓名指导教师刘俊2012 年 01 月 04日-摘要_随着社会发展需求的改变,万年历是一个应用非常广泛的实用日常计时工 具,带有显示年、月、日、星期、时、分、秒、秒表和按键可调时间及其按键设 置闹钟的功能,同时具有月末自动更新,闰年补偿功能等多种功能。此系统是基 于STC89C52单片机设讣的,包含液晶显示模块,DS1302实时时钟模块,DS18B20 温度采集模块,键盘扫描模块,发声模块。STC89C52作为控制核心,具有功耗 低,功能强等特点,电压

2、可选3到5V电源供电。显示模块采用1602液晶动态显 示,相对数码管而言经济实用,占用空间小,对于显示数字、字母最为合适,而 且与单片机连线简单,占用10 口相对较少。实时时钟芯片DS1302提供RTC/B 历、定时闹钟等功能,如果检测到主电源故障,该器件可自动切换到备用电源供 电,DS1302将石英晶体与电池集成在一起,在断电后仍可精确走1年。温度检 测模块采用数字式温度传感器DS18B20,该芯片具有精度高,测量范围广等优点, 易与单片机连接,模块电路组成简单。钟表的数字化给人们生产生活带来了极大的方便,在此基础上完成的万年历 精度高,功能易于扩展。可扩展成为诸如定时自动报警、按时自动打铃

3、、时间程 疗;自动控制、定时广播、自动起闭路灯、定时开关烘箱、通断动力设备、棋至各 种定时电气的自动启用等电路。关键词:STC89C52、DS1302、DS18B20、1602液晶显示、实时时钟、温度测目录一第一章设计要求与方案论证-1-1.1 基本要求-1-1. 2扩展功能 -1-1.3系统方案选择和论证-1-1.3.1总系统方案-1-1. 3. 2 芯片方案选择和确定-1-1.3. 2.1 STC89C52简介-1-1.3. 2.2 DS1302 时钟芯片-2-1. 3. 2. 3 温度传感器 DS18B20-2 -1.3. 2.4 LCD1602- 3-第二章硬件设计和实现-3-2.1系

4、统设计-3-2. 1. 1系统设计框图-3-2.1.2系统硬件需求介绍-3-2. 2系统硬件各模块作用-4-2. 2.1单片机模块-4-2. 2. 2实时时钟模块-5-2. 2. 3温度传感模块-5-2. 2.4液晶显示模块-7-2. 2. 5矩阵键盘模块-10-2. 2.6发声模块-10-2. 2.7电源模块-10-2.3系统电路图设计-11-2. 3.1系统总原理图及连线-11-第三章 软件设计与分析-11-3. 1 主程序流程图-12-第四章系统测试-12-4. 1 功能测试-12-第五章设计总结和心得-12-5.1 设计总结与心得-13-5. 1. 1本设计的创新点与未来功能扩展-13

5、-5.2 设计心得-13-第六章参考文献-13-6.1 参考文献-13-附录一:程序淸单-15-附录二:实物图片-33-第一章设计要求与方案论证1.1基本要求:(1) :设计能支持年、月、日、星期、时、分、秒的时钟,有时间调整功能及闹钟功能。(2) :时钟附带有一个温度讣功能,温度检测精度高于2度,显示精度为1度。(3) :时钟具有装卸电池时掉电保护功能,保护时间大于5分钟。(4) :功耗小于 0. 5mA/5Vo1.2扩展功能(1) :提高温度转换精度,在0、99度时显示度。(2) :实现双电源供电(220V及电池供电)。(3) :能够提供生日提醒指示;能够每天提供3个时间点的闹钟报时功能。

6、(4) :非接触止闹功能1.3系统方案选择和论证1. 3.1总系统方案方案一:直接利用单片机系统的定时器进行定时计数来实现电子时钟和万年历,通 过温度传感器来实现温度的测量,数据全部存储在单片机RAH中,通过单片机I/O 口上 设置按键,来调整时间。方案二:利用单片机作为控制核心,配以实时时钟芯片,山单片机读取实时时钟芯 片内的时间寄存器,经过格式转换和其他的相关处理后,送到显示部分;配以数字温度 传感器,直接读取转换过的数字温度值,根据精度要求进行相关运算后,也送到显示部 分;配以EEPR0M,保存闹钟数据,系统掉电重启后原来设置的闹钟不会丢失。在单片机 的I/O 口上设置按键,用来调整时间

7、、闹钟等。方案比较及确定:都是利用单片机作为控制核心,方案一的数据保存在RAM中,系统掉 电后,将会丢失数据;方案二则是时钟芯片中,具有掉电数据保存功能,而且可以在显 示时间的同时准确外部事件的发生时间。综上所述,我们采用方案二实现系统总体要求。1.3.2芯片方案选择和确定1. 3. 2.1 STC89C52 简介STC89C52单片机作为核心控制体,该单片机具有高可靠,超低价,低功耗,无法解 密等优点。该单片机属于双列直插式封装的PDI40 口管脚。具有4个输入输出端口,分 别为PORTO、PROT1、PROT2、PROT3,其中P0 口是一组8位漏极开路型双向10 口,校验 时,要求接上拉

8、电阻。其他三个内部有30K的电阻,所以不用再外接电阻。此单片机具 有6个中断,其中包括三个定时器中断,二个外部中断,一个串口中断,为全双工通信 口。内部有静态非易失EEPROM和看门狗。片内含SKbbytes的可反复擦写的只读程序存 储器(PEROH)和256bytes的随机存取数据存储器(RAM),功能强大,适合许多较为复 杂的控制应用场合。相比较其他芯片来说比较适合学生试验所用,故釆用此单片机作为 核心控制芯片。1.3. 2.2 DS1302 时钟芯片DS1302是美国DALLAS公司推出的一种高性能、低功耗、带RAM的实时时钟电路, 它可以对年、月、日、周日、时、分、秒进行计时,具有闰年

9、补偿功能,工作电压为2. 5V 5.5V。釆用三线接口与CPU进行同步通信,并可采用突发方式一次传送多个字节的时钟 信号或RAM数据cDS1302内部有一个31X8的用于临时性存放数据的RAM寄存器oDS1302 是DS1202的升级产品,与DS1202兼容,但增加了主电源/后备电源双电源引脚,同时提 供了对后备电源进行涓细电流充电的能力。DS1302可以用于数据记录,特别是对某些具 有特殊意义的数据点的记录,能实现数据与出现该数据的时间同时记录。这种记录对长 时间的连续测控系统结果的分析及对异常数据出现的原因的查找具有重要意义。传统的 数据记录方式是隔时采样或定时采样,没有具体的时间记录,因

10、此,只能记录数据而无 法准确记录其出现的时间;若采用单片机计时,一方面需要采用计数器,占用硬件资源, 另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不 允许。但是,如果在系统中釆用时钟芯片DS1302,则能很好地解决这个问题。DS1302 可以用于数据记录,特别是对某些具有特殊意义的数据点的记录,能实现数据与出现该 数据的时间同时记录。这种记录对长时间的连续测控系统结果的分析及对异常数据出现 的原因的查找具有重要意义。传统的数据记录方式是隔时采样或定时釆样,没有具体的 时间记录,因此,只能记录数据而无法准确记录其出现的时间;若采用单片机讣时,一 方面需要釆用计数器,

11、占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片 机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片DS1302, 则能很好地解决这个问题。1. 3. 2. 3 温度传感器DS18B20DS18B20是数字式温度传感器,釆用单总线通信协议。DS18B20具有体积小,硬 件开销低,抗干扰能力强,精度高附加功能强,封装形式多样等特点。适合各种狭小 空间内设备的数字测温和控制。同时单线可挂接多个元件,因为每个元件都有唯一的 一个64位光刻ROM编码,家族码为28H,可以多个也可单个操作。电压测量范圉是3. 0V 到5.5V。内部含有EEPROH,其报警上、下限温度值和设定

12、的分辨率倍数在芯片掉电的 情况不丢失。并且内部带有AD转换电路,技术较为成熟,所以采用此芯片最为合适。1. 3. 2. 4 LCD16021602液晶应用非常广泛,操作简单,功能强大,采用1602液晶显示各种数字信息 最为合适,通过对单片机的编程来控制DS1302和DS18B20芯片的读写操作来获取相应的 信息,再通过对液晶的编程控制将获取到的信息通过一系列转换从而显示到1602液晶 上。最后达到有实时时钟、万年历、温度测量、秒表、闹钟等功能。系统论证时通过在 单片机学习板上的试验操作,能够达到预期的效果!第二章硬件设计和实现2.1系统设计2.1.1系统设计框图根据系统总体要求,将系统分为若干

13、模块,完成多项功能。按照系统设计功能的要求,以单片机为核心,共六个模块组成,即:单片机模块、实时时钟模块、显示模块、矩阵键盘模块、温度传感模块和发声模块,电路系统构成框 图如图1所示。图1系统框图2. 1. 2系统硬件需求介绍STC89C52单片机一片,DS1302实时时钟芯片一个,DS18B20数字式温度传感器个,+5V无源蜂鸣器一个,11.0592MHZ和32. 782MHZ晶振各一个,多个按键和开关,常 用电容电阻,连接线,三极管若干,滑动变阻器一个。2.2系统硬件各模块作用2. 2.1单片机模块核心控制器件选用STC89C52单片机。STC89C52单片机为40管脚双列直插芯片,它是一

14、种高性能,低功耗的8位CMOS微处理器芯片,市场应用最多。而且价格便宜,控 制方便,便于应用有4个I/O 口分别为Pl、P2、P3、P4o其中每一个管脚都能做独立的 输入输出管脚,它的笫9脚位复位管脚,接上电容和上拉电阻再带个开关构成复位电路。 1&19管脚接外部晶振和两个微调电容构成外部晶振电路。单片机、复位电路、晶振、 电源构成单片机最小系统,其与STC89C52单片机管脚连接如图2所示。 Ca-H 22pF. .C2.22pF.R1IT-L|1 XI.ICRYSTAL- .IfREQ-洞如6闢MbU11910k -:A::! C3-10iF - - 2222一31P10 1P 2P仁3P

15、4 3 4P14 5P15 62XTAL1P0.0/AD0P0.1/AD1X/TftI cP0.2/AD2nn o/rt/fTAL2PU.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6RSTP0.7/AD7P2.O/A8P2.1/A9P2.2/A10PSENP2.3/A11ALEP2.4/A12EAP2.5/A13P2.6/A14P2.7/A15P1 .OfT2P3.0/RXDP1.1/T2EXP3.1/TKDP1.2P3.2/INT0P1.3P3.3/INT1P1.4P3.4/T0P1.5P3.57T1P1.6P3.6/WRP1.7P3.7/RD39 DO38 D137 D236

16、 D3站 D434 D533 D632 D721SCL/22 I0元焦p24 DQ,25 be26 EN77 RWAT89C52SR.28图2单片机模块图2为单片机最小电路,其中晶振频率可以根据自己需要进行选择,范围在 0-24MHZ,常用12MHZ。复位电路得电容一般用10uF,但并不唯一,只要RC所得时间大 于两个机器周期即可。还有其P0内部无上拉电阻,所以在执行输岀功能时,外部必须接上拉电阻(一般10K即可)。2. 2. 2实时时钟模块使用DALLAS公司的实时时钟芯片DS1302oDS1302是DALLAS公司推出的涓流充电时 钟芯片,Vccl引脚为可编程涓流充电电源,芯片内含有一个实

17、时时钟/日历和31字节静 态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、 日、星期、月、年的信息,每月的天数和闰年的天数可自动调整,时钟操作可通过AM/PH 指示决定釆用24或12小时格式。DS1302与单片机之间能简单地采用同步串行的方式 进行通信,仅需用到三个口线:RES(复位)、1/0(数据线)、SCLK(串行时钟)。时钟/SRAM 的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低, 保持数据和时钟信息时功率小于1M,时钟电路如图3所示。BAT1DS1302 图3实时时钟模块2. 2. 3温度传感模块数字温度传感器选用D

18、S18B20,釆用单总线通信协议。DS18B20主要特性有:1、适应电压范围更宽,电压范围:3.05. 5V,在寄生电源方式下可曲数据线供电。2、独特的单线接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理 器与DS18B20的双向通讯。3、DS18B20支持多点组网功能,多个DS18B20可以并联在唯一的三线上,实现组网多点 测温4、DS18B20在使用中不需要任何外围元件,全部传感元件及转换电路集成在形如一只三 极管的集成电路内。5、温范围一55C+ 125C,在-10+85C时精度为0. 5C。6、可编程的分辨率为912位,对应的可分辨温度分别为0.5C、0.25C、

19、0. 125C和 0.0625C,可实现高精度测温。7、在9位分辨率时最多在93. 75ms内把温度转换为数字,12位分辨率时最多在750ms 内把温度值转换为数字,速度更快。8、测量结果直接输岀数字温度信号,以一线总线串行传送给CPU,同时可传送CRC校 验码,具有极强的抗干扰纠错能力。DS1820的操作指令分为R0H操作命令和存储器操作命令:(1) 、ROM操作命令及其含义Skip ROH指令代码(CCh):此命令执行后的存储器操作将针对在线的所有DS1820oAlarm Search指令代码(ECh):当温度值高于TH或低于TL中的数值时,此命令可以读 岀报警的DS1820。(2) 、存

20、储器操作指令代码及其含义Read Scratchpad指令代码(BEh):读取温度寄存器的温度值。Copy Scratchpad指令代码(48h):将温度寄存器的数值拷贝到EERAM中,保证温度值 不丢失。Convert T指令代码(44h):启动在线DS1280做温度A/D转换。Recall E2指令代码(B8h):将EERAH中的数值拷贝到温度寄存器中。温度测量步骤如下:(1) .Read ROM (33 h),每次对DS1820进行操作之前都要对它进行初始化,主要U 的在于确定传感器已经连接到单总线上。(2) . Search ROM (FOh),这条指令使处理器用排除的方法去辨别总线上

21、的DS1820。(3) . Match ROM (55h),只有准确的符合64位ROM序列的DS1820才能响应其后的指 令,当然,单点测温时可以使用Skip ROM (CCh)指令来跳过这一步。(4) . Convert T (44h),发完指令后应查询总线上的电平,当电平位高时温度转换完 成。(5) . Read Scratchpad (BEh),将读指令发出后,就可从总线上读得表示温度的2字 节二进制数。由于采用单总线数据传输方式,DS18B20的数据I/O均由同一条线完成,因此,对读写的操作时序要求严格。温度传感电路模块如图4所示。U210kDS18B20 327图4温度传感模块2.

22、2. 4液晶显示模块字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,本设计 釆用16列*2行的字符型LCD1602带背光的液晶显示屏。液晶显示模块电路如图9。各引 脚接口说明如表2-1所示:表2-1 LCD 1602引脚接口说明编号符号引脚说明编号符号引脚说明1VSS电源地9D2数据2VDD电源正极10D3数据3VL液晶显示偏压11D4数据4RS数据/命令选择12D5数据5R/W读/写选择13D6数据6E使能信号14D7数据7D0数据15BLA背光源正极8D1数据16BLK背光源负极引脚接口说明:第1脚:VSS为地电源。第2脚:VDD接5V正电源。第3脚:VL为液晶显示器对

23、比度调整端,接正电源时对比度最弱,接地时对比度最高, 对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。第5脚:R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和R/W 共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 第714脚:DOD7为8位双向数据线。第15脚:背光源正极。第16脚:背光源负极。1602LCD的指令说明及时序:

24、1602液晶模块内部的控制器共有11条控制指令,如表2-2所示:表2-21602LCD的指令说明序号指令RS1清显示02光标返回03置输入模式04显示开/关控制05光标或字符移位06置功能07置字符发生存贮器地址08置数据存贮器地址09读忙标志或地址010写数到CGRAM或DDRAM)111从CGRAH或DDRAH读数1字符控制命令说明:R/WD7D6D5D4D3D2D1D000000000100000001*00000011/DS000001DCB00001S/CR/L*0001DLNF*001字符发生存贮器地址01显示数据存贮器地址1BF计数器地址0要写的数据内容1读出的数据内容1602液

25、晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。指令1:清显示,指令码01H,光标复位到地址00H位置。指令2:光标复位,光标返回到地址00H。指令3:光标和显示模式设置I/D:光标移动方向,高电平右移,低电平左移S:屏幕上 所有文字是否左移或者右移。高电平表示有效,低电平则无效。指令4:显示开关控制。D:控制整体显示的开与关,高电平表示开显示,低电平表示 关显示C:控制光标的开与关,高电平表示有光标,低电平表示无光标B:控制光标是 否闪烁,高电平闪烁,低电平不闪烁。指令5:光标或显示移位S/C:高电平时移动显示的文字,低电平时移动光标。指令6:功能设置命令DL:高电平时为4位总线

26、,低电平时为8位总线N:低电平时为 单行显示,高电平时双行显示F:低电平时显示5x7的点阵字符,高电平时显示5x10 的点阵字符。指令7:字符发生器RAM地址设置。指令8: DDRAM地址设置。指令9:读忙信号和光标地址BF:为忙标志位,高电平表示忙,此时模块不能接收命令 或者数据,如果为低电平表示不忙。指令10:写数据。指令11:读数据。RSR/WE080 DB7tSPI hoirUllDI/CSP2Va 1 i d Dt a乂tc图8写操作时序P139D0238D13370243603535D463405733D6832D7921SCL22IO:RESPACK8P0.0/AD0 P0.1/

27、AD1 P0.2/AD2 P0.3/AD3 P0.4/AD4 P0.5/AD5 P0.6/AD6 P0.7/AD7P2.0/A8P2.1/A9LCD1LM016L 叱 TEXTeVs9卜86O LL LCM寸L558 -0 oS31 sJ岁2岁袒名2 8E22SSS&图9显示模块2. 2. 5矩阵键盘模块釆用4*4矩阵键盘,有8个按键,当扩展功能后对按键需求的增加时,有预留的未定义按键,作电路,如图10所示。.P16P12 三O OP15.O图10矩阵键盘模块只需在程序中加入相关的按键处理程序,就可实现新加按键的功能,不需重新制2. 2. 6发声模块采用三极管推动蜂鸣器发声,利用一个按键来控制

28、闹钟的启动与关闭,并在显示屛上显示N (开)或F (关闭),同时,每个按键都加了按键声音,该模块电路如图11所示。2. 2.7电源模块如图12所示,220V交流电经变压器降到9V、桥式整流、电容滤波后III 7805三端集 成稳压管分别得到+5V电压给整个电路供电,有发光二极管做电源指示灯,方便操作,如 图12所示。U4 7805vcq051uF 图12电源模块2.3系统电路图设计2. 3.1系统总原理图及连线系统总原理图及连线如图13所示。U4fMlMAss C47SC0LJ13vccLCD1LM016LXTALtPOOADJP0. i.ADlPO.0AD2XTAL2P03AD3P0.4-A

29、D4 PO.ADiP0.6/AD6RSTP07.AD7-SDO2 a昶bi3 37D24菱D33辺U4 34D5? 33068 32D79i12/01/04THU 28C 12:52:29 O0:00 NP2.OABP2.1A9 P2.2)A1O P2.A11 P2.4A12 P2.5-A13 P2.&AUP2.7/A15OPacxA!.8 L1584Pl.02P1.1/TSEXP12P13P14P15P1APl.7P3.WRXD P3.1TXD P32NT5P3.3TTTTP34T0P3.TT1P3.6EP3.7TDR4H89C52BAT1K.Q12NM66SOUNbK图13系统总原理图第三

30、章软件设计与分析3. 1主程序流程图主程序流程图主要包括各器件初始化,滚动式开机画面,模式判断,正常时间、温度显示,闹钟设置,时间调整设置,秒表功能。主程序流程图如图14o图14上程序流程图第四章系统测试4.1功能测试 设定好闹钟,到时后蜂鸣器报警,约一分钟后自动停止。 用手捏住温度传感器,显示温度值上升,松手后显示温度下降。 设定好时间、闹钟等数据后,切断外部电源供给,3小时后恢复供电,检查所有 数据依然正确,时钟在断电期间依然在走动。 切换到秒表功能键,通过按键可以实现秒表的开始、暂停和清零。第五章设计总结和心得5.1设计总结与心得5.1.1本设计的创新点与未来功能扩展1)创新点增强的时钟

31、保护功能:即使整个系统不接任何电源,依靠自带的备份电源时钟可 保持一年以上(理论值)。闹钟提醒保护功能:所有设定的闹钟提醒,在系统整体掉电的情况下,依靠自带 的备份电源可以保存与时钟同样长的时间开机滚动画面:每次开机时,都会有滚动出现的开机画面,内容是多功能时钟及 队员名称。备份电源随时充电:当系统有外部电源供给时,自动对备份电源充电,保持备份 电源电能饱满。温度显示:实时观测当地温度。2)未来功能扩展多种开机画面任意选择功能;增加EEPROM存储器,使闹钟的组数增多,保存时间不再受备份电源的限制;增加温度报警功能;增加无线数据传输功能,可对其他多部同型号数字钟同步统一时间、闹钟等设定。5.

32、2设计心得本课程设计从软件设计到仿真到硬件制作和调试,我收获不菲。特别是在仿真编 程和硬件调试方面。在编程过程中一直灌输给自己“编程是一种思想”,一定要用编程 的思想去编程,如模块化思想,文件管理思想,头文件和接口函数的思想,设计程序 时要考虑到程序的可扩充性,兼容性,可维护性以及重用性,并归纳和总结各种功能 算法,各种调度和事件驱动机制等等。在编程方面有了一定的进步。在使用仿真软件 时得到了一些启示:仿真只是提供一个实现的大概参考,真正的功能实现仍需在实际 硬件调试中完善。第六章参考文献6.1参考文献1 .李朝青单片机原理及接口技术(第3版)北京:北京航天航空大学出版社,2005年10月2

33、.惠仇手把手教你51单片机北京:电子工业出版社,2009年1月3 .谭浩强C语言程序设计(第二版)。北京:清华大学出版社,1999年12月4 .楼然苗等.单片机实验与课程设计(Proteus仿真版).浙江:浙江大学出版社.2010年10月5 龙威林等单片机应用入门(AT89S31和AVR).北京:化学工业出版社,2008年9月附录一:程序清单include #include #define uint unsigned int#define uchar unsigned charsbit SCLK 二 P20;sbit IO 二 P2J;sbit RST 二 P?2sbit beep二P24;s

34、bit KI 二 P4;sbit K2 二 P5;sbit ACCO 二 ACC。sbit ACC7 二 ACC7;charhide_sec, hide_min, hide_hour, hide.day, hide_week, hide_month, hide_year, hide_min_ alarm, hide_hour_alarm; /秒、分、时、日、月、年位闪的计数ucharstop_watch_value = ;(yo;(r ; 一 ucharcodeweekture73 = 50N, fTUE), WEN) fTHU), fFRI), SAT) SUN;char settime_f

35、lag, stopwatch_flag, stopwatch_count=0;uchar alarm_TimeString6二12:12;uchar alarm_hour, alarm_min;uchar alarm_count;uchar alarm_flag;uchar min=0;uchar sec二0;uchar count_stop二0;sbit DQ = P23;/温度传送数据10 口char done, done2, count, temp, flag, up_flag, down_flag;uchar temp_value;/温度售.uchar TempRoom5, week_

36、value2;void alarm_to_str();void show_time() ;/液晶显示程序/*1602液晶显示部分子程序*欢*和v*/sbit rs= P2:7;sbit rw二 P26;sbit en = P25;sfr DBPort= 0x80; /数据端口 unsigned char LCD_Wait (void) /内部等待函数 rs=0;rw二 l;_nop_();en二 l;_nop_();en=0;return DBPort;0/ Command1/ Data0x01向LCD写入命令或数据#define command1602#define datal602#def

37、ine clear screenl602/清屏#define home1602/光标返回原点0x02void lcd_write(bit style, unsigned char input) en二0;rs=style;rw二0;_nop_();DBPort=input;_nop_() ;/注意顺序en=l; _nop_() ;/注養顺序en二0;_nop_();LCD Wait(); /设置显示模式#defineshowl6020x01/显示开#definehidel6020x00/显示关#definecursorl6020x02/显示光标#defineno cursorl6020x00/

38、无光标#defineflashl6020x01/光丿:示闪劲#defineno flashl6020x00光丿示不闪动void lcd_set_display(unsigned char displaymode) lcd_write(commandl602, 0x08 displaymode);/设置输入模式#define ac_upl602#define ac_downl602#define move16020x020x00/ default0x01/画面可平移0x00/default#define no_movel602 void lcd_set_input(unsigned char i

39、nputmode) lcd_write(commandl602, 0x04:inputmode); _voidled initial ()/初始化 LCDo _ _ _ _ =d d d d d n c c c c c e 1111 Twrite (command1602, 0x38); /8 位数据端口, 2 行显示,5*7 点阵 write(commandl602, 0x38);set.display (showl602 no_cursorl602) ;/开启显示,无光标write (commandl602, clear_screenl602) ;/清屏set input (ac up 1

40、602 no move 1602) ;/AC 递增,ill面不动 /*液晶字符输入的位置*/void GotoXY(unsigned char x, unsigned char y)if (y=0) lcd_write(commandl602, 0x80 x);if (y=17lcd_write(commandl602, 0x80 (x0x40); void Print (unsigned char *str) /将字符输出到液晶显示 while (水str!二0) led write(datal602, *str):str+;/*水水*水*水*水*DS 1302时钟部分子程序*/ typed

41、ef struct _SYSTEHTIME.unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsigned unsignedchar char char char char char char char charSYSTEMTIME;SYSTEHTIME NowTime;second; minute; hour; week; day; month;year;datedata9; timedata9;/定义的时间类型#define dsl302_second#define dsl302_minute#define d

42、sl302_hour#define dsl302_week #define dsl302_day#define dsl302_month #define dsl302_year0x800x820x840x8A0x860x880x8C/时钟芯片的寄存器位置,存放时间void dsl302_input_byte(unsigned char d)/实时时钟写入一字节unsigned char i;ACC 二 d;for(i=8; i0; i)10 二 ACCO;SCLK 二 1;SCLK 二 0;ACC 二 ACC 1;unsigned char dsl302_output_byte (void)/

43、实时时钟读取一字节 unsigned char i;for(i=8; i0; i)ACC 二 ACC 1;ACC7 二 10;SCLK 二 1;SCLK 二 0;return(ACC);void writel302(unsigned char ucAddr, 址,ucData:要写的数据unsigned char ucDa)/ucAddr: DS1302 地RST 二 0;SCLK 二 0;RST 二 1; dsl302_input_byte(ucAddr);/地址,命令dsl302_input_byte (ucDa) ;/ 写 lByte 数据SCLK 二 1;RST 二 0;unsigne

44、d char readl302 (unsigned char ucAddr) /读取 DS1302 某地址的数据 unsigned char ucData;RST 二 0;SCLK 二 0;RST = 1; dsl302_input_byte (ucAddr 0x01) ;/ 地址,命令ucData = dsl302_output_byte () :/ 读 lByte 数据SCLK 二 1;RST 二 0;return(ucData);void dsl302_get_time(SYSTEMTIME *Time) /获取时钟芯片的时钟数据到自定义的结构 型数组unsigned char Read

45、Value;ReadValue = readl302(dsl302_second):Time-second = (ReadValue&0x70)4)*10 + (ReadValue&OxOF): ReadValue = readl302 (dsl302_minute);Time-minute = (ReadValue&0x70)4)*10 + (ReadValue&OxOF); ReadValue = read1302(ds1302_hour);Time-hour = (ReadValue&0x70)4)*10 + (ReadValue&OxOF); ReadValue = readl302(

46、dsl302_day);Time-day = (ReadValue&0x70)4)*10 + (ReadValue&OxOF); ReadValue = readl302(dsl302_week);Time-week = (ReadValue&0x70)4)*10 + (ReadValue&OxOF); ReadValue = readl302(dsl302_month);Time-month = (ReadValue&0x70)4)*10 + (ReadValue&OxOF);ReadValue = readl302(dsl302_year);Time-year = (ReadValue&0

47、x70)4)*10 + (ReadValue&OxOF);void date_to_string(SYSTEMTIME *Time)将时间年,月,日,星期数据转换成液晶显示字符串,放到数组里 datedata if(hide_yeardatedata0 = Time-year/10 +,O;Time-datedata1 = Time-year%10 + O;elseTime-datedata0二;Time-datedata 1 二;Time-datedata2二,/;if(hide_monthdatedata3 = Time-month/10 + O;Time-datedata4 = Time

48、-month%10 +,O;elseTime-datedata3二;Time-datedata4二;Time-datedata5 = if (hide_daydatedata6 = Time-day/10 +,O;=Time-day%10 + O;Time-datedataL7. else T ime-datedata L6J =;Time-datedata7二; if(hide_weekweek%10 + O; 一else week_valueO二; 一week_valuel = 0 ;Time-datedata8 =,O, ; /字符串末尾加O,,判断结束字符 void time_to_s

49、tring(SYSTEMTIME 水Time) if(hide:hourt imedata0 = Time-hour/10 +,O;Time-t imedata1= Time-hour%10 + O;else Time-t imedata0二;Time-t imedata1 二;Time-timedata2 = J :,;if(hide_mintimedata3 = Time-minute/10 + O; Time-timedatd4 = Time-minute%10 + O;elseTime-t imedata3二;Time一timedatd4二;Time-timedata5二:;if (hide_sectimedatd6 = Time-second/10 + O; Time-timedata7 = Time-second%10 + O;else Time-t imedata6二; Time-timedatd7二;Time-datedata8 = 0 ;void Initial_DS1302 (void)/时钟芯片初始化 unsigned char second=readl302(dsl302_second): 辻(second&0x80)/判断时钟芯片是否关闭 write

温馨提示

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

最新文档

评论

0/150

提交评论