




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机课程设计论文题 目:基于STC89C52单片机的电子时钟(日历)学 院: 材料与光电物理学院专 业: 测控技术与仪器二班 姓 名: 杨双卉 学 号: 指导教师: 王子涵 副教授 同组成员: 陈小江 完成日期: 2011年9月7日 目 录目录-1摘要-2一、 实验要求-2二、 实验主要元器件介绍-32.1 STC89C52单片机简介-32.2 LCD1602简介-62.3 软件平台-7三、 实验原理与设计内容-7 3.1 实验原理-7 3.2 三个组成部分-73.3 键盘控制模块-8四、 调试过程-8 4.1 硬件调试-8 4.2 软件调试-9 4.3 测试数据与数据分析-9五、 程序流程
2、图-10六、 任务分工与成果展示-116.1 前期准备-116.2 课程设计过程-116.3 个人主要工作及遇到问题-116.4 成果展示-12七、 课程设计总结思考与致谢-13八、 参考文献-14附录一:(程序)-15附录二:(原理图)-25附录三:(实物图)-25附录四:(元件清单)-26摘要:数字电子钟系统设计已经成熟,但是目前系统设计时基本都是采用LED作为显示电路,造成硬件电路复杂、功耗高、产品体积庞大等特点;液晶显示模块由于具有低功耗、寿命长、体积小、显示内容丰富、价格低、接口控制方便等优点,因此在各类电子产品中被极广泛地推广和应用。字符型液晶显示模块是一类专门用于显示字母、数字、
3、符号等点阵式液晶显示模块。本系统设计采用字符型液品显示模块LCD1602作为显示器件,这样不仅简化了系统的硬件设计,而且极大地提高了系统的可靠性。本文详细介绍了以液晶显示器LCD1602作为系统输出的数字电子钟设计方案,其中包括LCD原理及接口方法、硬件电路设计、软件程序编制等内容,并在Proteus中进行了仿真验证。关键词:STC89C52单片机、电子时钟、键盘控制、Proteus仿真。一、实验要求课题名称:基于单片机STC89C52的电子时钟(附加日历功能)。设计要求:本设计基于单片机技术原理,以单片机芯片STC89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个
4、多功能数字时钟系统。单片机扩展的LCD显示器用来显示秒、分、时、日、月、年、星期七个计数单元中的值。目的及意义:随着计算机科学与技术的飞速发展,计算机的应用已经渗透到国民经济与人们生活的各个角落,正在日益改变着传统的人类工作方式和生活方式, 而单片机技术又作为计算机技术中的一个独立分支,有着性价比高,集成度高,体积小,可靠性高,控制功能强大,低功耗,低电压,便于生产,便于携带等特点,所以得到越来越广泛的应用,特别是在工业控制和仪表仪器智能化中起极其重要的作用.本文利用单片机强大的控制功能和内部定时器重要部件,设计了一款自行对时间进行调整以及把时、分、秒用LCD显示的电子钟。二、实验主要元器件介
5、绍2.1、 STC89C52单片机简介STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器,俗称单片机。该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。单片机总控制电路如下图1:图41单片机总控制电路(图一)主要特性如下: 工作电压:5.5v 3.3v(5v单片机)/3.8v 2.0v(3v单片机) 工作频率范围:040MHZ,相当于8051的080MHZ,实际工作频率可大48MHZ。
6、用户应用程序空间为8K字节 片上集成512字节RAM 通用I/O口(32个),复位后为:P1/P2/P3/P4是准双向口/弱上拉,P0是漏极开路输出,作为总线扩展用时,不用加上拉电阻,作为I/O口使用时,需加上拉电阻。 具有EEPROM功能与看门狗功能 具有3个16位的定时器/计数器。及定时器T0.T1.T2。工作模式:l 掉电模式:典型功耗小于0.1uA,可由外部中断唤醒,中断返回后,继续执行原程序。l 正常工作模式:典型功耗4mA7mAl 空闲模式:典型功耗2mAP0口:是一组8 位漏极开路型双向IO 口,也即地址数据总线复用口。作为输出口用时,每位能吸收电流的方式驱动8个TTL逻辑门电路
7、,对端口写“1”可作为高阻抗输入端用。在访问外部数据存储器或程序存储器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。在FIash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。 P1口:是一个带内部上拉电阻的8位双向IO口,P1的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。FIash编程和程序校验期间,P1接收低8位地址。P2口:是一个带有内部上拉电阻的8位双向
8、IO口,P2的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(IIL)。在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。在访问8 位地址的外部数据存储器(如执行MOVXRI 指令)时,P2 口线上的内容(也即特殊功能寄存器(SFR)区中R2寄存器的内容),在整个访问期间不改变。Flash编程或校验时,P2亦接收高位地址和其它控制信号。P3口:是一组带有内部上拉电阻的8 位双向IO
9、口。P3 口输出缓冲级可驱动(吸收或输出电流)4 个TTL逻辑门电路。对P3 口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3 口将用上拉电阻输出电流(IIL)。P3口除了作为一般的IO口线外,更重要的用途是它的第二功能,如下表所示:P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。RST 复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将使单片机复位。ALEPROG: 当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE 仍以时钟振荡频率的l6 输出固定的正脉
10、冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。2.2、 LCD1602简介 液晶显示屏LCD1602(如图3)以其微功耗、体积小、显示内容丰富、超薄轻巧的诸多优点在袖珍式仪表和低功耗应用系统中得到越来越来广泛的应用。这里介绍的是字符型液晶模块是一种5*7点阵图形来显示字符的液晶显示器,根据显示内容可分为1行16个字、2行16个字、2行20个字等等,本设计用的是常用的2行16个 图2 字的1602液晶模块。主要用于显示时间和定时时间,并且具有字符对比度调节和背光功能。 其引脚功能如下:u 第1脚:VSS为地电源 u 第2脚:VDD接5V正电
11、源 u 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度 u 第4脚:RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。 u 第5脚:RW为读写信号线,高电平时进行读操作,低电平时进行写操作。当RS和RW共同为低电平时可以写入指令或者显示地址,当RS为低电平RW为高电平时可以读忙信号,当RS为高电平RW为低电平时可以写入数据。 u 第6脚:E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。 u 第714脚:D0D7为8位双向数据线。u 第1516脚:空脚2.3软件
12、平台1)Keil 编程 Keil 的开发工具的使用的基本过程: 1 创建 C 或汇编语言的源程序; 2 编译或汇编源文件; 3 纠正源文件中的错误; 4 从编译器和汇编器连接目标文件; 5 测试连接的应用程序。2)Proteus 仿真 Proteus 软件不仅具有其它 EDA 工具软件的仿真功能,还能仿真单片机及外围器 件。 它是目前最好的仿真单片机及外围器件的工具。 在编译方面, 它也支持 IAR, Keil, PLAB 等多种编译器。三、实验原理与设计内容3.1 实验原理电子钟从原理上讲是一种典型的数字电路,其中包括了组合逻辑电路和时序电路。因此,我们此次设计与制做数字钟就是为了了解数字钟
13、的原理,从而学会制作数字钟.而且通过数字钟的制作进一步的了解各种在制作中用到的中小规模集成电路的作用及实用方法.且由于数字钟包括组合逻辑电路和时叙电路.通过它可以进一步学习与掌握各种组合逻辑电路与时序电路的原理与使用方法。本设计基于单片机技术原理,以单片机芯片AT89C52作为核心控制器,通过硬件电路的制作以及软件程序的编制,设计制作出一个多功能数字时钟系统。单片机扩展的LCD显示器用来显示秒、分、时计数单元中的值。整个设计包括两大部分: 硬件部分和软件部分,以单片机为核心, 配以一定的外围电路和软件。硬件是整个系统的基础, 软件部分则要合理、充分地支持和使用系统的硬件, 从而完成系统所要完成
14、的任务。3.2 三个组成部分该时钟系统主要由时钟模块、液晶显示模块、键盘控制模块以及信号提示模块组成。能够准确显示时间(显示格式为时时:分分:秒秒,24小时制),可随时进行时间调整。设计以硬件软件化为指导思想,充分发挥单片机功能,大部分功能通过软件编程来实现,电路简单明了,系统稳定性高。单片机在这种情况下诞生了基于单片机电子时钟。3.3 键盘控制模块按键中有一个复位键及定时键、调时键加一键和减一键,一个按键接在复位电路上,另外四个按键接在P0P4口,低电平表示有按钮按下;按钮没有接防抖电路,需要设计软件防抖。1、定时。按下定时键后可以开始定时,过程如下:定时-小时加/减-按定时-分钟加/减-按
15、定时。2、调时。按下调时键后可以调时,过程如下:调时-年加/减-调时-月加/减-调时-日加/减-调时-时加/减-调时-分加/减-调时-秒加/减 -调时。四、调试过程调试的主要过程包括硬件调试和软件调试,其中软件调试,也即程序编译与仿真过程处于本次设计调试过程的核心环节。由于本设计已经制作出液晶显示电子钟,所以硬件调试也很重要。两种调试过程并非孤立或者分开的,而是紧密相关。在此我们用到的开发工具是仿真器。4.1 硬件调试完成仿真器软件仿真后,就要连接上硬件也即液晶显示电子钟成品板进行硬件调试。将仿真器通过串行电缆连接计算机上,将仿真头接到仿真器,检查接线是否有误,确信没有接错后,接上电源,打开仿
16、真器的电源开关。再进行仿真器和通信设置。仿真器和仿真头设置正确,并且硬件连接没有错误,出现 “硬件仿真”的对话框,并显示仿真器、仿真头的型号及仿真器的序列号。表明仿真器初始化正确。硬件调试很重要也很麻烦,由于本次设计硬件非PCB制板,而是手工焊板,焊点质量、布线是否合理等对系统的影响比较大,这无疑增加硬件调试的难度。由于此前没有很多的练习,本次设计我所制作的液晶显示电子钟在质量工艺上很难达到满意程度,不过在调试中还算稳定,基本功能都能较稳定地实现。难达到满意程度,不过在调试中还算稳定,基本功能都能较稳定地实现。4.2 软件调试系统仿真分析电路原理图在ISIS里设计完成,并将系统软件编译成.He
17、x文件,再进行电子时钟的系统虚拟仿真。(1)在ISIS的原理图中,右键单击AT89C51将其选中,然后单击左键打开AT89C51的Edit Component 对话框,如下图所示。(2)选择相应的.Hex文件,再在Proteus ISIS 编辑窗口的File菜单中选择Save Design 选项,保存设计,生成.DSN文件。4.3 测试数据与数据分析在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如下图所示。 (图三) 实现功能的具体方法:当进入调整功能时,按第一个键K1进行减运算,按第二个键K2进行加运算。按下第三个键K3,实现日期时间调整及定时功能,等
18、数字闪烁后,按一二键进行加减,从而可以进行具体日期时间调整。按下第四个键K4,可以进行时间日期切换,将显示时间或日期,采用24小时制。时间显示格式为:时-分-秒;日期显示格式为:日-月-年。具有显示时间和日期的功能五、程序流程图 流程图如下: (图四)六、任务分工与成果展示6.1 前期准备: 在课程设计前期,我和小江分好任务,便开始着手查阅资料、调研,通过查阅有关书籍、论文,最终确定课题为基于STC89C52单片机的电子时钟。6.2 课程设计过程设计电路图,并根据所设计电路图和单片机工作原理,为实现电子钟附带日历及复位功能,在书上查找资料程序,并自己进行编程。经反复调试和修改,最终编译通过,p
19、roteus仿真成功,LCD显示器能根据程序要求来显示时间并可通过开关进行显示位的选择和时间的加减,而且按复位键可以回到初始设置,即程序中设计的2011-5-18 WED 23:59:20。将所编程序置入单片机内,并按照所设计电路图在面包板上连线。经反复连线、检查元件、检查线路、检验程序,最终终于演示通过。按照电路图,将各元器件焊接在电路板上,再用万用表检验线路是否有空焊、短路等情况,进一步处理。显示器正常显示时间,并能达到预期目标。课程设计完成。6.3 个人主要工作及遇到问题在本次课程设计中我主要负责软件方面的程序的查找修改和硬件方面的焊接工作。过程中遇到了各种问题。程序的主体是查找资料得出
20、的,中间加入了自己的修改。但是在改动过程中,几次运行不成功。经多次检查和修改,向同学请教,最终编译通过。Proteus仿真过程是另一同学完成的。在硬件方面,另一同学负责排线布局,我负责手工焊接。在面包板上几次调试都不成功,显示器亮的却不显示数字。曾怀疑线路连错、元器件有损坏、背光没有调好等问题,后经一一排除。接着就用万用表测每条线路是否正常,终于发现有些应该是高电平却不是,经过分析讨论,认为可能是有接触不良。后借了其他组的面包板尝试,几经波折,终于演示成功。焊接过程也是很容易出错。焊好后接通电源,显示屏不亮,经检查,发现有一处短路。稍作处理后,我们努力了一个星期的电子时钟就成功了。6.4 成果
21、展示 (焊接工艺与排线布局)七、课程设计总结思考与致谢我们进行了为期两周的课程设计成功结束了,时间虽短,但收获颇多。这次的课程设计,是一个崭新的体验,是一个学习的平台,是一次兴趣的启迪,是尝试着自己动手实践的开始,是现实与需求之间差距的体现,也是一个认识与改变的过程。安排课程设计的基本目的,是在于通过理论与实际的结合、人与人的沟通,进一步提高思想觉悟和领悟力。尤其是观察、分析和解决问题的实际工作能力。作为整个学习体系的有机组成部分,课程设计虽然安排在两周进行,但并不具有绝对独立的意义。它的一个重要功能,在于运用学习成果,检验学习成果。运用学习成果,把课堂上学到的系统化的理论知识,尝试性地应用于
22、实际设计工作,并从理论的高度对设计工作的现代化提出一些有针对性的建议和设想。检验学习成果,看一看课堂学习与实际工作到底有多大距离,并通过综合分析,找出学习中存在的不足,以便为完善学习计划,改变学习内容与方法提供实践依据。对于我们理工类的本科生来说,实践能力如何是至关重要的。而这种能力在课堂上是学习不到的,必须从书本走向实践。无论课本上的原理如何经典,课文中的描述如何生动,我们都只能理解,只能想象。可是这次的课程设计让我们拥有了一个全新的体验,与课堂完全不同,是一种耳目一新的感觉。许多人见看那些小小的元器件会说出:“原来这就是电容啊”“原来电阻这么小”“原来这又四十个引脚的小芯片就是我们所学的单
23、片机啊”。有人说兴趣是最好的老师。那么我想,在那一刻,许多人的兴趣都被激发出来了。课程设计过程中,我们也遇到了各种各样问题,在面包板上几次调试都不成功,显示器亮的却不显示数字。曾怀疑线路连错、元器件有损坏、背光没有调好等问题,后经一一排除。接着用万用表测每条线路是否正常,终于发现有些应该是高电平却不是,有些该有电压差却没有,经过分析讨论,认为可能是有接触不良。后借了其他组的面包板尝试,几经波折,终于演示成功。在设计中我主要负责的是硬件布线、焊接工作。无论是布线还是焊接都是精细的活,且他们的重要性是相当的。布线布的好,焊接起来不但整体布局美观,同时能省时省力,而且减少空焊、落焊的几率。焊接确实要
24、精中有细。在其他的组中都是男生在焊接,因为也许他们认为拿着烙铁焊东西不适合女生做,我却不这么认为。男生粗手粗脚,不细心,这样的活交给他们很可能会焊成一片,在我的自告奋勇下,带着组员的信任,我把事先布好的导线与引脚一个一个的焊好。不只要细,还要精、稳,每次焊接结束时抬手要果断迅速。我觉得只要心细、手稳,焊接一点都不难。焊好后接电源,起初不亮,经检查有一处短路,稍作处理,我们的显示就正常了。成功的心情自然愉快,我焊好的板子在班级里几乎是最漂亮、问题最少的,为此我也窃喜了一下。课程设计达到了专业学习的预期目的。在一个多星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,而且掌握单片机开发编程设
25、计的基本流程,了解 Keil 及 Proteus 软件的基本使用,了解 LCD 的基本使用,并且学习了单片机硬件制作。在课程实际和制作过程中进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。通过这次课程设计,我们也看到了自身状况与现实需要的差距,有了这样的认识,便于我们在今后的学习中及时补充和调整。我相信这次课程设计会对我以后的工作会有很大程度的益处,在此还要感谢学院为我们提供这次机会,感谢王子涵老师的用心指导!八、参考文献附录1:(程序)#include#define uchar unsigned charvoid write_hms(uchar,uch
26、ar);void time_setup();uchar a,count,hh,mm,ss,year,year0=20,year1=11,mon=5,day=18,flagy,flagw=3,flagk;uchar code table0= 2011-05-18 WED;uchar code table1= 00:00:00;sbit RS=P20; / 数据/命令选择端(H/L)sbit LE=P21; / 使能信号sbit kfun=P22; /功能键sbit kadd=P23; /增加sbit ksub=P24; /减少void delay(uchar z) uchar x,y; for(
27、x=z;x0;x-) for(y=110;y0;y-); void write_com(uchar com) RS=0; /写命令 P0=com; delay(5); LE=1; delay(5); LE=0; void write_data(uchar Data) RS=1; /写数据 P0=Data; delay(5); LE=1; delay(5); LE=0; void init() LE=0;/初始化使能信号 write_com(0x38);/设置显示模式 write_com(0x0c);/显示开关、光标设置 write_com(0x06);/屏幕移动操作 write_com(0x8
28、0);/写入数据地址 write_com(0x01);/清屏 /写入初始化显示值 write_com(0x80); for(a=0;a15;a+) write_data(table0a); delay(5); write_com(0x80+0x40); for(a=0;a31)&(mon=1|mon=3|mon=5|mon=7|mon=8|mon=10|mon=12) |(day30)&(mon=4|mon=6|mon=9|mon=11)|(day29)&(mon=2)&(flagy=1)|(day28)&(mon=2)&(flagy=0)day=1; mon+; if(mon=12) mon
29、=1; year1+; if(year1=100) year0+; year1=0; if(year0=100) year0=20;year1=8; year=year0*100+year1; flagy=(year%4=0&year%100!=0)|(year%400=0); write_hms(1,year0); write_hms(3,year1); write_hms(6,mon); write_hms(9,day); write_hms(0x40+3,hh); write_hms(0x40+6,mm); write_hms(0x40+9,ss); void keysan() if(k
30、fun=0) delay(5); if(kfun=0) while(!kfun); flagk+; TR0=0; switch(flagk) case 0: break; /等待中. case 1: /设置秒 write_com(0x80+0x40+10); write_com(0x0d); if(kadd=0) delay(5); if(kadd=0) while(!kadd); ss+; if(ss=60) ss=0; write_hms(0x40+9,ss); write_com(0x80+0x40+10); else if(ksub=0) delay(5); if(ksub=0) wh
31、ile(!ksub); ss-; if(ss=255) ss=59; write_hms(0x40+9,ss); write_com(0x80+0x40+10); break; case 2:/设置分 write_com(0x80+0x40+7); write_com(0x0d); if(kadd=0) delay(5); if(kadd=0) while(!kadd); mm+; if(mm=60) mm=0; write_hms(0x40+6,mm); write_com(0x80+0x40+7); else if(ksub=0) delay(5); if(ksub=0) while(!k
32、sub); mm-; if(mm=255) mm=59; write_hms(0x40+6,mm); write_com(0x80+0x40+7); break; case 3:/设置时 write_com(0x80+0x40+4); write_com(0x0d); if(kadd=0) delay(5); if(kadd=0) while(!kadd); hh+; if(hh=24) hh=0; write_hms(0x40+3,hh); write_com(0x80+0x40+4); else if(ksub=0) delay(5); if(ksub=0) while(!ksub); h
33、h-; if(hh=255) hh=23; write_hms(0x40+3,hh); write_com(0x80+0x40+4); break; case 4: /设置日 write_com(0x80+10); write_com(0x0d); if(kadd=0) delay(5); if(kadd=0) while(!kadd); day+; if(day31)&(mon=1|mon=3|mon=5|mon=7|mon=8|mon=10|mon=12) |(day30)&(mon=4|mon=6|mon=9|mon=11)|(day29)&(mon=2)&(flagy=1) |(day
34、28)&(mon=2)&(flagy=0) day=1; write_hms(9,day); write_com(0x80+10); else if(ksub=0) delay(5); if(ksub=0) while(!ksub); day-; if(day=0) switch(mon) case 1: case 3: case 5: case 7: case 8: case 10: case 12:day=31;break; case 4: case 6: case 9: case 11:day=30;break; case 2: if(flagy=1) day=29;break; elseday=28;break; write_hms(9,day); write_com(10); break; case 5: /设置月 write_com(0x80+7); write_com(0x0d); if(kadd=0) delay(5); if(kadd=0) while(!kadd); mon+; if(mon=13) mon=1; write_hms(6,mon); write_com(0x80+7); else if(ksub=0) delay(5); if(ksub=0) while(!ksub); mon-; if
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论