基于AT89C51单片机的数字时钟设计_第1页
基于AT89C51单片机的数字时钟设计_第2页
基于AT89C51单片机的数字时钟设计_第3页
基于AT89C51单片机的数字时钟设计_第4页
基于AT89C51单片机的数字时钟设计_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、安徽商贸职业技术学院 毕业设计(论文)安徽商贸职业技术学院毕 业 论 文 设 计 课题:基于at89c51单片机的数字时钟设计系部:学制: 专业:姓名: 学号: 2014 年xx月xx日 摘 要本设计以数字集成电路技术为基础、单片机技术为核心。软件设计模块化结构、c语言编程。系统通过带字库的lcd12864显示数据,通过4*4矩阵键盘控制显示文字、公历日期(年、月、日、星期)、时间(时、分、秒) 文字反白、自定义字符、图片显示,可以通过键盘调整时间、日期,温度,同时按下键盘时,七段数码管显示相应键位的键位标识。在内容安排上首先描述系统硬件工作原理,着重介绍了各硬件接口技术和各个接口模块的功能;

2、其次,详细阐述了程序的各个模块和实现过程。关键词:单片机、数字温度日历表设计 引言仪器仪表的键盘显示系统,是实现通过键盘的控制,使lcd屏幕有相应的显示,广泛用于各个领域,如电脑、家电、数字仪器等,成为人们直观了解和控制仪器、设备的运行状态的重要依据,给人们的生活带了方便,成为现代人们生活、工作的必需品。数字化显示系统告别了以前老式的监控和计算仪器、设置状态方式,给人们带来了极大的方便。本设计是仪器仪表的控制显示模拟系统,所有的仪器仪表的控制显示系统都是以此为基础而扩展的。因此,研究仪器仪表的控制显示系统及扩大其应用有着非常现实的意义。本设计就是仪器仪表的控制显示系统简单的模拟和扩展应用。目

3、录摘要1引言11 设计要求41.1 基本要求41.2 发挥部分42 方案设计与论证42.1 控制部分方案论证42.2 显示部分方案论证53 系统框图及工作原理53.1 系统框图53.2 工作原理53.2.1硬件工作原理53.2.2软件工作原理64 硬件原理分析及设计64.1 单片机时钟电路64.2 单片机复位电路74.2.1复位电路的可靠性设计74.3 键盘电路84.4 显示电路84.4.1 lcd显示电路84.4.2七段数码管显示电路94.4 整体电路图104.5 系统硬件设计所需的元件125 软件设计125.1 软件总体设计及框图135.2 软件重要子程序设计及框图135.2.1显示部分1

4、35.2.2键盘扫描部分155.2.3时钟部分155.2.4延时部分176 硬件安装制作186.1 pcb板制作186.2 元件焊接18结 论19参考文献211 设计要求1.1 基本要求1)开机lcd液晶屏幕显示“10级电子信息工程xxxx毕业设计”信息。2)设计4x4矩阵键盘,分别对应键码“0-f”。3)按下任意一个按键,lcd液晶屏幕显示相应按键的信息(不同按键的显示内容可以自行设计)。1.2 发挥部分1)lcd液晶屏幕增加装饰图案。2)增加一个led数码管同步显示相应键码。3)增加一个led点阵同步显示相应键码。2 方案设计与论证2.1 控制部分方案论证方案一:可采用altera公司的f

5、lex10k系列pld器件。设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。但是考虑到本设计的特点,eda在功能扩展上比较受局限,而且eda占用的资源也相对多一些。从成本上来讲,用可编程逻辑器件来设计也没有什么优势,而以我们目前的条件在硬件和软件也无法实现本设计的各种要求。方案二:凌阳16位单片机有丰富的中断源和时基。它的准确度相当高,并且c语言的编程环境也很方便来实现一些递归调用。i/o口功能也比较强大,方便使用。用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。这些都方便对设计进行扩展,使设计更加完善。成本也

6、相对低一些。但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高,而且就需要完成这个仪器仪表的键盘显示模拟系统不太复杂的设计可以不必用凌阳16位单片机来完成。方案三:at89s52是8位单片机,提供的的四组8个i/o口能够实现既定功能,成本也不高。综合考虑最后选择用at89s52单片机来作为中心控制器件。2.2 显示部分方案论证方案一:使用lcd1602成本低,程序控制简单,但它只能显示16x2个半宽字型符,不能显示汉字,比较单调。方案二:带字库的由st7920控制的lcd12864硬件上提供8位,4位并行接口及串行接口供选择,6416 位字符显示 ram(dd

7、ram 最多 16 字符4 行,lcd 显示范围 162 行),2m 位中文字型 rom(cgrom),总共提供 8192 个中文字型(1616 点阵),16k 位半宽字型 rom(hcgrom),总共提供 126 个西文字型(168 点阵),6416 位字符产生 ram(cgram)。在软件上提供文字与图形混合显示、画面清除、光标归位、显示开/关 、光标显示/隐藏、显示字体闪烁、光标移位功能、显示移位、垂直画面旋转、反白显示、休眠模式的功能,相对于lcd1602来说功能丰富,而且已内建有gb码简体中文字型库,方便编程。综合以上方案,决定采用lcd12864(除非特殊说明,以下都简称lcd)作

8、为显示器件。3 系统框图及工作原理3.1 系统框图图1 系统框图3.2 工作原理3.2.1硬件工作原理硬件控制电路主要用了44矩阵键盘、at89s52芯片处理器、lcd和七段数码管。由at89s52处理器处理从44键盘发出的指令,通过lcd和七段数码管显示出相应按键的内容。3.2.2软件工作原理软件控制程序主要有主控程序、时间程序、lcd控制程序、时间及日期显示程序、键盘扫描程序等组成。主控程序中对整个程序进行控制,进行了时间和lcd初始化、lcd和数码管显示等控制。lcd显示程序是整个显示部分中的重要部分,包括写入命令、初始化、写入数据、数据显示、自定义gdram显示、绘图显示、反白显示等。

9、当lcd的rs=rw= 0,同时en由1变0时,可以对lcd写入基本指令和扩充指令;当rs=1,rw=0,同时en由1变0时,可以对lcd写入数据。对lcd端口写入不同的命令可以写入和显示不同的数据,具体命令请参考lcd12864和数据手册。lcd时间控制程序是时间程序重要的部分,时间控制程序体现了年、月、日、时、分、秒的计算方法。此设计采用at89s52自带的t0计时器进行计时,中断程序每隔50ms中断一次当作一个计数,每中断一次则计数加1,当计数20次时,则表示1秒到了,秒变量加1,同理再判断是否1分钟到了,再判断是否1小时到了,再判断是否1天到了,再判断是否1月到了,再判断是否1年到了,

10、若计数到了则相关变量清除0。先给出一般年份的每月天数。如果是闰年,第2月天数为29天,非闰年则有28天。在我们的这个设计中只设有100年的范围,判断是否闰年就只需要用该年份除以4来判断就行了。键盘扫描程序是整个设计的输入控制程序,44键盘占用单片机的8个i/o口。本设计的键盘扫描程序采用行列反转扫描法读取按键键值。单片机先让键盘行线输出全为0,然后读入列线值,再检测有无按键按下,去抖,再读入列线值,输出当前列线值,读入行线值,最后组合行、列线值,得到键盘的码值供调用。4 硬件原理分析及设计4.1 单片机时钟电路内部时钟电路如图所示,在xtal1和xtal2引脚上外接定时元件,内部振荡电路就产生

11、自激振荡。定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12mhz,电容采用30pf。图2 时钟电路4.2 单片机复位电路 影响单片机系统运行稳定性的因素可大体分为外因和内因两部分: (1)外因射频干扰,它是以空间电磁场的形式传递在机器内部的导体(引线或零件引脚)感生出相应的干扰,可通过电磁屏蔽和合理的布线/器件布局衰减该类干扰; 电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦合或直接传导,可通过电源滤波、隔离等措施来衰减该类干扰。(2)内因振荡源的稳定性,主要由起振时间频率稳定度和占空比稳定度决定 起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电

12、路的可靠性。4.2.1复位电路的可靠性设计复位是单片机的初始化操作。单片机启动运行时,都需要先复位,其作用是使cpu和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。因而,复位是一个很重要的操作方式。但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。复位电路的基本功能是:系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开 关或电源插头分-合过程中引起的抖动而影响复位。如图3所示。图3 复位电路4.3 键盘电路44键盘电路由44=16个按键组成,其中4列经过4个10k电阻接入vcc上拉,接入单片机

13、的p3口的高4位口,4行直接接入单片机低4位,当有按键按下时,由单片机控制8个i/o口读取出当前键值。图4 键盘电路 4.4 显示电路4.4.1 lcd显示电路lcd12864一共有20个引脚,其中4-15、17脚接入单片机的p0全部i/o口和p2的三个i/o口,是lcd与单片机通讯的桥梁。16号脚是空脚,1和20脚接地,2和19脚接vcc,其中3、18、19三个脚接可调电位器和电阻,组成调节lcd对比度电路。图4.4.1 lcd显示电路如图5所示。4.4.2七段数码管显示电路采用的是共阳数码管,它的8个脚接入p1全部i/o口,pnp三极管的发射极接vcc,集电极经过一个电阻限流接入数码管的公

14、共端,基极接单片机的p2.0口,由单片机给一个基极电流使三极管三极管导通,驱动数码管显示。如图6所示。21 图5 lcd显示电路 图4.4.2 数码管显示电路 图6 数码管显示电路 4.4 整体电路图根据以上各模块的功能互相连接成为此设计的整体电路, 图7 整体电路图4.5 系统硬件设计所需的元件表1 元件列表元件名称数量(个)元件名称数量(个)lcd12864112m晶振1at89s52芯片130pf瓷片电容2七段数码管110uf电解电容11k电阻5按键开关172k电阻1发光二极管251k电阻1排针1(排)10k电阻4插针1(排)10k电位器1自锁开关1103*8排阻15v电源15 软件设计

15、此设计名为仪器仪表的键盘显示模拟系统,顾名思义软件占很大比例。整个设计硬件比较简单,主要就是程序的写法,而软件的调试也是此设计的重点和难点。整个软件结构分为主控程序、显示部分程序、键盘扫描部分程序、时钟部分程序和延时程序。5.1 软件总体设计及框图图8 软件设计总体框图开机后,主控程序先让单片机给p2.0一个低电平,开启数码管显示,然后初始化lcd包括设置基本指令集、设置光标、设置显示模式等,接下来是时钟的初始化,包括开启定时和中断、时间的走时(秒、分、时、日、月、年、星期),最后就显示开机画面并开始扫描键盘,若有按键按下则lcd和数码管显示相应的内容,8号键作为设置日期和时间的阀门,按下第一

16、次时进入调整日期状态,第二次是调整时间,第三次调整温度,第四次返回。5.2 软件重要子程序设计及框图主控程序是建立在各子程序的基础上,各子程序写好后,由主程序调用。5.2.1显示部分显示部分的大体框图如下:图9 显示部分流程图为了区别调整时间和日期的按键与其他显示内容冲突,在这里给了8号键一个变量key_flag,未按下8号键时key_flag=0,程序执行图9框图所示的内容,当按下8号第一次时key_flag=1进入调整日期状态,当按下8号键第二次时key_flag=2,进入调整时间状态,当按下第三次时显示开机画面并让key_flag=0执行图9所示内容。显示部分程序涉及到lcd的初始化、写

17、入命令和数据,写命令和数据的通讯方式已经在上文提到,这里不再阐述。此设计用到的lcd是带有字库的,要让lcd显示中文只需要往lcd写入ddram地址,再写入中文。ddram的0x800x87,0x900x97,0x880x8f,0x980x9f分别对应lcd的第一、二、三、四行,一行可以写入8个中文字符对应每行的8个地址。有的中文在字符没有,lcd显示就会是乱码,这时需要查询该字的16进制编码,再写入lcd。要让lcd显示图片,需要给lcd写入命令0x36,以开启绘图模式。此设计的图片取模方式是逐行自上而下显示,先写上半屏再写下半屏,屏幕x/y轴的起点为0x80,写完上半屏后令x=0x88接着

18、写下半屏,本设计用到的三张图片都是自己画的。6号按键用到的自定义字符是通过取模写入cgram,通过命令调取显示。本设计还用到反白显示、文字循环左移、文字向上滚动。反白显示是lcd的扩充指令集之一,只要写入0x04可以实现第一、三行显示,写入0x05实现第二、第四行反白显示,st7920 控制器的 12864 点阵液晶其实原理上等同 25632 点阵,第三行对应的 ddram 地址紧接第一行;第四行对应的 ddram 地址紧接第二行。 因此在使用行反白功能时,第一行反白,第三行必然反白。第二行反白,第四行必然反白。文字循环左移只需要写入扩充指令0x18就可以实现。而文字向上滚动的实现,本设计定义

19、了8个变量aa,bb,cc,dd,j,k,l,m,其中aa,bb,cc,dd对应lcd的四行ddram地址0x80,0x90,0x88,0x98,j,k,l,m四个变量用来实现ddram地址的变换,变换方法为:j=bb,bb=aa,k=cc,cc=j,l=dd,dd=k,m=aa,aa=l,运行第一次后,第一行变为第二行的内容,第二行变为第三行的内容,第三行变为第四行的内容,而第四行则变为第一行的内容,如此循环就实现文字向上滚动的效果。5.2.2键盘扫描部分本设计扫描键盘方式采用行列反转扫描法读取按键编码。单片机先让键盘行线输出全为0,然后读入列线值,再检测有无按键按下,去抖,再读入列线值,输

20、出当前列线值,读入行线值,最后组合行、列线值,得到键盘的码值供调用,代码如图10所示。当有按键按下单片机读取出键值后,给主程序、调整时间和日期函数调用,同时送出编码给p1,让数码管显示当前按键对应的16进制代码0-f。 uc keyscan( ) /键盘扫描函数,使用函数反转扫描法uc cord_h,cord_1; /行量值中间变量 p3|=00f; /行线输出全为零cord_h =p3&00f; /读入列线值if (cord_h!=00f) /先检查有无案件按下 delay(100); / 去抖 if(cord_h!=00f) cord_h=p3&00f; / 读入列线值 p3=cord_h

21、/0f0 ; / 输出当前列线值cord_1=p3&0f0; / 读入行线值 return(cord_h+cord_1); / 键盘最后组合码值 return(0ff); /返回该值 图10 键盘扫描程序5.2.3时钟部分本设计时钟走时部分采用单片机内置的t0定时器,at89s52单片机的定时器由两个16位定时器t0、t1、方式寄存器tmod和定时器控制器tcon组成。其中t0、t1又可分成独立的8位计数器即th0、tl0和th1、tl1,用于存储定时器、计数器的初值;tmod为方式寄存器,主要用来设置定时器/计数器和方式;tcon为控制寄存器,用来控制定时器/计数器的启动与停止。tmod是一

22、个专用寄存器,用来控制定时器t0和t1的工作方式用操作模式,其中tmod的高4位用于对t1的控制,低4位用于对t0的控制,各位定义及格式如图11所示。图11工作模式控制寄存器tmod示意图其中gate为门控制,用来控制定时器启动方式。当gate=0时,定时器由软件控制位tr0或tr1来控制启动。gate=1时,定时器由外中断请求信号来控制启动。为定时或计数方式选择位,当为0时为定时工作方式,为1时计数工作方式。m1、m0为工作模式选择位,两个工作模式选择位可以形成4种编码,对应4种工作模式:m1=m0=0时为模式0;m1=0,m0=1时为模式1;m1=1,m0=0时为模式2;m1=m0=0时为

23、模式3。此设计用定时器0,工作模式1,所以对应tmod=0x01。同时定时50ms,对应的th0=(65536-50000)/10,tl0=(65536-50000)%10。tcon既参与中断控制,又参与定时器/计数器控制,本设计只用到它的定时器/计数器功能。tcon各位定义如图12所示,其中d0-d3与外部中断有关,此设计未用到。图12 定时器控制寄存器tcon示意图tr0为定时器/计数器t0的运行控制位,为0时停止定时器/t0计数器t0;为1时启动定时器/计数器t0。tr1为定时器/计数器t1的运行控制位,功能与t0相同。tf0、tf1本设计用不到,不做说明。本设计只用到t0,当设置好tm

24、od后令tr0=1就启动t0定时器/计数器开始工作。设置好tmod和tcon后,每过50ms定时器就会溢出产生中断,同时令变量deda另,当deda加到20后一秒钟就到了,这里令秒变量sec加1,同时令deda0重新计数;当sec加到60,令sec0,同时分变量min加1;当min60,令min0并让小时变量hour加1, 如此就可以得到日、月、年的精确时间。当一天到了,天加1时,星期也随着加1,当加到星期天时令其回到星期一。每个月的天数不一样,本设计采用switch-case语句让大月为31天,小月为30天,但闰年的二月是不一样的,这里对年进行取余,当判断余为0时,即为闰年,二月就有29天,

25、其它年份为28天。时间调整部分比较简单,当按下8号键第一次后,进入调整日期状态,按下9号键控制年减,13号键年加;10号键月减,14号键月加111号键日减115号键日加;12号键星期减,16号键星期加。当按下8号键第二次后,进入时间调整状态,9号键时减,13号键时加;10号键分减,14号键分加;15号键秒清零。当第三次按下8号键时,回到显示基本内容状态,同时lcd显示开机画面。实现方式为单片机扫描到相应按键时,相应的变量就是做出相应的变化。5.2.4延时部分本设计的单片机采用12mhz晶振,那么单片机的周期t1us,单片机每运行一次循环大概要10us,采用三层do-while语句来实现精确1m

26、s延时,如图13所示。 vord delay (ui t) uc i , j; do j=2; do (i=165); do nop ( ) ;/n个nop while (-i); while (-j); 图13 延时程序1计算公式为t总=3j+(n+2)ij+3t+5t,t为晶振周期。此延时是供其他函数调用,而lcd写入命令、数据时若用上面的延时会出现“反应慢”的问题,因为每次写入一个命令和数据都要经过延时,累加起来就多了,即使是只延时1ms也是一样,所以本设计提供第二个延时函数delay1(),通过参考lcd的时序,证明使用这个延时函数没有问题。 vord delay1(ui count)

27、 uc i,j; for(i=0 ;icount;i+) for (j=0;j电源线信号线。本设计的线宽为:地线2mm,电源线1.5mm,其他信号线0.8mm。6.1 pcb板制作画好pcb图后用转印纸打印,再用转印机将图纸转入覆铜板,接下来用油性笔对不清晰或断的走线进行弥补,防止腐蚀的时候把电气线路给腐蚀掉。之后就可以开始腐蚀了,腐蚀液用盐酸:双氧水:水3:1:2的比例兑。等铜板腐蚀好后用直径0.8mm的钻针钻孔,钻出插件元件引脚的插孔,然后用细砂纸擦掉炭粉后立即涂上松香液,防止铜层氧化。松香液是用松香和99%浓度的工业酒精按1:5的比例配制的。这样pcb板就出来了。6.2 元件焊接焊接前准

28、备好电烙铁、焊锡、吸锡器、剪线钳、剥线钳、镊子等焊接工具,同时准备好要焊接的元件和导线。在清理元器件时,重点辩别认清电阻器阻值及相应代号,对电阻、电容、发光二极管、三极管等要用万用表一一检测是否是良品。焊接时,先焊好跳线,再按从小到大、从卧到立的原则把元件焊好。电阻、昌振、插槽采用卧式插装,并近贴电路板;瓷片电容、电解电容、三极管、排针、排阻等采用立式插装,也要近贴电路板。发光二极管、电解电容、三极管、集成电路等必须按正确的极性插装,否则电路不会正常工作,甚至通电后还会被烧坏。焊完元器件后,用剪线钳剪掉多余元器件的引线。焊接完后,还要认真对照电路原理图,检查电路板上有无漏焊、错焊、短路、断路等

29、错误现象,确认无误后才能通电调试。 结 论从设计题目下来到现在历时两个多星期,克服了硬件和软件上各种问题,实现大部分的功能。因为本设计硬件比较简单,在硬件上碰到的就是一个电解电容引起的不能烧录程序的问题,其他功能都正常。而主要的难题是在软件设计上,在软件上碰到以下几点问题:(1) 对lcd写入命令和数据的格式、时序弄乱。(2) 对lcd基本指令集、扩充指令集比较模糊,在显示图片部分时滞留了很久。(3) 对图片的取模抓不住头绪。(4) 在设计时钟部分时,单片机的定时器/计数器、中断部分出错。而这些问题都是跟自己对单片机的掌握不够深有关,这也提醒了我们要抓好基础功,基础好了,对付起这些问题才会得心应手。本设计到目前为止还不算“智能化”,功能还比较单一,发挥部分的功能还有点

温馨提示

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

评论

0/150

提交评论