单片机数字时钟设计十九.docx
《单片机数字时钟设计十九.docx》由会员分享,可在线阅读,更多相关《单片机数字时钟设计十九.docx(21页珍藏版)》请在冰豆网上搜索。
单片机数字时钟设计十九
单片机数字时钟设计
系统方案设计及确定
P0接七段数码管的段选,P2口接数码管的位选。
按键T接P1.0-P1.3口,通过按键的不同操作,实现设计的要求:
(1)无按键按下:
实现正常的时钟显示
(2) T0键按下,进入省电模式,再按一下T0则恢复正常时钟显示
(3)按下T1启动秒表,进入秒表后按下T2暂停秒表,再按下T3则恢复正常时钟显示。
(4)在时钟正常显示下,按T3键进入时间的调整设定。
系统硬件设计
3.1AT89S51最小系统设计
AT89S51最小系统包括时钟电路和复位电路。
时钟电路硬件设计
89C51是8位CPU,具有片内振荡器和时钟电路,2个16位的定时器/计数器,5个中断源,两个中断优先级,它的时钟信号通常用内部振荡方式得到,在引脚XTAL1和XTAL2外接晶体振荡器(简称晶振)或陶瓷谐振器,就构成了内部振荡方式。
由于单片机内部有一个高增益反相放大器,当外接晶振后,就构成了自激振荡器并产生振荡时钟脉冲。
内部振荡方式的外部电路电容器Col,C02起稳定振荡频率、快速起振的作用,其电容值一般在5-30pF。
晶振频率的典型值为12MHZ,然而我们本次课程设计用的是11.0592Hz
所以我们可以利用51自带的定时器来设计时钟,选用定时器0,让它工作在方式1,然后给他置初值4C00H,即定时器每走50MS就会加1,让它循环20定时器就会溢出,发出中断请求。
CPU响应中断后,就会往响应的秒单元加1,接着定时器0循环工作,每溢出一次就会发一次中断请求,CPU每响应一次秒单元就会加1,当秒单元到60的时候,分单元就会加1同时秒单元清零。
同理,当分单元到60后时单元加1,分单元清零,时单元到24时清零。
这就是基本的时钟设计
复位电路硬件设计
复位电路的基本功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤销复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
图1所示的RC复位电路可以实现上述基本功能,图3为其输入-输出特性。
但解决不了电源毛刺(A点)和电源缓慢下降(电池电压不足)等问题而且调整RC常数改变延时会令驱动能力变差。
左边的电路为高电平复位有效 右边为低电平Sm为手动复位开关 Ch可避免高频谐波对电路的干扰
图1 复位电路
键盘、显示电路硬件设
键盘电路硬件设计
键盘是由若干按钮组成的开关矩阵,它是单片机系统中最常用的输入设备,用户能通过键盘向计算机输入指令、地址和数据。
一般单片机系统中采和非编码键盘,非编码键盘是由软件来识别键盘上的闭合键,它具有结构简单,使用灵活等特点因此被广泛应用于单片机系统
按钮开关的抖动问题
组成键盘的按钮有触点式和非触点式两种,单片机中应用的一般是由机械触点组成的。
在下图中,当开
关S未被按下时,P1。
0输入为高电平,S闭合后,P1。
0输入为低电平。
由于按钮是机械触点,当机械触点断开、闭合时,会有抖动动,P1。
0输入端的波形如图2所示。
这种抖动对于人来说是感觉不到的,但对计算机来说,则是完全能感应到的,因为计算机处理的速度是在微秒级,而机械抖动的时间至少是毫秒级,对计算机而言,这已是一个“漫长”的时间了。
前面我们讲到中断时曾有个问题,就是说按钮有时灵,有时不灵,其实就是这个原因,你只按了一次按钮,可是计算机却已执行了多次中断的过程,如果执行的次数正好是奇数次,那么结果正如你所料,如果执行的次数是偶数次,那就不对了。
为使CPU能正确地读出P1口的状态,对每一次按钮只作一次响应,就必须考虑如何去除抖动,常用的去抖动的办法有两种:
硬件办法和软件办法。
单片机中常用软件法,因此,对于硬件办法我们不介绍。
软件法其实很简单,就是在单片机获得P1。
0口为低的信息后,不是立即认定S1已被按下,而是延时10毫秒或更长一些时间后再次检测P1。
0口,如果仍为低,说明S1的确按下了,这实际上是避开了按钮按下时的抖动时间。
而在检测到按钮释放后(P1。
0为高)再延时5-10个毫秒,消除后沿的抖动,然后再对键值处理。
不过一般情况下,我们常常不对按钮释放的后沿进行处理,实践证明,也能满足一定的要求。
当然,实际应用中,对按钮的要求也是千差万别,要根据不一样的需要来编制处理程序,但以上是消除键抖动的原则。
显示电路硬件设计
四个数码管在系统中可以作为时钟显示、计数显示、遥控码显示等各种显示电路,电路如图2.10所示。
数码管是LED的一种集成,将LED通过一定的形式安排在相应的位置就构成了数码管,当相应的段码和位码协同操作,于是就产生了数码的显示。
在系统中,采用四位一体的集成数码显示器,内部结构为共阳方式。
在整体的数码管显示电路中,由P0口为数码管提供相应的段码,分别为a、b、c、d、e、f、g、dp,组成显示相应数码的字段;由P2口的高四位构成四位数码管的位选信号端,分别确定让哪个位的数码管进行点亮操作。
电路结构中,共阳端的电源由三极管S8550来进行控制,当连接P2口的基极信号端接收到单片机的低电平信号时就导通,于是数码管的位选端得到5V电源,提供数码管的显示操作。
系统软件设计
系统主程序设计
ORG0000H
LJMPMAIN
ORG0003H
ORG000BH
LJMPit0p
ORG001BH
LJMPINT1P
main:
movsp,#60H
MOVR2,#00H
movr0,#7fh
mova,#00h
x0:
mov@r0,a
djnzr0,x0
movtmod,#11h
mov20h,#14h
movth0,#4ch
movtl0,#00h
mov42h,#05h
mov41h,#59h
mov40h,#40h
MOVTH1,#0DCH
MOVTL1,#00H
MOV33H,#0AH
setbet0
setbet1
setbea
setbtr0
SAVE2:
CJNER2,#00H,SAVE3
SJMPled
led:
lcalldisplay
SAVE3:
JNBP1.1,MIAOBIAO
JNBP1.0,SAVE
JNBP1.3,SETT
sjmpSAVE2
系统主程序流程图
系统软件设计内存分配及芯片地址介绍
由于时钟显示采用的是动态扫描方式,若不用显示缓冲区,不但程序处理会复杂,还会造成显示的闪烁。
在此在单片机内部RAM中设置了8个显示缓冲区单元,显示缓冲区与数码显示的对应关系如下表所示。
每个显示缓冲区单元存放两个压缩BCD吗,分别对应相应计时单位的十位、个位。
40H~42H
时钟显示缓冲区,从低到高依次为秒的低四位、秒的高四位、分的低四位、分的高四位、时的低四位、时的高四位
30H~32H
秒表显示缓冲区,从低到高依次为10毫秒的低四位、10毫秒的高四位、秒的低四位、秒的高四位、分的低四位、分的高四位
4.2定时器的设计
时钟计时的关键是秒信号的产生,秒是时钟的最小计时单位,而采用单片机的定时器/计数器T0进行定时,在晶振为11.0592MHz的条件下,定时器0在方式1下的最大定时时间只能达到65536us。
为了达到定时1s的目的,因此采用T0定时50ms计数20次为1s的方法产生秒信号。
T0定时功能是通过计数器的计数来实现的,此时的计数脉冲来自单片机的内部,即每个机器周期产生1个计数脉冲,即每经过1个机器周期的时间,计数器加1。
如果采用的是11.0592MHz晶体,则计数频率为0.9216MHz,即每过0.9216us的时间计数器加1。
这样根据计数值计算出定时时间,也可根据定时时间的要求计算出计数器的初值。
在设计中,T0每50ms中断1次,则根据公式
计数初值=2的n次方-定时时间/机器周期
可得计数初值=4C00H
计时方法的实现:
每1s产生1次中断,在中断程序中将显示缓冲区的秒单元数值加1,并根据时间的进位关系进行从秒到分、分到时的计时。
4.3秒表的设计
当在主程序中查询到P1.1按下后启动秒表,查询P1.3的状态,若按下则退出秒表子程序进入时钟显示状态,若未按下则查询P1.1的状态,P1.1若未按下则查询P1.2的状态,若按下则启动秒表开始计时,若P1.2未按下又调显示,继续判断P1.3的状态,P1.3是高电平则查询P1.3,若P1.3是低电平,则秒表归零,若p1.3是高电平则查询P1.2,若P1.2是低电平则秒表暂停。
查询按键时,会调用延时子程序延时,为了防止程序紊乱,进入主程序的校时或闹钟设定。
4.4其他主要子程序的设计
1.省电子程序
SAVE:
JNBP1.0,SAVE
CJNER2,#00H,SAVE1
MOV43H,#00H
MOVP0,43H
INCR2
AJMPSAVE2
SAVE1:
DECR2
AJMPSAVE2
2.秒表子程序
MIAOBIAO1:
MOV30H,#00H
MOV31H,#00H
MOV32H,#00H
SETBTR1
LED3:
LCALLDISPLAY2
JNBP1.3,BACK
JBP1.1,PAUSE
AJMPLED3
PAUSE:
JBP1.2,LED3
CLRTR1
AJMPLED3
BACK:
CLRTR1
RET
INT1P:
PUSHPSW
PUSHACC
CLRET1
CLRTR1
MOVTL1,#00H
MOVTH1,#0DCH
SETBTR1
DJNZ33H,RETURN1
MOV33H,#0AH
MOVA,#01H
ADDA,30H
DAA
MOV30H,A
CJNEA,#99H,RETURN1
MOV30H,#00H
MOVA,#01H
ADDA,31H
DAA
MOV31H,A
CJNEA,#60H,RETURN1
MOV31H,#00H
MOVA,#01H
ADDA,32H
DAA
MOV32H,A
CJNEA,#60H,RETURN1
MOV32H,#00H
RETURN1:
POPACC
POPPSW
SETBET1
RETI
DISPLAY2:
movr1,#30h
movr3,#01h
movdptr,#TAB
DISPLAY3:
MOVA,R3
movp2,A
mova,@r1
anla,#0FH
movca,@a+dptr
movp0,a
lcalldl1ms
movp2,#00h
movp0,#00h
mova,r3
RLa
movr3,a
movp2,A
mova,@r1
swapa
anla,#0FH
movca,@a+dptr
movp0,a
lcalldl1ms
movp2,#00h
movp0,#00h
mova,r3
jbacc.5,ld2
RLa
movr3,a
incr1
ajmpDISPLAY3
ld2:
ret
3.报警子程序
RING:
MOVA,42H
DAA
MOVR3,A
XIANG:
CLRP1.7
LCALLDELAY1S
LCALLdisplay
LCALLDELAY1S
LCALLdisplay
LCALLDELAY1S
LCALLdisplay
LCALLDELAY1S
SETBP1.7
LCALLDELAY1S
LCALLdisplay
LCALLDELAY1S
LCALLdisplay
LCALLDELAY1S
LCALLdisplay
LCALLDELAY1S
LCALLdisplay
DJNZR3,XIANG
RET
4.时间调整子程序
SETT:
MOVR3,#00H
MOVR4,#12H
MOV42H,R4
MOV41H,R3
SETH1:
JBP1.1,SETH3
MOVA,#01H
ADDA,42H
CJNEA,#24H,SETH2
MOVA,#00H
SETH2:
MOV42H,A
SETH3:
LCALLdisplay
JNBP1.3,SETT1
SETM1:
JBP1.2,SETM3
MOVA,#01H
ADDA,41H
CJNEA,#60H,SETM2
MOVA,#00H
SETM2:
MOV41H,A
SETM3:
LCALLdisplay
JNBP1.3,SETT1
AJMPSETH1
SETT1:
MOV42H,R4
MOV41H,R3
OUT:
RET
5.显示子程序
display:
movr1,#40h
movr3,#01h
movdptr,#TAB
display1:
MOVA,R3
movp2,A
mova,@r1
anla,#0FH
movca,@a+dptr
movp0,a
lcalldl1ms
movp2,#00h
movp0,#00h
mova,r3
RLa
movr3,a
movp2,A
mova,@r1
swapa
anla,#0FH
movca,@a+dptr
movp0,a
lcalldl1ms
movp2,#00h
movp0,#00h
mova,r3
jbacc.5,ld1
RLa
movr3,a
incr1
ajmpdisplay1
ld1:
ret
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,00H
6.定时器0中断子程序
it0p:
pushpsw
pushacc
movth0,#4ch
movtl0,#06h
djnz20h,return
mov20h,#14h
mova,#01h
adda,40h
daa
mov40h,a
cjnea,#60h,return
mov40h,#00h
mova,#01h
adda,41h
daa
mov41h,a
cjnea,#60h,return
mov41h,#00h
mova,#01h
adda,42h
daa
mov42h,a
LCALLRING
cjnea,#24h,return
mov42h,#00h
return:
popacc
poppsw
reti
7.1毫秒延时子程序
dl1ms:
MOVR6,#9H
YL1:
MOVR7,#19H
DJNZR7,$
DJNZR6,YL1
RET
8.100毫秒延时子程序
TIME100MS:
MOVR3,#0B4H
LOOP5:
MOVR4,#0FFH
LOOP6:
DJNZR4,LOOP6
DJNZR3,LOOP5
RET
9.1秒延时子程序
TIME1S:
MOVR1,#0AH
TIME_1S:
CALLTIME100MS
DJNZR1,TIME_1S
RET
系统调试
1.调试所用工具及调试步骤
调试所用工具:
伟福仿真机,PC机,+5V电源,接口连线,硬件电路板。
调试步骤:
1.将伟福仿真机和PC机相连
2.将伟福仿真机和硬件电路板相连并接上+5V电源
3.编译源程序,并修改程序
4.全速执行程序,观察硬件的工作情况,若不能正常工作则可通过设置断点单步或跟踪执行程序,观察程序的调用、中断或跳转是否正确或逻辑是否正确,不正确的话再仔细分析程序错误的原因并进行修改再按上述方法进一步调试,到实现所要求的功能为止。
2.调试过程
将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多时平时的实验遇到过的,例如:
输入的分号格式不正确,零和字母O弄混淆了等等,幸好这些错误在平时的实验中遇到了,所以改错误很容易,但同时也说明了,平时的错误现在还在换,证明错误我还没有完全的改正,这点我以后一定要注意了。
争起错误换了两次就不能在换了。
除了常见的错误外,还有几条错误时我从来没有遇到过的,如:
LJMP跳转指令跳不回指定的位置,是因为跳转的长度大于LJMP跳转的长度,最后只好设置跳转两次后才能跳到指定的位置。
最后在老师和同学的帮助下,我把我程序中的错误一个一个的改过来,从而也调试成功,得出预期的效果。
程设计总结
这次课程设计根据课题要求,复习了这学期所学的单片机内容,通过查询相关的资料,简要知道了虽然老师上课讲过,但并非听懂了的8155芯片的有关知识。
根据课程设计的要求和自己通过参考有关资料拟的方案,写好程序流程图,在程序流程图的基础上,根据芯片的功能写出相应的程序,达到能够实现所要求的功能的目的。
在写程序时,在每条指令后都写好注释,以便在程序出错的检查过程中可以更容易查找得到。
这次的单片机课程设计重点是理论与实际的相结合,不单单只是书上的一条条分离的指令。
通过这次设计让我更系统的了解了个个指令以及单片机的扩展内容,为这次的期末考试有了进一步的准备。
参考文献
徐惠民、安德宁.单片微型计算机原理接口与应用.第1版.北京:
北京邮电大学出版社,1996
何立民.从Cygnal80C51F看8位单片机发展之路.单片机与嵌入式系统应用,2002年,第5期:
P5~8
夏继强.单片机实验与实践教程.北京:
北京航空航天大学出版社,2001
陈志强胡辉.单片机应用系统设计实践指南.自编教材
肖洪兵.单片机应用技术.自编教材
目录
课程设计目的1
系统方案设计及确定1
系统硬件设计1
3.1AT89S51最小系统设计1
时钟电路硬件设计2
复位电路硬件设计3
键盘、显示电路硬件设3
键盘电路硬件设计3
显示电路硬件设计5
系统软件设计6
系统主程序设计6
系统主程序流程图7
系统软件设计内存分配及芯片地址介绍9
4.2定时器的设计9
4.3秒表的设计9
4.4其他主要子程序的设计10
1.省电子程序10
2.秒表子程序10
3.报警子程序12
4.时间调整子程序12
5.显示子程序13
6.定时器0中断子程序14
7.1毫秒延时子程序15
8.100毫秒延时子程序15
9.1秒延时子程序15
系统调试15
1.调试所用工具及调试步骤15
2.调试过程16
程设计总结16
参考文献16