单片机的数字时钟设计毕业设计Word格式文档下载.docx
- 文档编号:22933116
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:31
- 大小:267.22KB
单片机的数字时钟设计毕业设计Word格式文档下载.docx
《单片机的数字时钟设计毕业设计Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《单片机的数字时钟设计毕业设计Word格式文档下载.docx(31页珍藏版)》请在冰豆网上搜索。
1)开机LCD液晶屏幕显示“08级电子信息工程XXXX毕业设计”信息。
2)设计4X4矩阵键盘,分别对应键码“0-F”。
3)按下任意一个按键,LCD液晶屏幕显示相应按键的信息(不同按键的显示内容可以自行设计)。
1.2发挥部分
1)LCD液晶屏幕增加装饰图案。
2)增加一个LED数码管同步显示相应键码。
3)增加一个LED点阵同步显示相应键码。
2方案设计与论证
2.1控制部分方案论证
方案一:
可采用ALTERA公司的FLEX10K系列PLD器件。
设计起来结构清晰,各个模块,从硬件上设计起来相对简单,控制与显示的模块间的连接也会比较方便。
但是考虑到本设计的特点,EDA在功能扩展上比较受局限,而且EDA占用的资源也相对多一些。
从成本上来讲,用可编程逻辑器件来设计也没有什么优势,而以我们目前的条件在硬件和软件也无法实现本设计的各种要求。
方案二:
凌阳16位单片机有丰富的中断源和时基。
它的准确度相当高,并且C语言的编程环境也很方便来实现一些递归调用。
I/O口功能也比较强大,方便使用。
用凌阳16位单片机做控制器最有特色的就是它的可编程音频处理,可完成语音的录制播放和识别。
这些都方便对设计进行扩展,使设计更加完善。
成本也相对低一些。
但是,在控制与显示的结合上有些复杂,显示模组资源相对有限,而且单片机的稳定性不是很高,而且就需要完成这个
仪器仪表的键盘显示模拟系统不太复杂的设计可以不必用凌阳16位单片机来完成。
方案三:
AT89S52是8位单片机,提供的的四组8个I/O口能够实现既定功能,成本也不高。
综合考虑最后选择用AT89S52单片机来作为中心控制器件。
2.2显示部分方案论证
使用LCD1602成本低,程序控制简单,但它只能显示16X2个半宽字型符,不能显示汉字,比较单调。
带字库的由ST7920控制的LCD12864硬件上提供8位,4位并行接口及串行接口供选择,64×
16位字符显示RAM(DDRAM最多16字符×
4行,LCD显示范围16×
2行),2M位中文字型ROM(CGROM),总共提供8192个中文字型(16×
16点阵),16K位半宽字型ROM(HCGROM),总共提供126个西文字型(16×
8点阵),64×
16位字符产生RAM(CGRAM)。
在软件上提供文字与图形混合显示、画面清除、光标归位、显示开/关、光标显示/隐藏、显示字体闪烁、光标移位功能、显示移位、垂直画面旋转、反白显示、休眠模式的功能,相对于LCD1602来说功能丰富,而且已内建有GB码简体中文字型库,方便编程。
综合以上方案,决定采用LCD12864(除非特殊说明,以下都简称LCD)作为显示器件。
3系统框图及工作原理
3.1系统框图
图1系统框图
3.2工作原理
3.2.1硬件工作原理
硬件控制电路主要用了4*4矩阵键盘、AT89S52芯片处理器、LCD和七段数码管。
由AT89S52处理器处理从4*4键盘发出的指令,通过LCD和七段数码管显示出相应按键的内容。
3.2.2软件工作原理
软件控制程序主要有主控程序、时间程序、LCD控制程序、时间及日期显示程序、键盘扫描程序等组成。
主控程序中对整个程序进行控制,进行了时间和LCD初始化、LCD和数码管显示等控制。
LCD显示程序是整个显示部分中的重要部分,包括写入命令、初始化、写入数据、数据显示、自定义GDRAM显示、绘图显示、反白显示等。
当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年到了,若计数到了则相关变量清除0。
先给出一般年份的每月天数。
如果是闰年,第2月天数为29天,非闰年则有28天。
在我们的这个设计中只设有100年的范围,判断是否闰年就只需要用该年份除以4来判断就行了。
键盘扫描程序是整个设计的输入控制程序,4*4键盘占用单片机的8个I/O口。
本设计的键盘扫描程序采用行列反转扫描法读取按键键值。
单片机先让键盘行线输出全为0,然后读入列线值,再检测有无按键按下,去抖,再读入列线值,输出当前列线值,读入行线值,最后组合行、列线值,得到键盘的码值供调用。
4硬件原理分析及设计
4.1单片机时钟电路
内部时钟电路如图所示,在XTAL1和XTAL2引脚上外接定时元件,内部振荡电路就产生自激振荡。
定时元件通常石英晶体和电容组成的并联谐振回路,晶体振荡器选择12MHZ,电容采用30PF。
图2时钟电路
4.2单片机复位电路
影响单片机系统运行稳定性的因素可大体分为外因和内因两部分:
(1)外因
射频干扰,它是以空间电磁场的形式传递在机器内部的导体(引线或零件引脚)感生出相应的干扰,可通过电磁屏蔽和合理的布线/器件布局衰减该类干扰;
电源线或电源内部产生的干扰,它是通过电源线或电源内的部件耦合或直接传导,可通过电源滤波、隔离等措施来衰减该类干扰。
(2)内因
振荡源的稳定性,主要由起振时间频率稳定度和占空比稳定度决定起振时间可由电路参数整定稳定度受振荡器类型温度和电压等参数影响复位电路的可靠性。
4.2.1复位电路的可靠性设计
复位是单片机的初始化操作。
单片机启动运行时,都需要先复位,其作用是使CPU和系统中其他部件处于一个确定的初始状态,并从这个状态开始工作。
因而,复位是一个很重要的操作方式。
但单片机本身是不能自动进行复位的,必须配合相应的外部电路才能实现。
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
如图3所示。
图3复位电路
4.3键盘电路
4*4键盘电路由4*4=16个按键组成,其中4列经过4个10K电阻接入VCC上拉,接入单片机的P3口的高4位口,4行直接接入单片机低4位,当有按键按下时,由单片机控制8个I/O口读取出当前键值。
图4键盘电路
4.4显示电路
4.4.1LCD显示电路
LCD12864一共有20个引脚,其中4-15、17脚接入单片机的P0全部I/O口和P2的三个I/O口,是LCD与单片机通讯的桥梁。
16号脚是空脚,1和20脚接地,2和19脚接VCC,其中3、18、19三个脚接可调电位器和电阻,组成调节LCD对比度电路。
图4.4.1LCD显示电路
如图5所示。
4.4.2七段数码管显示电路
采用的是共阳数码管,它的8个脚接入P1全部I/O口,PNP三极管的发射极接VCC,集电极经过一个电阻限流接入数码管的公共端,基极接单片机的P2.0口,由单片机给一个基极电流使三极管三极管导通,驱动数码管显示。
如图6所示。
图4.4.2数码管显示电路
图5LCD显示电路图6数码管显示电路
4.4整体电路图
根据以上各模块的功能互相连接成为此设计的整体电路,如下图:
图7整体电路图
4.5系统硬件设计所需的元件
表1元件列表
元件名称
数量(个)
LCD12864
1
12M晶振
AT89S52芯片
30pF瓷片电容
2
七段数码管
10uF电解电容
1K电阻
5
按键开关
17
2K电阻
发光二极管
51K电阻
排针
1(排)
10K电阻
4
插针
10K电位器
自锁开关
103*8排阻
5V电源
5软件设计
此设计名为仪器仪表的键盘显示模拟系统,顾名思义软件占很大比例。
整个设计硬件比较简单,主要就是程序的写法,而软件的调试也是此设计的重点和难点。
整个软件结构分为主控程序、显示部分程序、键盘扫描部分程序、时钟部分程序和延时程序。
5.1软件总体设计及框图
图8软件设计总体框图
开机后,主控程序先让单片机给P2.0一个低电平,开启数码管显示,然后初始化LCD包括设置基本指令集、设置光标、设置显示模式等,接下来是时钟的初始化,包括开启定时和中断、时间的走时(秒、分、时、日、月、年、星期),最后就显示开机画面并开始扫描键盘,若有按键按下则LCD和数码管显示相应的内容,8号键作为设置日期和时间的阀门,按下第一次时进入调整日期状态,第二次是调整时间,第三次调整温度,第四次返回。
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的初始化、写入命令和数据,写命令和数据的通讯方式已经在上文提到,这里不再阐述。
此设计用到的LCD是带有字库的,要让LCD显示中文只需要往LCD写入DDRAM地址,再写入中文。
DDRAM的0x80~0x87,0x90~0x97,0x88~0x8f,0x98~0x9f分别对应LCD的第一、二、三、四行,一行可以写入8个中文字符对应每行的8个地址。
有的中文在字符没有,LCD显示就会是乱码,这时需要查询该字的16进制编码,再写入LCD。
要让LCD显示图片,需要给LCD写入命令0x36,以开启绘图模式。
此设计的图片取模方式是逐行自上而下显示,先写上半屏再写下半屏,屏幕X/Y轴的起点为0x80,写完上半屏后令X=0X88接着写下半屏,本设计用到的三张图片都是自己画的。
6号按键用到的自定义字符是通过取模写入CGRAM,通过命令调取显示。
本设计还用到反白显示、文字循环左移、文字向上滚动。
反白显示是LCD的扩充指令集之一,只要写入0x04可以实现第一、三行显示,写入0x05实现第二、第四行反白显示,ST7920控制器的128×
64点阵液晶其实原理上等同256×
32点阵,第三行对应的DDRAM地址紧接第一行;
第四行对应的DDRAM地址紧接第二行。
因此在使用行反白功能时,第一行反白,第三行必然反白。
第二行反白,第四行必然反白。
文字循环左移只需要写入扩充指令0x18就可以实现。
而文字向上滚动的实现,本设计定义了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,然后读入列线值,再检测有无按键按下,去抖,再读入列线值,输出当前列线值,读入行线值,最后组合行、列线值,得到键盘的码值供调用,代码如图10所示。
当有按键按下单片机读取出键值后,给主程序、调整时间和日期函数调用,同时送出编码给P1,让数码管显示当前按键对应的16进制代码0-f。
图10键盘扫描程序
5.2.3时钟部分
本设计时钟走时部分采用单片机内置的T0定时器,AT89S52单片机的定时器由两个16位定时器T0、T1、方式寄存器TMOD和定时器控制器TCON组成。
其中T0、T1又可分成独立的8位计数器即TH0、TL0和TH1、TL1,用于存储定时器、计数器的初值;
TMOD为方式寄存器,主要用来设置定时器/计数器和方式;
TCON为控制寄存器,用来控制定时器/计数器的启动与停止。
TMOD是一个专用寄存器,用来控制定时器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时为模式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,当设置好TMOD后令TR0=1就启动T0定时器/计数器开始工作。
设置好TMOD和TCON后,每过50ms定时器就会溢出产生中断,同时令变量deda另1,当deda加到20后一秒钟就到了,这里令秒变量sec加1,同时令deda=0重新计数;
当sec加到60,令sec=0,同时分变量min加1;
当min=60,令min=0并让小时变量hour加1,如此就可以得到日、月、年的精确时间。
当一天到了,天加1时,星期也随着加1,当加到星期天时令其回到星期一。
每个月的天数不一样,本设计采用switch-case语句让大月为31天,小月为30天,但闰年的二月是不一样的,这里对年进行取余,当判断余为0时,即为闰年,二月就有29天,其它年份为28天。
时间调整部分比较简单,当按下8号键第一次后,进入调整日期状态,按下9号键控制年减,13号键年加;
10号键月减,14号键月加111号键日减115号键日加;
12号键星期减,16号键星期加。
当按下8号键第二次后,进入时间调整状态,9号键时减,13号键时加;
10号键分减,14号键分加;
15号键秒清零。
当第三次按下8号键时,回到显示基本内容状态,同时LCD显示开机画面。
实现方式为单片机扫描到相应按键时,相应的变量就是做出相应的变化。
5.2.4延时部分
本设计的单片机采用12Mhz晶振,那么单片机的周期T=1us,单片机每运行一次循环大概要10us,采用三层do-while语句来实现精确1ms延时,如图13所示。
图13延时程序1
计算公式为t总={[3j+(n+2)ij+3]t+5}T,T为晶振周期。
此延时是供其他函数调用,而LCD写入命令、数据时若用上面的延时会出现“反应慢”的问题,因为每次写入一个命令和数据都要经过延时,累加起来就多了,即使是只延时1ms也是一样,所以本设计提供第二个延时函数delay1(),通过参考LCD的时序,证明使用这个延时函数没有问题。
图14延时程序2
6硬件安装制作
用PROTEL99SE画好原理图,导入PCB图,并布好局画好线后就开始做板,以便程序的调试。
元件布局时要遵循就近原则,即两个元件之间的电气连接的最好放近一点,方便布线,还有单片机的晶振要尽量靠近单片机的18、19号脚。
布线时电源线和地线要比其他信号线宽,而地线要比电源线宽,规则是地线>
电源线>
信号线。
本设计的线宽为:
地线2mm,电源线1.5mm,其他信号线0.8mm。
6.1PCB板制作
画好PCB图后用转印纸打印,再用转印机将图纸转入覆铜板,接下来用油性笔对不清晰或断的走线进行弥补,防止腐蚀的时候把电气线路给腐蚀掉。
之后就可以开始腐蚀了,腐蚀液用盐酸:
双氧水:
水=3:
1:
2的比例兑。
等铜板腐蚀好后用直径0.8mm的钻针钻孔,钻出插件元件引脚的插孔,然后用细砂纸擦掉炭粉后立即涂上松香液,防止铜层氧化。
松香液是用松香和99%浓度的工业酒精按1:
5的比例配制的。
这样PCB板就出来了。
6.2元件焊接
焊接前准备好电烙铁、焊锡、吸锡器、剪线钳、剥线钳、镊子等焊接工具,同时准备好要焊接的元件和导线。
在清理元器件时,重点辩别认清电阻器阻值及相应代号,对电阻、电容、发光二极管、三极管等要用万用表一一检测是否是良品。
焊接时,先焊好跳线,再按从小到大、从卧到立的原则把元件焊好。
电阻、昌振、插槽采用卧式插装,并近贴电路板;
瓷片电容、电解电容、三极管、排针、排阻等采用立式插装,也要近贴电路板。
发光二极管、电解电容、三极管、集成电路等必须按正确的极性插装,否则电路不会正常工作,甚至通电后还会被烧坏。
焊完元器件后,用剪线钳剪掉多余元器件的引线。
焊接完后,还要认真对照电路原理图,检查电路板上有无漏焊、错焊、短路、断路等错误现象,确认无误后才能通电调试。
7电路调试
本设计的调试涉及到硬件和软件的调试,硬件调试是建立在软件调试的基础上,只有保证硬件正常工作后才能对软件进行调试。
7.1硬件调试
一块电路板做好后,并不能保证不会出错,在调试与检测过程中,利用万能表检测供电是否正常;
线路是否有短路、断路等现象。
我们在硬件调试的时候发现单片机不能烧入程序,首先我们判定可能是单片机坏了,就拿来另一块能烧程序的单片机最小系统,把单片机放到最小系统上发现能烧录程序,排除了单片机的可能,然后就一一检查或替换单片机周边晶振、电容、复位按键开关,最后发现是复位电路的电解电容有问题,而换了几个好的电解电容后还是没能解决问题,最后把电容换成106的独石电容,而这并不影响单片机的复位功能,因为电容的作用是要让RC充放电时间TRC>
单片机复位所需的时间TRST即可。
7.2软件调试
我们做这个设计的时候碰到的最大的问题就是软件的调试,编写程序需要非常细心,逻辑思维要强,头脑要灵活,虽然之前有做过LCD1602电路,但LCD12864比LCD1602多复杂一点,还是第一次接触它,而且接触单片机编程时日还不长,在一开始没有一点眉目,在反复仔细翻阅了它的数据手册,并参考网上别人的思路后终于一点一点的把它弄清楚了,能实现了它的大部分功能。
当程序写好后用ASP下载线和AVR_fighter软件把写好的程序烧录进单片机里,测试其工作情况和查找漏洞,并逐步完善整个设计功能。
8测试结果
付出总有收获,经过我们的努力,本设计能完成以下基本要求的功能:
(1)开机LCD液晶屏幕显示“08电子信息X班XXX毕业设计”信息。
(2)设计4X4矩阵键盘,分别对应键码“0-F”。
(3)按下任意一个按键,LCD液晶屏幕显示相应按键的信息。
发挥部分能完成以下功能:
(1)LCD液晶屏幕增加装饰图案。
(2)增加一个LED数码管同步显示相应键码。
结论
从设计题目下来到现在历时两个多星期,克服了硬件和软件上各种问题,实现大部分的功能。
因为本设计硬件比较简单,在硬件上碰到的就是一个电解电容引起的不能烧录程序的问题,其他功能都正常。
而主要的难题是在软件设计上,在软件上碰到以下几点问题:
(1)对LCD写入命令和数据的格式、时序弄乱。
(2)对LCD基本指令集、扩充指令集比较模糊,在显示图片部分时滞留了很久。
(3)对图片的取模抓不住头绪。
(4)在设计时钟部分时,单片机的定时器/计数器、中断部分出错。
而这些问题
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 数字 时钟 设计 毕业设计