带有液晶显示的定时闹钟 毕业设计.doc
郑州科技学院 带有液晶显示的定时闹钟 院(系): 电子工程系 专业班级: 11机电一体化技术 学 号: 201129012 学生姓名: 郭月华 指导教师: 张军 2013年11月-2014年3月郑州大学毕业设计(论文)开题报告课题名称 基于单片机液晶定时闹钟的设计课题来源教师命题课题类型EX指导教师 张军学生姓名郭月华学 号201129012专 业 电子工程开题报告内容:(调研资料的准备,设计的目的、要求、思路与预期成果;任务完成的阶段内容及时间安排;完成设计(论文)所具备的条件因素等。)一、调研资料准备学习电子绘图Protel 99 SE、Multisim2001、Keil等相关软件通过网络及各种相关书籍查找相关信息二、设计目的 1了解LCD显示器显示的基本原理 2. 了解用LCD液晶显示有什么好处3. 掌握并学会用单片机AT89C52控制的硬件电路的设计和软件设计 4. 能够正确实现基于单片机的液晶屏显示的定时电子闹钟设计功能三、设计要求1、显示器可显示输出定时时间,显示格式为“时时 分分 秒秒”2. 可显示日期,具有万年历的功能,同时可修改时间 2、由LCD闪动来做秒表计数表示 3、用户可通过按键调整时间,按键数量尽可能少四、设计思路1. 利用AT89C52单片机芯片作为程序控制系统再加上其它外围电路进行辅 助,具体电路的设计包括:单片机最小系统、键盘、液晶显示等电路。 2. 按设计要求编写程序并调试3. 输出用液晶屏显示五、预期成果1、设计一个基于单片机的可调节时间、可定时的液晶显示闹钟 2、软件编程及功能调试六、论文阶段内容及时间安排第1周至第2周:收集材料,撰写开题报告第3周至第4周:撰写文献综述和外文翻译,设计电路总体方案第5周至第7周:进行系统软件功能分析,软件模块的确定,编写软件第8周至第9周:整体系统的软硬件调试第10周至第11周:总结分析数据,毕业论文的撰写 第12周:提交毕业设计(论文)成果,准备答辩六、完成设计(论文)所具备的条件因素硬件条件:单片机、LCD液晶显示屏、万能板、放大器、按键、蜂鸣器等软件条件:电子绘图软件Protel 99 SE、Multisim2001、Keil。方法:(1)通过网络及各种相关书籍查找相关信息,确定使用的元器件。(2)以单片机AT89S52为核心,开发一个完整的系统,包括硬件设计和软件的编程。(3)使用Protel软件,绘制原理图、PCB,并进行元器件安装、焊接及调试检测达到预期的目的。指导教师签名: 日期: 郑州大学毕业设计(论文)任务书题目 基于STC89C52 专业 电子工程 学号 201129012 姓名 郭月华 主要内容、基本要求、主要参考资料等:一、 主要内容采用STC89C52单片机为核心,复位电路,时钟电路,闹钟指示电路,LCD显示电路等组成,软件选用汇编语言编程。利用单片机可将数字显示于LCD显示屏上,并能通过按键来调节时间和定时。二、 基本要求1、显示器可显示输出定时时间,显示格式为“时时 分分 秒秒”。2、由LCD液晶显来做秒表计数表示。3、用户可通过按键调整时间,按键数量尽可能少。三、 主要参考资料1 余发山 单片机原理及应用技术 中国矿业大学出版社2 张毅刚 单片机应用设计 哈出尔滨工业大学版社3 李刚 51系列单片机系统设计与应用技巧4 房小翠 王金凤 单片机微型计算机与机电接口技术 北京:国防工业出版社5 李珍 单片机原理与控制技术 北京:清华大学出版社6 范立南 单片机接口与控制技术 沈阳:辽宁大学出版社7 张友德 单片机微型原理应用与实践 上海:复旦大学出版社8 李华 MCS51系列单片机实用接口技术 北京:北京航空大学出版社 完 成 期 限: 指导教师签名: 专业负责人签名: 年 月 日郭总的没有摘要,而且没有英文摘要,无法插入附录有点乱,图形和和你的一样,结束语和致谢也没有任务书也是和你的一样至于其他的不是什么太大的毛病,我可以帮你们改记得征文的开头用TOB 键,别按空格目 录第1章 设计方案1 设计方案论证71.1 应用71.2 方案选择71.3 总设计框图及分析82 硬件电路设计102.1 系统时钟电路设计102.2系统复位电路的设计102.3闹钟指示电路设计102.4 电子闹钟的显示电路设计102.5 仿真图113.1 概述133.2 主模块的设计133.3 基本显示模块设计133.4 时间设定模块设计143.5 闹铃功能的实现153.6程序174 设计总结38摘要单片机自20世纪70年代问世以来,以其,除了CPU外,使用LCD液晶显示来进行输出显示,使用STC89C52单片机进行驱动。通过LCD能够较为准确地显示时、分、秒。四个简单的按键实现对时间的调整。软件方面采用C语言编程。整个电子钟系统能完成时间的显示、调时、校时和三组定时闹钟的功能。选用单片机最小系统应用程序,添加比较程序、时间调整程序及蜂鸣程序,通过时间比较程序触发发蜂鸣,实现闹钟功能,完成设计所需求的软件环境。介绍并使用Keil单片机模拟调试软件,测试程序的可行性并用Proteus进行仿真。关键词:单片机,定时器,中断,闹钟,LCDABSTRACTBecause of its extremely high performance-price ratio, the single-chip computer (SCC) has been paid great attention to ever since it came out in 1970s of 20th Century, and has gained an extensive applicable field and fast development. Among all kinds of SCCS, 51 SCC is the most typical and representative one.This design, adopting STC89C52 chip as the core part with some necessary peripheral circuits, is a simple electronic clock which uses 5V DC as the power supply. In hardware aspect, besides the CPU, eight seven-segment LCD digi-tubes are used for display, which work in a dynamically scanning display mode and driven by STC89C52chip. The LCDS can accurately indicate hour 、 minute and second. Four buttons can be used to adjust the time. While in the software aspect, the programming language is C language. The whole electronic clock system has functions of time display, adjustment 、timing and three groups of alarm function. Choose the smallest SCM system applications,add Comparison procedures, time to adjust procedures and faint buzzing procedures, Through relatively faint buzzing trigger procedures to achieve alarm clock function, Completed the design needs of the software environment. Keil introduced and the use of SCM software simulation debugging, testing the feasibility and proteus by simulation.Keyword: single slice machine,in fixed time machine,break off,alarm clock,LCD1 设计方案论证1.1 应用近几年,单片机在各个领域得到广泛的应用。从工业到人们的日常生活,大部分的科技产品都是通过单片机来控制。在它问世之前,自动控制设备不能被广泛的应用,这是因为控制设备的体积庞大,耗电量大,价格昂贵。在第一台微处理器成功研制不久,第一个单片机就问世了。因为其小巧的体积,低功耗,以及高效的性能,单片机受到了大家的欢迎。今天,单片机成为了解决低复杂度,中等复杂度控制问题的传统选择。我们选择的方法是单片机开发设计使用的传统方法,通过本次设计,可以了解整个单片机开发的流程。 利用STC89C52单片机结合七段显示器完成的简易的定时闹铃时钟,干电路系统由秒信号发生器、“时、分、秒”计数器、译码器及显示器、校时电路、闹钟电路组成。秒信号产生器是整个系统的时基信号,它直接决定计时系统的精度,一般用石英晶体振荡器加分频器来实现。译码显示电路将“时”、“分”、“秒”计数器的输出送到七段显示译码驱动器译码驱动,通过LCD液晶显示屏显示出来。闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。通过设置现在的时间及显示闹铃设置时间,并在定时时间发出一阵声响,可以进步扩充控制电器的启停等。1.2 方案选择用单片机来设计数字钟,软件实现各种功能比较方便,但因软件的执行需要一定的时间,所以就会出现误差。因此我进一步努力,通过对比实际的时钟,查找出误差的来源,并作出调整,使得误差尽可能减小,达到实际数字钟系统的允许误差范围。在程序设计中,采用模块化的程序设计思想,对整个设计划分了若干个模块,先对各个模块分别进行设计,然后整合各个模块,进行仿真模拟,对出现的错误进行分析,然后找出问题的所在,改进程序,再仿真模拟,观察结果、分析结果,直至最终结果满足设置要求。电子闹钟应包括秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分。按键功能说明:K1,设置时间和闹钟的小时;K2,设置小时以及设置闹钟的开关;K3,设置分钟和闹钟的分钟;K4;设置完成退出。1.3 总设计框图及分析CPU按钮电路复位、时钟等电路电源系统闹铃声指示电路液晶显示器显示电路 图 1电子闹钟的主电路指的是图中CPU线框内部分,主要涉及到CPU电路和按键按钮电路。主机的设计具体地说有:1)系统时钟电路设计;2)系统复位电路设计;3)按键与按钮电路设计;4)闹铃声指示电路设计。本设计是定时闹钟的设计,由单片机STC89C52芯片和LCD显示器为核心,辅以必要的电路,构成的一个单片机电子定时闹钟。电子钟设计可采用数字电路实现,也可以采用单片机来完成。数字电子钟是用数字集成电路构成的,用数码管显示“时”,“分”,“秒”的现代计时装置。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低,所以在该设计中采用单片机利用STC89C52,它是低功耗、高性能的CMOS型8位单片机。片内带有4KB的Flash存储器,且允许在系统内改写或用编程器编程。另外, STC89C52的指令系统和引脚与8051完全兼容,片内有128B 的RAM、32条I/O口线、2个16位定时计数器、5个中断源、一个全双工串行口等。STC89C52单片机结合七段显示器设计的简易定时闹铃时钟,可以设置现在的时间及显示闹铃设置时间,若时间到则发出一阵声响,进步可以扩充控制电器的启停。设计内容包括了秒信号发生器、时间显示电路、按键电路、供电电源以及闹铃指示电路等几部分的设计。采用四个开关来控制定时闹钟的工作状态,分别为:K1、设置时间和闹钟的小时;K2、设置小时以及设置闹钟的开关;K3、设置分钟和闹钟的分钟;K4、设置完成退出。设计完成的定时闹钟达到课程设计的要求,在到达到定时的时间时就会立即发出蜂鸣声音,持续一分钟。显示采用的六位数码管电路,如果亮度感觉不够,可以通过提升电阻来调节,控制程序中延迟时间的长短,可以获得不同的效果。也可以改蜂鸣器为继电器,通过控制继电器从而进一步扩展的来控制一些家电开关。2 硬件电路设计2.1 系统时钟电路设计对于时间要求不是很高的系统,只要按图进行设计就能使系统可靠起振并稳定运行。但由于原理图中的C1、C2电容起着系统时钟频率微调和稳定的作用,因此,在本闹钟系统的实际应用中一定要注意正确选择参数(30±10 PF),并保证对称性(尽可能匹配),选用正牌厂家生产的瓷片或云母电容,如果可能的话,温度系数要尽可能低。实验表明,这2个电容元件对闹钟的走时误差有较大关系。2.2系统复位电路的设计智能系统一般应有手动或上电复位电路。复位电路的实现通常有两种方式:)RC复位电路;)专用µF监控电路。前者实现简单,成本低,但复位可靠性相对较低;后者成本较高,但复位可靠性高,尤其是高可靠重复复位。对于复位要求高、并对电源电压进行监视的场合,大多采用这种方式。2.3闹钟指示电路设计闹铃指示可以有声或光两种形式。本系统采用声音指示。关键元件是蜂鸣器。蜂鸣器有无源和有源两种,前者需要输入声音频率信号才能正常发声,后者则只需外加适当直流电源电压即可,元件内部已封装了音频振荡电路,在得电状态下即起振发声。市场上的有源蜂鸣器分为3、5、6等系列,以适应不同的应用需要。闹钟电路是用比较器来比较计时系统和定时系统的输出状态,如果计时系统和定时系统的输出状态相同,则发出一个脉冲信号,再和一个高频信号混合,送到放大电路驱动扬声器发声,从而实现定时闹响的功能。其电路设计参见系统原理图。2.4 电子闹钟的显示电路设计本次课程设计采用了液晶显示电路。液晶显示是一种被动式的显示器,即液晶本身不发光,而是利用液晶处理后能够改变光纤传输方向的特性,达到显示字符或者图形的目的。这类显示器具有体积小、重量轻、功耗较低、显示内容丰富等特点。LCD显示模块把LCD显示屏、背景光源、线路板和驱动集成电路等部件构成一个整体,作为一个独立部件使用,具有功能较强、易于控制、接口简单等优点。LCD显示模块按显示功能可分为:LCD段式显示模块、LCD字符型显示模块、LCD图形式显示模块三类,在本设计中将会采用字符型显示模块。LCD显示器内部共有14个引脚,包括:8个数据引脚,3个控制引脚,3个电源引脚。利用该显示器来显示“时”、“分”、“秒”计数器的输出状态。到达定时电路时根据计时系统的输出状态产生一脉冲信号,然后去触发一音频发生器实现闹铃。校时电路时用来对“时”、“分”、“秒”显示数字进行校对调整的。2.5 仿真图运行仿真图3 程序设计3.1 概述软件设计的重点在于秒脉冲信号的产生、显示的实现、以及按键的处理等方面。基于软件的秒脉冲信号通常有延时法和定时中断法。延时法一般采用查询方式,在延时子程序前后必然需要查询和处理的程序,导致误差的产生,因此其秒脉冲的精度不高;中断法的原理是,利用单片机内部的定时器溢出中断来实现。例如,设定某定时器每100ms中断1次,则10次的周期为1s。这种实现法的特点是精度高,秒脉冲的发生和其他处理可以并行进行。本系统中所使用的晶振频率为12MHZ。3.2 主模块的设计主模块是系统软件的主框架。结构化程序设计一般有“自上而下”和“自下而上”两种方式,“自上而下”法的核心就是主框架的构建。它的合理与否关系到程序最终的功能的多少和性能的好坏。本系统的主模块的程序框图如下图2所示:系统初始化定时初始化中断初始化串口初始化显示待机指示符设定闹铃时间判设置闹铃时间否?显示刷新启动走时有关变量初始化刷新显示判时或分变化否?秒指示判秒到否?闹铃判是否到闹铃时间?延时YYYY图 23.3 基本显示模块设计基本显示模块设计的重点是由显示代码取得相应的段码,显示段码数据的并行发送,高精度的计时工具大多数都使用了石英晶体振荡器,由于电子钟,石英表,石英钟都采用了石英技术,因此走时精度高,稳定性好,使用方便,不需要经常调校,数字式电子钟用集成电路计时时,译码代替机械式传动,用LCD显示器代替显示器代替指针显示进而显示时间,减小了计时误差,这种表具有时,分,秒显示时间的功能,还可以进行时和分的校对,片选的灵活性好。程序流程如图3所示将进制时分秒数据转化为显示代码 关显示以免显示抖动通过串口将时分秒数据传入数码管打开显示图 33.4 时间设定模块设计时间设定模块的设计要点是按键的去抖处理与“一键多态”的处理。即只涉及4个键完成了6位时间参数的设定。软件法去抖动的实质是软件延时,即检测到某一键状态变化后延时一段时间,再检测该按键的状态是否还保持着,如是则作为按键处理,否则,视为抖动,不予理睬。去抖中的延时时间一般参考资料多描述为10ms左右,实际应用中,应大于20ms,否则,会导致按一次作多次处理,影响程序正常执行。“一键多态”即多功能键的实现思想是,根据按键时刻的系统状态,决定按键采取何种动作,即何种功能。其流程图如下图4所示:设置键吗?设置模块初始化将在编参数送显示缓冲区闪烁标志为真?将当前位的显示代码置暗代码调基本显示模块刷新显示设置键吗?当前编辑位下移(下一位)当前编辑的是分各位?结束设定键吗?根据当前位的性质分别进行处理(含上下限判断) 图 43.5 闹铃功能的实现闹铃功能的实现涉及到两个方面:闹铃时间设定和是否闹铃判别与相应处理。闹铃时间设定模块的设计可参照时间设定模块,这里着重阐述闹铃判别与处理模块的设计问题。闹铃判别与闹铃处理的关键在于判别何时要进行闹铃。当时十位、时个位、分十位、分个位中任一位发生改变(进位)时,就必须进行闹铃判别。译码显示电路将“时”、“分”、“秒”计数器的输出送到七段显示译码驱动器译码驱动,通过六个七段LCD显示器显示出来。闹铃电路根据计时系统的输出状态产生一脉冲信号,然后加上一个高频或低频信号送到放大电路驱动蜂鸣器发声实现报时。校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。其流程图如下所示:时十位、个位,分十位、个位改变了设置闹铃标志是否设置了闹铃清除闹铃标志判当前时间是设定时间中断返回中断返回闹铃判别处理图5.1 图5.2虑到实用性,在该电子钟的设计中修改定时或调整时间时采用了闪烁,而且以定时20组闹钟。在编程上,首先进行了初始化定义了程序的入口地址以及中断的入口地址,在主程序的开始定义了一组固定单元用来存储计数的秒,分,时以及定时时间的序号等。在显示程序段中主要进行了闪烁的处理,采用定时器中断置标志位,再与位选相互结合的方法来控制调时或定时中的闪烁。时,分,秒显示则是用了软件译码(查表)的方式,再用了一段固定的程序段进行进制转化。初始化之后,用中断方式对其计数,计数的同时采用了定时器比较的方法,比较当前计数时间与定时时间是否相等,若相等则将闹铃标志位置数。由于定义了定时闹钟组,在这里采用中断组次,每中断一次比较一组闹钟,避免了一次比较中断时间过长,影响下次中断时间。显示之后查询闹铃标志位是否与前面所置数相等,若相等则响铃。为了避免响铃影响显示,采用了每显示几屏以后在显示程序中出现脉冲,驱动喇叭,不会影响显示。之后用查询方式对按键进行判断,若有键按下,则进行软件延时消抖,避免了抖动引起的干扰,执行相应的定时,选时或调时程序段。对当前时间或定时时间修改后又返回到最初的显示程序段,如此循环下去。3.6程序*版本号01 */* 模块构成: */#include <REG51.H>#include"hdy.h" #include"hs.c"#include"iap_ds1302.h" #include"lcd1602.h" #include"zd.h"#include"isp_52.h"/#include"szxt.h"#include"ajjc.h"#define bgsjcl 30 /背光时间#define xssjcl 100 /显示时间#define jbjcyssj 2 /警报解除延时/定义端口sbit fmqdk=P03; /闹钟端口sbit lcd_bg=P32; /背光/时间相关变量uchar mmzc=0; /秒暂存uchar nzsj42=0,0,0,0,0; /警戒时间bit bjsnbzw=0;char xlys_t=0;struct nzjg /定义结构体闹钟数据结构 / 包含: uchar nzsj_ss; /闹钟时间_时 uchar nzsj_ff; /闹钟时间_分 uchar nzsnbz; /闹钟标志 0:禁止 1:允许 uchar xlsj; /响铃时间 ;struct nzjg nz1,nz2,nz3,nz4,nz5,nz6; /模式 菜单 相关变量 显示相关变量char msbz=0,xxbz=0; /模式标志位,选项标志位 bit xsgxbzw=0,xscshbzw=0,xssnbzw=1,bgsnbzw=1; /显示更新标志位,显示初始化标志位,char bgsj_t=bgsjcl,xssj_t=xssjcl; /显示相关 显示使能时间,背光使能时间/调试用变量int a_ts=50,b_ts=50,c_ts=0,d_ts=0,e_ts=0,f_ts=0;bit bzw_ts=0;/* * */* * */void csmk()/ ksdqsj(); / lcd1602xssz (2,0x1e,mm);/测试模块/测试模块/测试模块/测试模块/测试模块/测试模块/测试模块/测试模块/测试模块/* * */* * */设定基础程序/功能加减设定/参数1:设定变量指针 uchar *sdbl/参数2:加上限 uchar shang/参数3:减下线 uchar xia/返回值:是否越界 char 上限越界:1 下线越界-1 否则:0uchar jjcl(uchar sdbl,uchar shang,uchar xia)char a=0; if(k1bzw=1) k1bzw=0; if(sdbl>=shang) (sdbl)+; sdbl=xia; a=1; else (sdbl)+; if(k2bzw=1) k2bzw=0; if(sdbl<=xia) (sdbl)-; sdbl=shang; a=-1; else (sdbl)-; return sdbl;/时间设定void ajsd2()uchar sx,xx,*szbl; if(xxbz!=0) switch(xxbz) case 1:sx=99;xx=0;szbl=&nnn;break; case 2:sx=12;xx=1;szbl=&yyy;break; case 3:sx=31;xx=1;szbl=&rrr;break; case 4:sx=23;xx=0;szbl=&sss;break; case 5:sx=59;xx=0;szbl=&fff;break; case 6:sx=0 ;xx=0;szbl=&mmm;break; *szbl=jjcl(*szbl,sx,xx); /闹钟时间设定void ajsd3() / struct nzjg *nzzz; if(xxbz!=0) switch(msbz) case 2:nzzz=&nz1;break; case 3:nzzz=&nz2;break; case 4:nzzz=&nz3;break; case 5:nzzz=&nz4;break; case 6:nzzz=&nz5;break; case 7:nzzz=&nz6;break; if(xxbz=1) nzzz->nzsj_ss=jjcl(nzzz->nzsj_ss,23,0); else if(xxbz=2) nzzz->nzsj_ff=jjcl(nzzz->nzsj_ff,59,0); else if(xxbz=3) nzzz->xlsj=jjcl(nzzz->xlsj,99,5); else if(xxbz=4) if(k2bzw=1)|(k1bzw=1) k2bzw=0; k1bzw=0; if(nzzz->nzsnbz=1) nzzz->nzsnbz=0; else nzzz->nzsnbz=1; /按键处理模块void ajclmk() ajjc(); if(k0bzw=1)|(k1bzw=1)|(k2bzw=1)|(k3bzw=1) if(xssj_t=0) k0bzw=0; msbz=0; xsgxbzw=1; bgsj_t=bgsjcl; /使能显示相关变量 xssj_t=xssjcl; if(k0bzw=1) k0bzw=0; xxbz=0; xscshbzw=0; / 标记为未初始化 msbz+; if(msbz=8) msbz=0; if(k3bzw=1) k3bzw=0; xsgxbzw=1; xxbz+; if(msbz=1) if(xxbz=7) xxbz=0; ksxrsj(); ksdqsj(); msbz=0; xscshbzw=0; else if(msbz>1) if(xxbz=5) xxbz=0; msbz=0; xscshbzw=0; / iap_jjsjcc(); switch(msbz) case 1:ajsd2();break; /时间设定 case 2: case 3: case 4: case 5: case 6: case 7:ajsd3();break; /警戒设定 /* * */显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模块/显示模式0 时间显示/显示时间void xsms0() if(xscshbzw=0) xscshbzw=1; / 标记为已初始化 lcd1602csh ();