毕业论文范文——基于LCD时钟温度计的设计_第1页
毕业论文范文——基于LCD时钟温度计的设计_第2页
毕业论文范文——基于LCD时钟温度计的设计_第3页
毕业论文范文——基于LCD时钟温度计的设计_第4页
毕业论文范文——基于LCD时钟温度计的设计_第5页
免费预览已结束,剩余42页可下载查看

下载本文档

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

文档简介

摘 要本设计的LCD电子时钟温度计,包括两大功能:实时显示年、月、日、时、分、秒;实时监测环境温度;本设计采用的是AT89S52单片机,该单片机采用的MCU51内核,内部带有8KB的ROM,能够存储大量的程序。计时芯片采用DS1302,该芯片通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时、分、秒信息,采用双电源供电,当外部电源掉电时能够利用后备电池准确计时。温度检测采用DS18B20,该芯片采用的是独特的“一线总线”的方式与单片机进行通信,实时温度采用一线总线的方式传输大大的提高了信号的抗干扰性,分辨率可通过软件设置,其小巧的体积为各种环境下测量温度提供了方便。显示器件采用通用型LCD1602,可显示32个字符,该液晶显示方便,功能强大,完全能满足数字时钟温度计的显示要求。通过此次设计能够更加牢固的掌握单片机的应用技术,增强动手能力、硬件设计能力以及软件设计能力。关键词:单片机;Keil;DS1302;DS18B20;LCD液晶目 录第1章 绪论11.1 研究意义11.2 国内外现状1第2章 设计任务22.1 设计任务22.2 设计要求2第3章 总体方案论证与设计33.1 液晶显示模块33.2 实时时间计算模块33.3 实时环境温度采集模块43.4 设置模块4第4章 总体方案组成框图5第5章 系统硬件设计6 5.1 LCD显示模块设计65.2 实时环境温度检测模块105.3 时间计算模块设计115.4 设置模块135.5 系统硬件电路设计总图13第6章 系统软件设计166.1 主程序166.2 时间显示程序176.3 时间调整程序设计176.4 读取温度子程序186.5 温度转换命令子程序206.6 计算温度子程序206.7 显示数据刷新子程序216.8 温度数据的计算处理方法22第7章 系统硬件PROTEUS仿真原理图23结语24致谢25参考文献26附录一:实物图27附录二 PCB图28附录三 程序2945 第1章 绪论1.1研究意义近些年我国开始重视电子时钟温度计的开发与设计,但是在中国该产品出现的问题中,许多不容乐观,如产业结构不合理、产业集中于劳动力密集行业产品;技术密集型产品明显落后于发达工业国家;生产要素决定性作用正在减弱;产业能源消耗大、产出率低、环境污染严重、对自然资源破坏力大;企业总体规模偏小、技术创新能力薄弱;管理水平落后等。在中国该产品的产业发展已到了岔口;产业生产企业急需选对发展方向。1.2 国内外现状 电气时代、电子时代和现已进人的电脑时代。不过, 这里的电脑, 通常是指个人计算机, 简称机。它由主机、键盘、显示器等组成。还有一类计算机, 大多数人却不怎么熟悉。这种计算机就是把智能赋予各种机械的单片机。顾名思义, 这种计算机的最小系统只用了一片集成电路, 即可进行简单运算和控制。因为它体积小, 通常都藏在被控机械的肚子里。它在整个装置中, 起着有如人类头脑的作用, 它出了毛病, 整个装置就瘫痪了。现在, 这种单片机的使用领域已十分广泛, 如智能仪表、实时工控、通讯设备、导航系统、家用电器等。各种产品一旦用上了单片机, 就能起到使产品升级换代的功效, 常在产品名称前冠以形容词智能型 , 如智能型洗衣机等。现在有些工厂的技术人员或其它业余电子开发者搞出来的某些产品, 不是电路太复杂, 就是功能太简单且极易被仿制。究其原因, 可能就卡在产品未使用单片机或其它可编程器件上。第2章 设计任务2.1设计任务利用单片机、时钟芯片DS1302、温度传感器DS18B20、1602液晶等实现日期、时间、温度的显示。2.2设计要求2.2.1 A/D转换器可用ADC0809,也可选用自带A/D的单片机,完成1个通道的温度数据采集; 2.2.2 温度控制单元可采用DS18B20温度传感器,时钟控制部分可采用时钟芯片DS1302;2.2.3 对采集的温度在LCD实时显示,并能保存一段时间内的温度值;2.2.4 能显示当前时间,并具有时间调校功能;2.2.5 采用“汇编语言”或“C语言”进行编程,编译系统可用WAVE或Keil C;2.2.6 用Proteus软件进行仿真;2.2.7 用PROTEL软件画出系统原理图与印制板电路图; 2.2.8 尽可能地做出实物。第3章 总体方案论证与设计本系统以AT89S52单片机为控制核心,通过与DS1302和DS18B20通信获取实时时间和实时环境温度,并将得到的数据通过1602液晶显示出来,同时通过相应的按键调整相应的值。因此本设计可分为一下模块:显示模块、实时时间计算模块、实时环境温度采集模块、报警模块、设置模块(时间设置模块、最高温度设置模块、闹钟设置模块)。下面对各个模块逐一进行论证分析:3.1液晶显示模块方案(1):数码管是利用发光二极管的特性组合而成数字显示器件,通过控制相应的二极管的状态显示相应的数字。要使数码管正常显示就得有驱动电路驱动相应的段码,数码管的现实方式可分为静态显示和动态显示,静态显示方式只适合显示单个的数字,因此本设计应采用动态显示方式。由于动态显示方式利用的是人眼视觉暂留的特性,扫描的时间应不大于20毫秒,占用系统资源大,而且显示的个数和字型有限,在本设计中不易采用。方案(2):1602液晶也叫1602字符型液晶 它是一种专门用来显示字母、数字、符号等的点阵型液晶模块 它有若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符。每位之间有一个点距的间隔,每行之间也有也有间隔,起到了字符间距和行间距的作用。1602的驱动电路带有11条指令,可以很方便的控制液晶的现实效果如:清屏、左移右移、光标显示。而且1602显示的字符在下一条指令为到来之前不会改变,也就是能够维持显示的字符,1602液晶占用的系统资源也少。综合比较上述两种方案,应采用1602液晶组成本设计的显示模块。3.2实时时间计算模块方案(1):AT89S52单片机内部带有定时/计数功能,此定时功能是通过对外部晶振的脉冲进行计数,从而达到计时功能,只要使用11.0592的晶振就能实现零误差的计时,因此可以利用此功能实现计时,但因为只有单一的计时功能要实现“万年历”的功能需要较复杂的程序,而且如果单片机掉电无法继续进行计时,所以使用不便。方案(2):DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。利用单片机强大的控制功能就可实现实时计时的功能,而且消耗的系统资源少,程序简单。综合上述两种方案,宜采用方案(2)实现实时计时功能。3.3实时环境温度采集模块方案(1):热敏电阻是开发早、种类多、发展较成熟的敏感元器件热敏电阻由半导体陶瓷材料组成,利用的原理是温度引起电阻变化。通过一定的电路可以将周围环境的温度变化转化成电压的变化,通过AD转化器件将信号传输给单片机进行分析,从而测出当前环境温度,但误差大,不稳定,对环境要求较高。方案(2):DS18B20是美国DALLAS公司生产的数字温度传感器,采用单总线的接口方式与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。测量温度范围宽,测量精度高 ,在使用中不需要任何外围元件,支持多点组网功能,多个DS18B20 可以并联在惟一的单线上,实现多点测温,供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。因此非常适合本系统使用。综上比较上述两种方案,宜采用方案(2)构成本设计的实时温度采集模块。3.4设置模块因为设置模块只需编写相应的程序外加相应的按键即可实现,实现方法较简单,在此不再论述。第4章 总体方案组成框图本系统包括LCD1602液晶显示模块电路、AT89S52微处理器模块电路、时间计算模块DS1302电路、实时温度采集模块DS18B20电路、设置模块电路。其中显示模块的主要功能是:与单片机接口相连,以点阵形式显示时间和温度;微处理器模块的主要功能是:接上晶振、复位电路和相应的接口电路,装载软件后就可以构成单片机应用系统;DS1302的主要功能是:通过简单的串行通信与单片机进行通信,时钟/日历电路能够实时提供年、月、日、时、分、秒信息;DS18B20电路的主要功能是:采用单总线的接口方式与微处理器连接,可以实现对环境温度的实时监测。LCD时钟温度计系统组成框图如图4-1所示:图4-1 总体方案组成框图第5章 系统硬件设计5.1 LCD显示模块设计功耗较小可直接与单片机接口相接,电源直接与电源电路相接,使用单片机的P0口和P1口与1602进行数据传递。1602相应功能有: +5V电压,对比度可调; 内含复位电路; 提供各种控制命令,如:清屏、字符闪烁、光标闪烁、显示移位等多种功能; 有80字节显示数据存储器DDRAM; 内建有160个5X7点阵的字型的字符发生器CGROM; 8个可由用户自定义的5X7的字符发生器CGRAM。5.1.1 1602引脚介绍,1602引脚描述见图5-1所示:图5-1 1602引脚介绍5.1.2 1602液晶11条指令介绍1、 清屏指令介绍如图5-2所示:图5-2 清屏指令功能: 清除液晶显示器,即将DDRAM的内容全部填入“空白”的字符码20H; 光标归位,即将光标撤回液晶显示屏的左上方; 将地址计数器(AC)的值设为0;2、光标归位指令介绍如图5-3所示: 图5-3 光标归位指令功能: 把光标撤回到显示器的左上方; 把地址计数器(AC)的值设置为0; 保持DDRAM的内容不变 ;3、输入模式设置指令介绍如图5-4所示: 图5-4 输入模式设置指令功能:设定每次写入1位数据后光标的移位方向,并且设定每次写入的一个字符是否移动。参数设定的情况如下所示: 位名设置 I/D0=写入新数据后光标左移;1=写入新数据后光标右移 S0=写入新数据后显示屏不移动;1=写入新数据后显示屏整体右移1个字 4、显示开关控制指令如图5-5所示:图5-5 显示开关控制指令功能:控制显示器开/关、光标显示/关闭以及光标是否闪烁。参数设定的情况如下: 位名 设置D 0=显示功能关、1=显示功能开 C 0=无光标、1=有光标 B 0=光标不闪烁、1=光标闪烁5、设定显示屏或光标移动方向指令如图5-6所示:图5-6 光标移动方向指令功能:使光标移位或使整个显示屏幕移位。参数设定的情况如下: 位名 情况S/C0=光标左移1格,且AC值减1;1=光标右移1格,且AC值加1 R/L0=显示器上字符全部右移一格,但光标不动 1=显示器上字符全部右移一格,但光标不动 6、功能设定指令如图5-7所示:图5-7 功能设定指令功能:设定数据总线位数、显示的行数及字型。参数设定的情况如下: 位名设置 DL 0=数据总线为4位;1=数据总线为8位 N 0=显示1行;1=显示2行 F 0=57点阵/每字符;1=510点阵/每字符 7、功能:设定下一个要存入数据的CGRAM的地址。设定CGRAM地址指令如图5-8所示: 图5-8设定CGRAM地址指令8、功能:设定下一个要存入数据的CGRAM的地址。设定DDRAM地址指令如图5-9所示:图5-9设定CGRAM地址指令9、读取忙信号或AC地址指令如图5-10所示:图5-10设定读取忙信号或AC地址指令功能: 读取忙碌信号BF的内容,BF=1时,表示液晶显示器忙,暂时无法接收单片机送来的数据或指令; BF=0时,液晶显示器可以接收单片机送来的数据或指令; 读取地址计数器(AC)的内容。 10、数据写入DDRAM或CGRAM指令如图5-11所示: 图5-11设定读取忙信号或AC地址指令功能: 将字符码写入DDRAM,以使液晶显示屏显示出相对应的字符; 将用户自己设计的图形存入CGRAM。 11、从CGRAM或DDRAM读出数据的指令如图5-12所示: 图5-12读出数据的指令功能:读取DDRAM或CGRAM中的内容。基本操作时序: 读状态输入:RS=L,RW=H,E=H;输出:DB0DB7=状态字 写指令 输入:RS=L,RW=L,E=下降沿脉冲,DB0DB7=指令码输出:无读数据输入:RS=H,RW=H,E=H;输出:DB0DB7=数据写数据 输入:RS=H,RW=L,E=下降沿脉冲,DB0DB7=数据输出:无 5.2时间计算模块设计DS1302通过三根口线,实现与单片机的通信,因为DS1302功耗很小,电源掉电后通过3V的纽扣电池仍能维持DS1302精确走时。5.2.1 DS1302特性介绍DS1302是美国DALLAS公司推出的一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.55.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。5.2.2 DS1302引脚介绍DS1302引脚如图5-13所示: 图5-13 DS1302引脚介绍功能: Vcc2 +5V电源 X1,X2是外接晶振脚 (32.768KHZ的晶振) X2 是外接晶振脚 (32.768KHZ的晶振) 接地(GND) CE/RST:复位脚 I/O:数据输入输出口; SCLK:串行时钟,输入; Vcc1:备用电池端;5.2.3 DS1302有关日历、时间的寄存器,如图5-14所示。图5-14 DS1302有关日历、时间的寄存器寄存器的说明如下: 秒寄存器(81h、80h)的位7定义为时钟暂停标志(CH)。当初始上电时该位置为1,时钟振荡器停止,DS1302处于低功耗状态;只有将秒寄存器的该位置改写为0时,时钟才能开始运行。 小时寄存器(85h、84h)的位7用于定义DS1302是运行于12小时模式还是 24小时模式。当为高时,选择12小时模式。在12小时模式时,位5是 ,当为1时,表示PM。在24小时模式时,位5是第二个10小时位。 控制寄存器(8Fh、8Eh)的位7是写保护位(WP),其它7位均置为0。在对任何的时钟和RAM的写操作之前,WP位必须为0。当WP位为1时,写保护的位防止对任何一个寄存器的写操作。也就是说在电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作。 5.3实时环境温度检测模块DS18B20通过单总线实现与单片机的通信,每个DS18B20都有一个唯一的序列号,可以方便的实现组网检测。5.3.1单总线介绍 单总线即只有一根数据线,系统中的数据交换,控制都由这根线完成。 单总线通常要求外接一个约为 4.7K10K 的上拉电阻,这样,当总线闲置时其状态为高电平。5.3.2 DS18B20特性介绍 DS18B20 单线数字温度传感器,即“一线器件”,其具有独特的优点: 采用单总线的接口方式 与微处理器连接时 仅需要一条口线即可实现微处理器与 DS18B20 的双向通讯。 单总线具有经济性好,抗干扰能力强,适合于恶劣环境的现场温度测量,使用方便等优点,使用户可轻松地组建传感器网络,为测量系统的构建引入全新概念。 测量温度范围宽,测量精度高 DS18B20 的测量范围为 -55 + 125 ; 在 -10+ 85C 范围内,精度为 0.5C 。 在使用中不需要任何外围元件。 支持多点组网功能多个DS18B20可以并联在惟一的单线上,实现多点测量。 供电方式灵活 DS18B20 可以通过内部寄生电路从数据线上获取电源。因此,当数据线上的时序满足一定的要求时,可以不接外部电源,从而使系统结构更趋简单,可靠性更高。 测量参数可配置 DS18B20 的测量分辨率可通过程序设定 912 位。 负压特性 电源极性接反时,温度计不会因发热而烧毁,但不能正常工作。 掉电保护功能 DS18B20 内部含有 EEPROM ,在系统掉电以后,它仍可保存分辨率及报警温度的设定值。 DS18B20 具有体积更小、适用电压更宽、更经济、可选更小的封装方式,更宽的电压适用范围,适合于构建自己的经济的测温系统,因此也就被设计者们所青睐。5.3.3 DS18B20管脚介绍DS18B20管脚如图5-15所示:DS18B20的管脚排列: GND为电源 地; DQ为数字信号输入输出端; VDD为外接供电电源输入端,在寄生电源接线方式时接地; 图5-15 DS18B20管脚介绍5.3.4 DS18B20操作步骤 每次读写前对 DS18B20 进行复位初始化。复位要求主 CPU 将数据线下拉 500us ,然后释放,DS18B20 收到信号后等待 16us60us 左右,然后发出60us240us 的存在低脉冲,主 CPU 收到此信号后表示复位成功。 发送一条 ROM 指令DS18B20操作示意如图5-16所示:图5-16 DS18B20操作示意图发送存储器指令发送存储器指令如图5-17所示:图5-17发送存储器指令示意图5.4设置模块设置模块采用四个按键与P14、P15、P16、P17,相接组成独立按键,接口电路图如图5-18所示: 图5-18 设置模块接口电路图5.5系统硬件电路设计总图 微处理器如图5-19所示:图5-19 单片机 LCD液晶显示接口电路和复位电路如图5-20所示:图5-20 LCD接口电路和复位电路 DS1302时钟芯片接口电路如图5-21所示:图5-21 时钟芯片接口电路 排阻如图5-22所示:图5-22排阻 晶振电路如图5-23所示:图5-23 晶振电路第6章 系统软件设计6.1 主程序系统主程序首先对系统进行初始化, 包括设置定时器、中断和端口;然后显示开机画面。由于单片机没有停止指令,所以可以设计系统程序不断地循环执行上述显示效果。程序流程框图如图6-1所示:图6-1 程序设计框图6.2 时间显示程序我们采用了时钟芯片DS1302,所以只需从DS1302的寄存器中读出小时、分钟、秒,再处理即可。在首次对DS1302进行操作之前,必须对它进行初始化,然后从DS1302中读取数据,过处理后,送给显示缓冲单元,如图6-2所示: 图6-2 时间显示程序6.3时间调整程序设计 调整时间用3个调整按钮,1个作为移位控制用,另外两个作为加减用,分别定义控制按钮、加按钮、减按钮。在调整时间过程中,要调整的那位与别的位应该有区别,所以增加了闪烁功能,即调整的那位一直在闪烁直到调整下一位。闪烁原理就是让要调整的那一位,每隔一定时间熄灭一次,比如说50MS。利用定时器计时,当达到50MS溢出时, 就送给该位熄灭符,在下一次溢出时,再送正常显示的值,不断交替,直到调整该位结束,此时传送正常显示值给该位,再进入下一位调整闪烁程序,时间调整程序流程图如图6-3所示: 图6-3 时间调整程序流程图6.4读取温度子程序 主程序的主要功能是负责温度的实时显示、读出并处理DS18B20的测量温度值,流程图如图12.图12 DS18B20温度计主程序流程图 读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图6-4所示: 图6-4 读出温度子程序流程图读出温度子程序的主要功能是读出RAM中的9个字节,在读出时需进行CRC校验,校验有错时不进行温度数据的改写。其程序流程图如图6-5所示: 图6-5读取温度子程序6.5 温度转换命令子程序温度转换命令子程序主要是发温度转换开始命令,当采用12位分辨率时转换时间约750毫秒,在本程序设计中采用1秒显示程序延时法等待转换的完成。6.6 计算温度子程序计算温度子程序将RAM中读取数值进行BCD码的转换运算,并进行温度值正负的判定,其程序流程图如图6-6所示:图6-6计算温度子程序6.7显示数据刷新子程序显示数据刷新子程序主要时对显示缓冲器中的显示数据进行刷新操作,当最高位显示为零时将符号显示位移入下一位,程序流程图如图6-7所示:图6-7显示数据刷新子程序6.8温度数据的计算处理方法 从DS18B20读取出的二进制值必需先转换成十进制值,才能用于字符的显示。因为DS18B20的转换精度为9-12位可选的,为了提高精度采用12位。在采用12位转换精度时,温度寄存器里的值是以0.0625为步进的,即温度值为温度寄存器里的二进制值乘以0.0625,就是实际的十进制温度值。如图6-8所示:图6-8温度数据的计算处理方法第7章 系统硬件PROTEUS仿真原理图Proteus软件是英国的Labcenter electronics公司出版的EDA工具软件,它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前最好的仿真单片机及外围器件的工具。虽然目前国内推广刚起步,但已受到单片机爱好者、从事单片机教学的教师、致力于单片机开发应用的科技工作者的青睐。Proteus是世界上著名的EDA工具,从原理图布图、代码调试到单片机与外围电路协同仿真,一键切换到PCB设计,真正实现了从概念到产品的完整设计。是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等,2010年又增加了Cortex和DSP系列处理器,并持续增加其他系列处理器模型。在编译方面,它也支持IAR、Keil和MPLAB等多种编译器。仿真原理图如图8-1所示:图8-1 proteus 仿真图结语在整个设计过程中,结合专业知识,充分发挥人的主观能动性,自主学习,学到了许多没学到的知识。较好的完成了作品。达到了预期的目的,在最初的设计中,发挥“三个臭皮匠,顶个诸葛亮”的作用。相互学习、相互讨论、研究。完成了最初的设想。在电路焊接时虽然没什么大问题,但从中也知道了焊接在整个作品中的重要性,电路工程量大,不能心急,一个个慢慢来不能急于求成,反而达到事半功倍的效果。对电路的设计、布局要先有一个好的构思,才显得电路板美观、大方。程序编写中,由于思路不清晰,开始时遇到了很多的问题,经过静下心来思考,最后经过老师的指导,和同学的讨论,理清了思路,反而得心应手。在此次设计中,知道了做凡事要有一颗平常的心,不要想着走捷径,一步一个脚印。也练就了我们的耐心,做什么事都要有耐心。此次比赛中学到了很多很多东西,这是最重要的。总之,这次毕业设计使我的能力得到了全方位的提高。通过完成一个包括电路设计和程序开发的完整过程,使我了解开发一个单片机应用系统的全过程,为今后从事相关的事业打下基础。 致谢感谢成都工业学院给我提供了一个展现自己的舞台,给我一次难得煅炼的机会,使得我们的动手能力和专业技能都有了很大的提高。在做设计的日子里得到了指导教师罗老师的悉心指导,在此向我们的指导教师罗老师致以诚挚的谢意。感谢提供相关技术帮助的老师和同学,你们的支持和鼓励使我对这次的作品完成有了信心和动力,也给了我很多无私的帮助和支持,我们在此深表谢意。在这段设计时间里,我的朋友以及同学也给了我很大的帮助,他们不仅热心地帮助我查找资料,而且指出我在设计中所存在的问题,并给出了很好的建议。我顺利的完成设计,他们也功不可没。在此,我向我的朋友及同学致以我最深的谢意,感谢你们对我的帮助。参考文献1 张靖武,周灵彬.单片机原理及应用与PROTEUS仿.北京:人民邮电出版社,20062 江志红.51单片机技术与应用系统开发案例精选.北京:科学出版社,20073 孙淑霞,代世雄. C程序设计教程.四川:四川科学技术出版社,2006 4 李光飞.单片机课程设计实例指导.北京:北京航空航天大学出版社,2008 5 曾一江.单片微机原理与接口技术.北京:科学出版社,20066 王法能.单片机原理及应用.北京:科学出版社,2007附录一:实物图实物图如附录图(1-1.2.3)所示:附录图1-1附录图1-2附录图1-3附录二 PCB图PCB图如附录图2-1,2-2所示:附录图2-1附录三 程序/*1602液晶显示部分子程序*/Port Definitions*sbit LcdRs= P25;sbit LcdRw= P26;sbit LcdEn = P27;sfr DBPort = 0x80;/P0=0x80,P1=0x90,P2=0xA0,P3=0xB0.数据端口/内部等待函数*#define LCD_SHOW0x04 /显示开#define LCD_HIDE0x00 /显示关 #define LCD_CURSOR0x02 /显示光标#define LCD_NO_CURSOR0x00 /无光标 #define LCD_FLASH0x01 /光标闪动#define LCD_NO_FLASH0x00 /光标不闪动void LCD_SetDisplay(unsigned char DisplayMode)LCD_Write(LCD_COMMAND, 0x08|DisplayMode); /设置输入模式*#define LCD_AC_UP0x02#define LCD_AC_DOWN0x00 / default#define LCD_MOVE0x01 / 画面可平移#define LCD_NO_MOVE0x00 /defaultvoid LCD_SetInput(unsigned char InputMode)LCD_Write(LCD_COMMAND, 0x04|InputMode);/初始化LCD*void LCD_Initial()LcdEn=0;LCD_Write(LCD_COMMAND,0x38); /8位数据端口,2行显示,5*7点阵LCD_Write(LCD_COMMAND,0x38);LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); /开启显示, 无光标LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); /清屏LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); /AC递增, 画面不动/液晶字符输入的位置*void GotoXY(unsigned char x, unsigned char y)if(y=0)LCD_Write(LCD_COMMAND,0x80|x);if(y=1)LCD_Write(LCD_COMMAND,0x80|(x-0x40);/将字符输出到液晶显示void Print(unsigned char *str)while(*str!=0)LCD_Write(LCD_DATA,*str);str+;/*DS1302时钟部分子程序*/typedef struct _SYSTEMTIME_unsigned char Second;unsigned char Minute;unsigned char Hour;unsigned char Week;unsigned char Day;unsigned char Month;unsigned char Year;unsigned char DateString11;unsigned char TimeString9;SYSTEMTIME;/定义的时间类型SYSTEMTIME CurrentTime;#define AM(X)X#define PM(X)(X+12) / 转成24小时制#define DS1302_SECOND0x80 /时钟芯片的寄存器位置,存放时间#define DS1302_MINUTE0x82#define DS1302_HOUR0x84 #define DS1302_WEEK0x8A#define DS1302_DAY0x86#define DS1302_MONTH0x88#define DS1302_YEAR0x8C void DS1302InputByte(unsigned char d) /实时时钟写入一字节(内部函数) unsigned char i; ACC = d; for(i=8; i0; i-) DS1302_IO = ACC0; /相当于汇编中的 RRC DS1302_CLK = 1; DS1302_CLK = 0; ACC = ACC 1; unsigned char DS1302OutputByte(void) /实时时钟读取一字节(内部函数) unsigned char i; for(i=8; i0; i-) ACC = ACC 1; /相当于汇编中的 RRC ACC7 = DS1302_IO; DS1302_CLK = 1; DS1302_CLK = 0; return(ACC); void Write1302(unsigned char ucAddr, unsigned char ucDa)/ucAddr: DS1302地址, ucData: 要写的数据 DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr); / 地址,命令 DS1302InputByte(ucDa); / 写1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; unsigned char Read1302(unsigned char ucAddr)/读取DS1302某地址的数据 unsigned char ucData; DS1302_RST = 0; DS1302_CLK = 0; DS1302_RST = 1; DS1302InputByte(ucAddr|0x01); / 地址,命令 ucData = DS1302OutputByte(); / 读1Byte数据 DS1302_CLK = 1; DS1302_RST = 0; return(ucData); week_value0 = Time-Week%10 + 0; /星期的数据另外放到 week_value数组里,跟年,月,日的分开存放,因为等一下要在最后显示 else week_value0 = ; week_value1 = 0;Time-DateString10 = 0; /字符串末尾加 0 ,判断结束字符void TimeToStr(SYSTEMTIME *Time) /将时,分,秒数据转换成液晶显示字符放到数组 TimeString; if(hide_hourTimeString0 = Time-Hour/10 + 0; Time-TimeString1 = Time-Hour%10 + 0; else Time-TimeString0 = ; Time-TimeString1 = ;Time-TimeString2 = :; if(hide_minTimeString3 = Time-Minute/10 + 0; Time-TimeString4 = Time-Minute%10 + 0; else Time-TimeString3 = ; Time-TimeString4 = ; Time-TimeString5 = :; if(hide_secTimeString6 = Time-Second/10 + 0; Time-TimeString7 = Time-Second%10 + 0; else Time-TimeString6 = ; Time-TimeString7 = ; Time-DateString8 = 0;void Initial_DS1302(void) /时钟芯片初始化 unsigned char Second=Read1302(DS1302_SECOND);if(Second&0x80) /判断时钟芯片是否关闭 Write1302(0x8e,0x00); /写入允许Write1302(0x8c,0x07); /以下写入

温馨提示

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

评论

0/150

提交评论