单片机电子钟设计报告--课程设计

数字时钟
汇编
目录
第一章
系统设计要求2
1.1
设计要求2
第二章
系统的组成及工作原理3
2.1
系统的组成3
2.2
系统的工作原理3
第三章
系统硬件电路方案设计6
3.1
电子时钟方案6
3.2
数码显示方案6
3.3
单元电路设计7
3.3.1
晶体振荡电路7
3.3.2
复位电路7
3.3.3
显示电路7
3.3.4
键盘电路7
3.3.5
控制电路8
第四章
系统的软件设计9
4.1
程序流程图9
4.2
源程序10
第五章
系统调试和测试结果与分析25
5.1
实验仪器与工具25
5.2
调试闹钟25
5.3
调试按键子程序25
第六章
结论26
参考文献27
第1章
系统设计要求
1.1做一个基于AT89S52的简易的单片机数字钟。该数字钟有6个共阴极七段数码管,分别显示时分秒,其显示方式为:**时**分**秒。利用8255扩展键盘和显示接口,时间可以任意修改。
1.1课程设计要求
(1)掌握AT89S52实验开发系统中的实验模块原理,画出电路原理图。
(2)综合运用实验模块,用89S52开发设计具有一定功能的单片机控制系统,进行软、硬件设计及调试。
(3)写出完整的设计任务书:摘要、目录、正文、结论、参考文献、附录。
(4)时间以24小时为一个周期;电子钟的格式为:**时**分**秒,由左向右分别为:时、分、秒。完成显示由秒由00一直加1至59,再恢复为00;分由00一直加1至59,再恢复00;时由00一直加1到23,再恢复00。
(5)为了保证计时的稳定及准确须由晶体振荡器提供表针时间基准信号。
第2章
系统组成及工作原理
2.1、系统的组成
数字钟实际上是一个对标准频率(1HZ)进行计数的计数电路.由于计数的起始时间不可能与标准时间一致,故需要在电路上加一个校时电路,同时标准的1MHZ时间信号必须做到准确稳定.通常使用石英晶体振荡器电路构成数字钟.
(1)
晶体振荡器
晶体振荡器给数字钟提供一个频率稳定准确的11.0592MHz的方波信号,可保证数字钟的走时准确及稳定.不管是指针式的电子钟还是数字显示的电子钟都使用了晶体振荡器。
(2)
复位电路
时间计数电路由秒个位和秒十位计数器,分个位和分十位计数器,时个位和时十位电路构成,秒个位和秒十位计数器,分个位和分十位计数器为60进制计数器,时个位和时十位计数器为24进制计数器。
(3)
数码管
数码管通常有发光二极管(LED)数码管和液晶(LCD)数码管,本设计提供的为LED数码管。
(4)
键盘
键盘是控制和修改时钟的重要输入模块,通过键盘可以修改时间,修改年月日,修改闹钟时间,控制显示等。
(5)
控制部分
AT89S52是美国ATMEL公司生产的低功耗,高性能CMOS
8位单片机,片内含8K
bytes的可系统编程的Flash只读程序存储器,器件采用ATMEL公司的高密度,非易失性存储技术生产,兼容标准8051指令系统及引脚。AT89S52提供以下标准功能:8K字节Flash闪速存储器,256字节内部RAM,32I/O口线,看门狗(WDT),两个数据指针,三个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,片内振荡器及时钟电路。
2.2、系统工作原理
VCC:供电电压。
GND:接地。
P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P1口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0
口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口第二功能口。
RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时,
ALE只有在执行MOVX,MOVC指令是ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:来自反向振荡器的输出。
第三章
系统硬件电路方案设计
3.1、电子时钟方案
电子时钟是本设计的最主要的部分。根据需要,可利用两种方案实现。
方案一:本方案采用Dallas公司的专用时钟芯片DS12887A。该芯片内部采用石英晶体振荡器,其芯片精度不大于10ms/年,且具有完备的时钟闹钟功能,因此,可直接对其以用于显示或设置,使得软件编程相对简单。为保证时钟在电网电压不足或突然掉电等突发情况下仍能正常工作,芯片内部包含锂电池。当电网电压不足或突然掉电时,系统自动转换到内部锂电池供电系统。而且即使系统不上电,程序不执行时,锂电池也能保证芯片的正常运行,以备随时提供正确的时间。
方案二:本方案完全用软件实现数字时钟。原理为:在单片机内部存储器设6个字节分别存放时钟的时、分、秒信息。利用定时器与软件结合实现1秒定时中断,每产生一次中断,存储器内相应的秒值加1;若秒值达到60,则将其清零,并将相应的分字节值加1;若分值达到60,则清零分字节,并将时字节值加1;若时值达到24,则将十字节清零。该方案具有硬件电路简单的特点。但由于每次执行程序时,定时器都要重新赋初值,所以该时钟精度不高。而且,由于是软件实现,当单片机不上电,程序不执行时,时钟将不工作。
基于硬件电路的考虑,本设计采用方案二完成数字时钟的功能。
3.2、数码管显示方案
方案一:静态显示。所谓静态显示,就是当显示器显示某一字符时,相应的发光二极管恒定的导通或截止。该方式每一位都需要一个8
位输出口控制。静态显示时较小的电流能获得较高的亮度,且字符不闪烁。但当所显示的位数较多时,静态显示所需的I/O口太多,造成了资源的浪费。
方案二:动态显示。所谓动态显示就是一位一位的轮流点亮各个位,对于显示器的每一位来说,每隔一段时间点亮一次。利用人的视觉暂留功能可以看到整个显示,但必须保证扫描速度足够快,字符才不闪烁。显示器的亮度既与导通电流有关,也于点亮时间与间隔时间的比例有关。调整参数可以实现较高稳定度的显示。动态显示节省了I/O口,降低了能耗。
从节省I/O口和降低能耗出发,本设计采用方案二。
3.3、单元电路设计
3.3.1、晶体振荡电路
3.3.2
、复位电路
3.3.3、显示电路
3.3.4、键盘电路
3.3.5、控制电路
第四章
系统软件设计
4.1程序流程图主程序开始
设定定时器常数,开中断
显示时间
到1秒?
T0中断
现场保护
重装定时器初值
满20次否?
满24小时否?
满60秒否?
满60分否?
恢复现场
时值加1
时缓冲单元清零
秒值加1
分缓冲单元清零
秒缓冲单元清零
分值加1
结束
4.2、源程序
F_1
BIT
70H;为0时
锁定键盘
为1时
可以输入键值
F_2
BIT
71H;为1时
执行T1中秒表程序,为0时执行T1中闹钟闪灯程序
F_3
BIT
72H
SHIS
EQU
20H;时
十位
时钟的时分秒
SHIG
EQU
21H;时
个位
FENS
EQU
22H;分
十位
FENG
EQU
23H;分
个位
MIAOS
EQU
24H;秒
十位
MIAOG
EQU
25H;秒
个位
NIANS
EQU
27H;年
十位
年、月、日
NIANG
EQU
28H;年
个位
YUES
EQU
29H;月
十位
YUEG
EQU
2AH;月
个位
RIS
EQU
2BH;日
十位
RIG
EQU
2CH;日
个位
SS
EQU
35H;时
十位
定时的时分秒
SG
EQU
36H;时
个位
FS
EQU
37H;分
十位
FG
EQU
38H;分
个位
MS
EQU
39H;秒
十位
MG
EQU
3AH;秒
个位
MFS
EQU
45H;分
十位
秒表的分、秒、毫秒
MFG
EQU
46H;分
个位
MMS
EQU
47H;秒
十位
MMG
EQU
48H;秒
个位
MHS
EQU
49H;毫秒
十位
MHG
EQU
4AH;毫秒
个位
ORG
0000H
LJMP
MAIN
ORG
000BH;定时T0中断入口地址
LJMP
TIM0
ORG
001BH;定时T1中断入口地址
LJMP
TIM1
MAIN:MOV
SP,#60H;堆栈指针设置
CLR
F_1;清零
锁定键盘
CLR
F_2;清零
CLR
F_3
MOV
SHIS,#02H
;时分秒赋初值
MOV
SHIG,#03H
MOV
FENS,#05H
MOV
FENG,#08H
MOV
MIAOS,#04H
MOV
MIAOG,#00H
MOV
NIANS,#01H;年月日赋初值
MOV
NIANG,#00H
MOV
YUES,#00H
MOV
YUEG,#07H
MOV
RIS,#00H
MOV
RIG,#02H
MOV
SS,#01H;定时闹钟的时分秒赋初值
MOV
SG,#02H
MOV
FS,#00H
MOV
FG,#00H
MOV
MS,#00H
MOV
MG,#00H
MOV
R0,#20H;R0指针指向
时
的十位
MOV
R1,#27H;R1指针指向
年
的十位
MOV
32H,#SHIS;存放显示缓冲区初始值
MOV
TMOD,#11H;设置定时器方式
MOV
TH0,#4BH
;定时器T0
50MS初值
MOV
TL0,#0F1H
MOV
TH1,#0DCH;定时器T1
10MS初值
MOV
TL1,#00H
MOV
IE,#8AH;开中断
MOV
40H,#00H;秒计数单元
MOV
43H,#00H;0.5秒计数单元
MOV
A,#89H;初始化
设置8255状态字
MOV
DPTR,#0FF23H
MOVX
@DPTR,A
MOV
DPTR,#0FF21H
MOV
A,#0FFH
MOVX
@DPTR,A;消隐
SETB
TR0;启动定时器T0
START:LCALL
KEY;调用键扫子程序
LCALL
SCAN;调用显示子程序
LCALL
LOCK;调用闹钟子程序
SJMP
START
SCAN:PUSH
ACC;显示子程序
SETB
RS1;换到2区
MOV
31H,32H;显示的数据送数据显示缓冲区
MOV
30H,#0DFH;第一个数码管显示
MOV
R7,#06H;动态显示数码管的个数
SCAN1:MOV
A,30H
MOV
DPTR,#0FF20H
MOVX
@DPTR,A
MOV
R0,31H
MOV
A,@R0
MOV
DPTR,#TABLE
MOVC
A,@A+DPTR
CPL
A
MOV
DPTR,#0FF21H
MOVX
@DPTR,A
LCALL
DELAY
MOV
A,30H
RR
A;将显示数码管右移一位
MOV
30H,A
INC
31H;显示缓冲区加1
MOV
A,#0FFH
MOVX
@DPTR,A;消隐
DJNZ
R7,SCAN1
POP
ACC
CLR
RS1
RET
TIM0:PUSH
ACC;定时器T0中断子程序
MOV
TH0,#4BH
MOV
TL0,#0F1H
INC
40H
MOV
A,40H
CJNE
A,#14H,LP0
LP0:JC
LP2;1秒钟到往下执行
MOV
40H,#00H;清秒计数单元
INC
MIAOG;秒加1
MOV
A,MIAOG
CJNE
A,#0AH,LP2
MOV
MIAOG,#00H
INC
MIAOS
MOV
A,MIAOS
CJNE
A,#06H,LP2
MOV
MIAOS,#00H
INC
FENG
MOV
A,FENG
CJNE
A,#0AH,LP2
MOV
FENG,#00H
INC
FENS
MOV
A,FENS
CJNE
A,#06H,LP2
MOV
FENS,#00H
INC
SHIG
MOV
A,SHIS
CJNE
A,#02H,LP01
MOV
A,SHIG
CJNE
A,#04H,LP2
MOV
SHIG,#00H
MOV
SHIS,#00H
INC
RIG
LP01:MOV
A,SHIG
CJNE
A,#0AH,LP2
MOV
SHIG,#00H
INC
SHIS
LP2:POP
ACC
RETI
TIM1:PUSH
ACC;定时器T1子程序
MOV
TH1,#0DCH
MOV
TL1,#00H
JNB
F_2,TM1
INC
MHG
MOV
A,MHG
CJNE
A,#0AH,TT0
MOV
MHG,#00H
INC
MHS
MOV
A,MHS
CJNE
A,#0AH,TT0
MOV
MHS,#00H
INC
MMG
MOV
A,MMG
CJNE
A,#0AH,TT0
MOV
MMG,#00H
INC
MMS
MOV
A,MMS
CJNE
A,#06H,TT0
MOV
MMS,#00H
INC
MFG
MOV
A,MFG
CJNE
A,#0AH,TT0
MOV
MFG,#00H
INC
MFS
MOV
A,MFS
CJNE
A,#06H,TT0
MOV
MFS,#00H
TT0:SJMP
TM2
TM1:INC
43H
MOV
A,43H
CJNE
A,#32H,TM10
TM10:JC
TM2
MOV
43H,#00H
MOV
A,P1
CPL
A
MOV
P1,A
TM2:POP
ACC
RETI
LOCK:PUSH
ACC;闹钟子程序
SETB
RS0;换到1区
MOV
R0,#20H
MOV
A,SS
XRL
A,@R0
JNZ
LOCK1
INC
R0
MOV
A,SG
XRL
A,@R0
JNZ
LOCK1;时钟
时
与闹钟
时
相等往下执行
INC
R0
MOV
A,FS
XRL
A,@R0
JNZ
LOCK1
INC
R0
MOV
A,FG
XRL
A,@R0
JNZ
LOCK1;时钟
分
与闹钟
分
相等往下执行
INC
R0
MOV
A,MS
XRL
A,@R0
JNZ
LOCK1
INC
R0
MOV
A,MG
XRL
A,@R0
JNZ
LOCK1;时钟
秒
与闹钟
秒
相等
往下执行
SETB
TR1;时分秒
全相同
启动T1
CLR
F_2;清0执行闹钟闪灯程序
LOCK1:CLR
RS0;恢复到0区
POP
ACC;恢复A的值
RET
KEY:
LCALL
KS;键扫子程序
JZ
LK11
LCALL
DELAY;延时
LCALL
KS
JZ
LK11
;有键按下转
LK2:
MOV
R4,#00H
MOV
R3,#08H
MOV
R2,#0FEH;R2为键盘键扫单元
LK1:MOV
A,R2
MOV
DPTR,#0FF20H
MOVX
@DPTR,A;输出键扫值
RL
A
MOV
R2,A
MOV
DPTR,#0FF22H
MOVX
A,@DPTR
;读键值
CPL
A
ANL
A,#0FH
JNZ
LK3
INC
R4
INC
R4
DJNZ
R3,LK1
LK11:SJMP
LK4
LK3:
ADD
A,R4;算键值
MOV
DPTR,#KEYTAB
MOVC
A,@A+DPTR
CJNE
A,#0FH,LK30;如果为F调用按键F子程序
LCALL
KEY_F
SJMP
LK34
LK30:CJNE
A,#0EH,LK31;如果为E调用按键E子程序
LCALL
KEY_E
SJMP
LK34
LK31:CJNE
A,#0DH,LK32;如果为D调用按键D子程序
LCALL
KEY_D
SJMP
LK34
LK32:CJNE
A,#0CH,LK33;如果为C调用按键C子程序
LCALL
KEY_C
SJMP
LK34
LK33:CJNE
A,#0BH,LK330;如果为B调用按键B子程序
LCALL
KEY_B
SJMP
LK34
LK330:CJNE
A,#11H,LK331;如果为11调用按键SCAL子程序
LCALL
KEY_SCAL
SJMP
LK34
LK331:CJNE
A,#12H,LK332;如果为12调用按键STEP子程序
LCALL
KEY_STEP
SJMP
LK34
LK332:CJNE
A,#13H,LK34;如果为13调用按键MON子程序
LCALL
KEY_MON
LK34:CLR
C
CJNE
A,#0AH,LK35;如果为A调用按键A子程序
LCALL
KEY_A
SJMP
LK4
LK35:JNC
LK4
JNB
F_1,LK4
MOV
@R0,A;输出键值
INC
R0
MOV
A,R0
CJNE
A,#26H,LK36
MOV
R0,#20H
;复位R0指针
LK36:CJNE
A,#2DH,LK37
MOV
R0,#27H
LK37:LCALL
SCAN
LCALL
KS
JNZ
LK36
LK4:
RET
KEY_SCAL:MOV
32H,#MFS;SCAN子程序
秒表子程序
CLR
TR1;秒表复位
MOV
MFS,#00H
MOV
MFG,#00H
MOV
MMS,#00H
MOV
MMG,#00H
MOV
MHS,#00H
MOV
MHG,#00H
RET
KEY_STEP:CPL
TR1;启动秒表或暂停秒表
SETB
F_2;为1时
启动秒表计时程序
LK38:LCALL
SCAN;松手检测
LCALL
KS
JNZ
LK38
RET
KEY_MON:CPL
F_3;取反
JB
F_3,M1;为1时,数码管显示秒表
为0时,数码管显示时钟
MOV
32H,#SHIS
SJMP
M2
M1:MOV
32H,#MFS
M2:LCALL
SCAN;松手检测
LCALL
KS
JNZ
M2
RET
KEY_A:MOV
32H,#NIANS;按键A子程序
查看
年月日
日期
AA0:LCALL
SCAN;松手检测
LCALL
KS
JNZ
AA0
MOV
32H,#SHIS;恢复时钟显示
RET
KEY_B:MOV
32H,#NIANS;按键B子程序修改年月日
SETB
F_1;解除键盘锁定
MOV
R0,#27H;设置指针指向年月日存储区首地址
MOV
NIANS,#10H;数码管上显示时__分__秒__
MOV
NIANG,#10H
MOV
YUES,#10H
MOV
YUEG,#10H
MOV
RIS,#10H
MOV
RIG,#10H
RET
KEY_C:MOV
32H,#SS
;按键C子程序
显示闹钟时间
CC0:LCALL
SCAN;松手检测
LCALL
KS
JNZ
CC0
MOV
32H,#SHIS;恢复显示时钟
RET
KEY_D:MOV
32H,#SS;按键D子程序修改闹钟时间
SETB
F_1;键盘解锁
MOV
R0,#35H;设置指针指向闹钟存储区首地址
MOV
SS,#10H;数码管上显示时__分__秒__
MOV
SG,#10H
MOV
FS,#10H
MOV
FG,#10H
MOV
MS,#10H
MOV
MG,#10H
RET
KEY_E:MOV
32H,#SHIS;按键E子程序确认键
恢复时钟键
SETB
TR0;启动T0
恢复时钟
MOV
A,#0FFH;灭灯
MOV
P1,A
CLR
TR1;停止T1
停止闹钟闪灯
CLR
F_1;锁定键盘
;以下程序是判断时钟是否符合标准,不符合则清00时00分00秒
MOV
R0,#20H
MOV
A,@R0
SWAP
A
INC
R0
ADD
A,@R0
CLR
C
CJNE
A,#24H,EE0
EE0:JNC
EE5
MOV
R0,#22H
CJNE
@R0,#06H,EE1
EE1:JNC
EE5
INC
R0
CJNE
@R0,#0AH,EE2
EE2:JNC
EE5
INC
R0
CJNE
@R0,#06H,EE3
EE3:JNC
EE5
INC
R0
CJNE
@R0,#0AH,EE4
EE4:JC
EE
EE5:MOV
SHIS,#00H
MOV
SHIG,#00H
MOV
FENS,#00H
MOV
FENG,#00H
MOV
MIAOS,#00H
MOV
MIAOG,#00H
EE:MOV
R0,#20H
RET
KEY_F:CLR
TR0;按键F子程序
修改时钟
SETB
F_1;解除键盘锁定
MOV
R0,#20H;指向时钟首地址
MOV
SHIS,#10H
;数码管上显示时__分__秒__
MOV
SHIG,#10H
MOV
FENS,#10H
MOV
FENG,#10H
MOV
MIAOS,#10H
MOV
MIAOG,#10H
RET
KS:MOV
DPTR,#0FF20H;判断键是否按下子程序
MOV
A,#00H
MOVX
@DPTR,A
MOV
DPTR,#0FF22H
MOVX
A,@DPTR
CPL
A
ANL
A,#0FH
RET
KEYTAB:
DB
00H,07H,01H,04H,00H,08H,02H,05H,0FH;键值表
DB
09H,03H,06H,0EH,0AH,0CH,0BH,0DH,00H,11H,00H,12H,00H,13H,00H
DELAY:MOV
R3,#01H
;扫描延时子程序
D1:MOV
R4,#02H
D2:MOV
R5,#0F8H
DJNZ
R5,$
DJNZ
R4,D2
DJNZ
R3,D1
RET
TABLE:DB
3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH
DB
39H,5EH,79H,71H,08H,40H,80H,00H
END
第5章
系统调试和测试结果与分析
5.1、实验仪器与工具
本次课程设计使用的硬件部分是DJ-598K实验开发系统,实验仪主板由许多独立的硬件实验模块组成,可见它们组成各种各样的硬件实验,板上的“O”型圆孔用来作为测试孔或用于连接硬导线组成实验。
下面将详细介绍几个与本次课设有关模块的功能与用途。
1、
LED发光二极管指示电路
实验仪上包括12只发光二极管及相应驱动电路,L1~L12为相应发光二极管驱动信号输入端,该输入端为低电平时发光二极管亮。
2、
显示接口电路
数码管的段控制信号是由8255的PB口经74LS245缓冲器后输出得到,6位位控制信号由8255的PA口经74LS245缓冲器后输出得到。
3、
键盘接口电路
8255的PC0~PC3作为矩阵键盘行扫描线,8255的PA口为矩阵键盘列入线。
本次课程设计使用的软件部分是DJ-51仿真开发系统软件,该软件有编辑、连接、动态调试综合实验仪的硬件接口等功能。
5.2、调试闹钟
调试闹钟时,发现时钟时时分秒和闹钟的时分秒无法判断相等,虽然闹钟的时分秒和时钟的时分秒赋了相同的值,但是闹钟闪灯程序依然不能亮。经多次软件仿真后,得出原来时钟的时十位地址是20H单元,而程序中定义了00H位,
因为00H位是在20H单元中的第一位,所以给闹钟的时分秒和时钟的时分秒赋了相同的值时,当程序运行时,一旦00H位改变,闹钟的时分秒和时钟的时分秒存储单元中的内容就不相同了。后来把00H位改为70H位,问题就解决了。
5.3、调试按键子程序
在调试按键子程序时,有一次提示
JZ
LK4
行有错误,在程序中查找了很久也没有发现此行错在哪里!后来认真看错误提示,可能是跳转超出了范围,所以就在程序中离JZ
LK4最近的地方找到一行LK1:LJMP
LK4,然后就把JZ
LK4改为JZ
LK1,运行程序后无错误。
第六章
结论
本设计能够很准确的走时,并能够通过硬件对时钟进行时间调整。
u
功能介绍:
1.
显示:XX时XX分XX秒
2.
时间可调:按下调整键F键,可以输入任意时间。按下E键,此时可以启动时钟。按下A键,可以查看现在的日期XX年XX月XX日。按下B键,可以修改日期。按下C键,可以查看闹钟时间,按下D键可以修改闹钟时间。按下SCAL键,可以启动秒表。按下STEP键,可以计时开始和暂停。按下MON键,可以切换时钟显示和秒表显示。
u
调试要点:首先确保各器件的完好性,其次检测各芯片的电源线和地线是否接触良好,然后焊接器件,接好电源用万用表检测各电源端、地端的状态是否正常。检查无误后插上AT89S52并烧写一简易的程序,观察电路是否能协同工作。最后烧写工作程序,根据显示现象调试程序直至成功。上电运行时,数码管开始显示00:00:00,时钟开始走时。
u
制作心得:在这次课程设计的调试过程中,遇到很多问题,如:由于跳转指令出错,导致整个程序在运行时进入死循环,修改时没有根据流程盲目查找原因浪费许多时间,又由于考虑不周,时钟显示29:89。该电路缺少整点报时功能,由于能力和时间问题只能到此为止,很是遗憾,但在查找资料的过程中学到了许多,同时在协作过程中增进同学间的友谊。
参考文献
【1】
陈石胜,单片机技术应用
.
广东:
广东省技师学院电气自动化专业教改教材,2007
【2】
李广第,单片机基础
.
北京:
北京航空航天大学出版社,2001
【3】求是科技编著,单片机典型模块设计实例导航.北京:人民邮电出版社,2004
【4】孙涵芳,MCS-51系列单片机原理及应用
.北京:北京航空航天大学出版社.1996-4
【5】于海生,微型计算机控制技术
.北京:清华大学出版社.1999-6
29
