单片机小系统电子钟的设计.docx
《单片机小系统电子钟的设计.docx》由会员分享,可在线阅读,更多相关《单片机小系统电子钟的设计.docx(22页珍藏版)》请在冰豆网上搜索。
单片机小系统电子钟的设计
1.
课程设计的目的
(1)单片机系统的整体设计流程。
(2)能够正确安装和焊接硬件电路板。
(3)单片机系统的硬件、软件调试方法及相关工具的使用。
(4)各种常见元器件的选择及使用。
2.课程设计题目描述和要求
题目描述:
电子钟的设计
制作要求:
用80C51/52单片机编程控制显示的电子钟。
(1)要有8位LED显示器,分别显示“年号:
月份:
日期”/“时:
分:
秒:
毫秒”先显示年份再显示日期。
(2)可以设置四个输入按键,功能分别是“移位”,“数字+”,“数字-”,“存储”,即“SHIFT”,“NUM+”,“NUM-”,“SAVE”。
(3)显示过程:
实验板通电开机后,8位LED显示器显示“时:
分:
秒”。
按下“SHIFT”后第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。
再按“NUM+”数字增加,按“NUM-”数字减少,按“SAVE”储存修改结果。
(4)能够正确安装和焊接硬件电路板。
拿到元器件后,用万用表对电子元器件进行参数测量、检查。
焊接时,要焊点饱满、光洁,无虚焊、漏焊、错焊。
(5)熟悉单片机系统的工作原理及调测方法。
软硬件安装调测完成后根据系统的工作原理、过程、测试数据及遇到的问题与处理情况、体会等完成课设报告。
3.课程设计报告内容
3.1课题设计方案及基本原理
通过对单片机AT89C52软件编程来控制硬件使数码管显示年份与时间,并且可以通过按键来控制时间及年份的修改。
基本原理:
单片机AT89C52P0.0~P0.3来判断按键是否按下,当按键按下时,P0.0~P0.3为低电平,单片机程序对应为00H。
通过P1,0~P1.3控制4511的4个输入端,进行译码输出,4511的输出端7段段码送数码管显示。
P1.4~P1.7控制4028的4个输入端进行位选输出9个状态,然后经过两个2003进行驱动让数码管能按按键要求显示。
3.2硬件电路介绍
电路原理图:
CD4028是BCD码4—10译码器,它由4个缓冲输入端口、译码逻辑门和10个缓冲器组成。
加至四个输入端口A0~A3的一个BCD码在十个十进制译码器输出十个相应的顺序脉冲,输出为高电平有效。
同样,若A3=0,加在输出口具有高驱动能力,以在高输出应用中增强直流和动态性能。
BCD-十进制译码器4028的引脚图如上页原理图中所示。
3.3软件设计
基本思路:
(1)动态扫描显示LED电路程序:
设立8个内部RAM显示缓冲区,将要显示的数据的BCD码送显示缓冲区,程序只需要将显示缓冲区的BCD码,送相应的端口即可。
动态扫描显示
例如:
将40H-48H为“时:
分:
秒:
毫秒”显示区
将49H-4FH为“年:
月:
日”显示区
(2)动态扫描键盘程序:
循环扫描有无按键,有:
判断是何按键,转入相应子程序处理。
无:
返回主程序执行。
(3)定时器设置与时间处理的程序:
此段为该程序段的关键所在,它决定时间的准确性,和进位的正确性。
定时器计数可用中断方式,也可以用软件查询方式进行。
定时器中断定时方式的精确度高。
采用软件延时方式要注意每条指令的机器周期的精确计算,否则会造成时间的不准。
(4)各项功能键的子程序模块:
移位子程序:
按下“SHIFT”后左边第一位数字闪动,继续按下“SHIFT”后面数字闪动移位。
程序中可设置第二显示缓冲区,将移到要闪动的数字位设为不显示(黑)“0FFH/00H”,程序只需要将两组显示缓冲区的BCD码,分时间间隔发送出去,就会产生数字闪动效果。
数字+/-:
将要显示的数据缓冲区的内容取出加一/减一,注意每个位都有自己的位限制,如“时”的位最大数23,“分、秒”最大数59,“月”最大数12,“日”最大数31。
两位数一起调整比较方便。
还要注意的是计数后二/十进制之间的转换问题。
“存储”:
即将修改好的数值存储到显示缓冲区,并返回,进入主程序运行。
软件设计流程图:
3.4调试过程
(1)根据实验原理图焊接电路,然后进行硬件调试,用万用表点对点测量,看电路是否焊接好。
特别是芯片的引脚,看是否连通,如:
AT89C52芯片的18脚与信号连通的话,用示波器测量18脚时就会出现比较标准的正弦波。
对按键进行测试时,如果按键没有按下,测量按键两端就会有大概5V的电压,如果按键两端没有电压,说明按键已经按下,按下后其已经接地。
(2)然后进行软件编程,对其进行功能仿真,仿真时要对仿真器进行设置,不然会出现超出地址范围的错误。
然后进行断点设置,观察运行状态,看外部寄存器中20H~2AH中单元的变化,看是否达到要求,编程时注意对于在后面将发生变化的寄存器单元要进行清零操作,不然会影响后面的结果,对于加操作后要进行十进制调整,并且DAA的指令只对寄存器A操作。
(3)将编写好的程序用烧录器烧录到AT89C52芯片中,然后再安装到硬件电路板上,接通5—12V的电源后会先显示时间,按键切换以后将显示日期,再切换后毫秒会闪烁通过+按键可对其进行加操作,—按键进行减操作。
依次进行时间的修改,按保存后,再切换将进行从日到年对日期修改。
3.5遇到的问题及解决方法
(1)当我把程序下载到AT89C52芯片中,然后再安装到硬件电路板上,接通5—12V的电源后,我发现LED数码管只有左边一半是亮的,我编的程序是让所有LED数码管都亮。
解决方法:
我用别人的硬件试了一下我的芯片所有LED数码管都亮了,这肯定是我的硬件电路的问题,我找老师帮忙,老师先用万用表检查控制显示的CD4028芯片是否接通,发现是好的,然后用示波器检查AT89C52左边引脚的波形,发现左边第三个引脚没有波形,其次又发现CD4028芯片有一个引脚也没波形,老师断定是我的CD4028芯片坏了,最后老师给我换了一个CD4028芯片,再测试后就好了。
(2)编译后指令超出地址范围。
解决方法:
可以采用接力的方式先转到中间再转到所要转的地方,灵活运用指令就会解决一些问题。
(3)按键不是很灵敏,按的太快没反应,或者按键反应太快了按一下跳好几下。
解决方法:
按键延时时间太长或太短了,将延时时间调整到10—20毫秒,就可以解决了。
4.实验总结
对单片机AT89C52芯片内部结构以及各引脚功能有了进一步的了解,对硬件的焊接更加熟练,能基本做到不拖焊、虚焊,并且一次成功。
第一次接触这么长程序的编写,思路开始很模糊,许多子程序不知道放哪里比较好,有时主程序也很模糊,通过参考别人的程序有了一定的思维,再根据自己的想法对别人的程序进行了一定的修改,就变为自己的东西,通过这次编写,我了解到思维逻辑性要在掌握程序的基础之上,这样才能做到有序,有条理。
编写程序思路是很重要的,首先理清思路,画出程序流程图,根据流程图,一步步用指令实现。
参考资料
[1]陈青.单片计算机原理课程设计指导书.华中科技大学武昌分校2012.1.8
[2]姜志海.单片微机原理及应用.北京:
电子工业出版社.2005.
[3]李群芳.肖看.单片机原理、接口及应用.北京:
清华大学出版社.2005.
附录1硬件实物图
ORG0000H
AJMPMAIN1
ORG001BH
AJMPT1INT
ORG0030H
MAIN1:
MOVSP,#70H;初始化
CLRA
CLR20H.1
MOVTMOD,#20H
MOVTH1,#06H
MOVTL1,#06H
SETBEA
SETBET1
SETBTR1
MOV31H,#00H
MOV32H,#58H
MOV33H,#58H
MOV34H,#23H
MOV35H,#27H
MOV36H,#02H
MOV37H,#12H
MOV38H,#20H
MOV40H,#0;标志位
MOVR0,#31H
MOVR1,#32H
LOPA:
JNB20H.1,NEXT1
CLR20H.1
MOVA,#1
ADDA,31H;到10毫秒
DAA
MOV31H,A
CJNEA,#100H,NEXT1
MOV31H,#0
MOVA,#1
ADDA,32H;到一秒
DAA
MOV32H,A
CJNEA,#60H,NEXT1
MOV32H,#0
MOVA,#1
ADDA,33H;到一分
DAA
MOV33H,A
CJNEA,#60H,NEXT1
MOV33H,#0
MOVA,#1
ADDA,34H;到一时
DAA
MOV34H,A
CJNEA,#24H,NEXT1
MOV34H,#0
MOVA,#1
ADDA,35H;到一天
DAA
MOV35H,A
LCALLTIAO_TIAN
MOV35H,#01H
MOVA,#1
ADDA,36H;到一月
DAA
MOV36H,A
CJNEA,#13H,NEXT1
MOV36H,#01H
MOVA,#1;到一年
ADDA,37H
DAA
MOV37H,A
CJNEA,#100H,NEXT1
MOV37H,#00H
MOVA,#1
ADDA,38H
DAA
MOV38H,A
CJNEA,#100H,NEXT1
MOV38H,#00H
RET
;----------切换时间和年----------------------
NEXT1:
JBP0.0,LOPB;判断是否切换
JNBP0.0,$
MOVA,R0
CJNEA,#35H,LOPC
MOVR0,#31H
MOVR1,#32H
LJMPLOPB
LOPC:
MOVR0,#35H
MOVR1,#36H
LOPB:
LCALLDISP
JBP0.1,LOP0;判断按键进入调整
JNBP0.1,$
LCALLLOP1;设置时间和日期
LOP0:
LJMPLOPA
;----------调时间和日期----------------
LOP1:
JBP0.1,LOP2;判断是否退出调整
JNBP0.1,$
RET
LOP2:
JBP0.4,LOP3;判断是否移位
JNBP0.4,$
INC40H;指针加一
MOVA,40H
CJNEA,#04H,LOP3;没有到最前两位
MOV40H,#0
LOP3:
MOVA,40H;判断是哪一位调整
CJNEA,#0,N_HAO_HUO_RI
JBP0.2,LUOA;进入加调整
JNBP0.2,$
MOVA,R0;调毫秒或者天数
CJNEA,#31H,AOP1;加毫秒
MOVA,#1
ADDA,31H
DAA
MOV31H,A
CJNEA,#100H,LUOA
MOV31H,#0
LJMPLUOA
AOP1:
MOVA,#1;加天数
ADDA,35H
DAA
MOV35H,A
LCALLTIAO_TIAN
LJMPLUOA
LUOA:
MOVR4,#30H
LUO1:
LCALLDISP
DJNZR4,LUO1
MOVR4,#30H
LUO2:
LCALLDISP1
DJNZR4,LUO2
LJMPLOP1
N_HAO_HUO_RI:
CJNEA,#1,N_MIAO_HUO_YUE
JBP0.2,LUOB
JNBP0.2,$
MOVA,R1;调秒或者月
CJNEA,#32H,AOP2
MOVA,#1;加秒
ADDA,32H
DAA
MOV32H,A
CJNEA,#60H,LUOB
MOV32H,#0
LJMPLUOB
AOP2:
MOVA,#1;加月
ADDA,36H
DAA
MOV36H,A
CJNEA,#13H,LUOB
MOV36H,#01H
LUOB:
MOVR4,#30H
LUO3:
LCALLDISP
DJNZR4,LUO3
MOVR4,#30H
LUO4:
LCALLDISP2
DJNZR4,LUO4
LJMPLOP1
N_MIAO_HUO_YUE:
CJNEA,#2,SHI_HUO_NIANGAO
JBP0.2,LUOC
JNBP0.2,$
INCR0;R0加2
INCR0
MOVA,R0;调分或者年低两位
CJNEA,#33H,AOP3
MOVA,#1;加分
ADDA,33H
DAA
MOV33H,A
CJNEA,#60H,LOPP1
MOV33H,#0
LOPP1:
DECR0
DECR0
LJMPLUOC
AOP3:
DECR0
DECR0
MOVA,#1;加年低两位
ADDA,37H
DAA
MOV37H,A
CJNEA,#100H,LUOD
MOV37H,#0
LJMPLUOC
LUOC:
MOVR4,#30H
LUO5:
LCALLDISP
DJNZR4,LUO5
MOVR4,#30H
LUO6:
LCALLDISP3
DJNZR4,LUO6
LJMPLOP1
SHI_HUO_NIANGAO:
JBP0.2,LUOD
JNBP0.2,$
INCR1
INCR1
MOVA,R1
CJNEA,#34H,AOP4
MOVA,#1;加时
ADDA,34H
DAA
MOV34H,A
CJNEA,#24H,LOPP2
MOV34H,#0
LJMPLOPP2
AOP4:
DECR1
DECR1
MOVA,#1;加年高两位
ADDA,38H
DAA
MOV38H,A
CJNEA,#100H,LUOD
MOV38H,#0
LJMPLUOD
LOPP2:
DECR1
DECR1
LUOD:
MOVR4,#30H
LUO7:
LCALLDISP
DJNZR4,LUO7
MOVR4,#30H
LUO8:
LCALLDISP4
DJNZR4,LUO8
LJMPLOP1
;--------月份天数的确定--------------------
TIAO_TIAN:
MOVA,36H;将月份数给A
CJNEA,#02,NOT_2_YUE
MOVA,37H
CJNEA,#00H,DIV4;判断是否为闰年
MOVA,38H
MOV21H,A
ANLA,#0F0H
SWAPA
MOVB,#10
MULAB
MOV22H,A
MOVA,21H
ANLA,#0FH
ADDA,22H
MOVB,#4
DIVAB
MOVA,B
CJNEA,#00H,PING_NIAN
SJMPRUN_NIAN
DIV4:
MOVA,37H
MOV23H,A
ANLA,#0F0H
SWAPA
MOVB,#10
MULAB
MOV24H,A
MOVA,23H
ANLA,#0FH
ADDA,24H
MOVB,#4
DIVAB
MOVA,B
CJNEA,#00H,PING_NIAN
SJMPRUN_NIAN
RUN_NIAN:
MOVA,35H
CJNEA,#30H,TIAO1
MOV35H,#01
SJMPTIAO1
PING_NIAN:
MOVA,35H
CJNEA,#29H,TIAO1
MOV35H,#01
SJMPTIAO1
NOT_2_YUE:
MOVA,36H
CJNEA,#4,NOT_4
SJMPDAY30
NOT_4:
CJNEA,#6,NOT_6
SJMPDAY30
NOT_6:
CJNEA,#9,NOT_9
SJMPDAY30
NOT_9:
CJNEA,#11H,DAY31
SJMPDAY30
DAY30:
MOVA,35H
CJNEA,#31H,TIAO1
MOV35H,#01
LJMPTIAO1
DAY31:
MOVA,35H
CJNEA,#32H,TIAO1
MOV35H,#01
TIAO1:
RET
;---------------定时-------------------
T1INT:
PUSHACC
PUSHPSW
INC30H
MOVA,#28H
XRLA,30H
JNZSTF
MOV30H,A
SETB20H.1
STF:
POPPSW
POPACC
RETI
;---------------显示---------------
DISP:
MOVA,@R0
ORLA,#0F0H
ANLA,#0FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#1FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0F0H
ANLA,#2FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#3FH
MOVP1,A
ACALLDEL1MS
INCR0
INCR0
INCR1
INCR1
MOVA,@R0
ORLA,#0F0H
ANLA,#4FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#5FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0F0H
ANLA,#6FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#7FH
MOVP1,A
ACALLDEL1MS
DECR0
DECR0
DECR1
DECR1
RET
DISP1:
MOVA,@R1
ORLA,#0F0H
ANLA,#2FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#3FH
MOVP1,A
ACALLDEL1MS
INCR0
INCR0
INCR1
INCR1
MOVA,@R0
ORLA,#0F0H
ANLA,#4FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#5FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0F0H
ANLA,#6FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#7FH
MOVP1,A
ACALLDEL1MS
DECR0
DECR0
DECR1
DECR1
RET
DISP2:
MOVA,@R0
ORLA,#0F0H
ANLA,#0FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#1FH
MOVP1,A
ACALLDEL1MS
INCR0
INCR0
INCR1
INCR1
MOVA,@R0
ORLA,#0F0H
ANLA,#4FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#5FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0F0H
ANLA,#6FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#7FH
MOVP1,A
ACALLDEL1MS
DECR0
DECR0
DECR1
DECR1
RET
DISP3:
MOVA,@R0
ORLA,#0F0H
ANLA,#0FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#1FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0F0H
ANLA,#2FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#3FH
MOVP1,A
ACALLDEL1MS
INCR0
INCR0
INCR1
INCR1
MOVA,@R1
ORLA,#0F0H
ANLA,#6FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#7FH
MOVP1,A
ACALLDEL1MS
DECR0
DECR0
DECR1
DECR1
RET
DISP4:
MOVA,@R0
ORLA,#0F0H
ANLA,#0FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#1FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0F0H
ANLA,#2FH
MOVP1,A
ACALLDEL1MS
MOVA,@R1
ORLA,#0FH
SWAPA
ANLA,#3FH
MOVP1,A
ACALLDEL1MS
INCR0
INCR0
INCR1
INCR1
MOVA,@R0
ORLA,#0F0H
ANLA,#4FH
MOVP1,A
ACALLDEL1MS
MOVA,@R0
ORLA,#0FH
SWAPA
ANLA,#5FH
MOVP1,A
ACALLDEL1MS
DECR0
DECR0
DECR1
DECR1