单片机电子钟课程设计.docx
《单片机电子钟课程设计.docx》由会员分享,可在线阅读,更多相关《单片机电子钟课程设计.docx(18页珍藏版)》请在冰豆网上搜索。
![单片机电子钟课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/2/a02a53a7-4549-44d1-8670-73f4c409b689/a02a53a7-4549-44d1-8670-73f4c409b6891.gif)
单片机电子钟课程设计
《单片机原理与应用》
课程设计报告书
系别:
机械与电子工程学院
专业:
自动化
班级:
10206201
姓名:
冷木龙
指导教师:
朱兆优
12.6.25
一、实验任务…………………………………………………3
二、编程思路…………………………………………………3
三、程序流程图………………………………………………4
四、使用资源分配……………………………………………5
五、实验调试与结果分析……………………………………5
六、实验总结…………………………………………………5
七、实验程序清单(加注解)………………………………6
八、实验电路图………………………………………………14
设计题目多功能电子钟
1、实验任务
用8051单片机设计扩展6位数码管的静态或动态显示电路,再连接几个按键和一个蜂鸣器报警电路,设计出一个多功能电子钟,实现以下功能:
(1)走时(能实现时分秒,年月日的计时)
(2)显示(分屏切换显示时分秒和年月日,修改时能定位闪烁显示)
(3)校时(能用按键修改和校准时钟)
(4)定时报警(能定点报时)
2、编程思路
(1)选择工作方式,计算初值;
(2)采用中断方式进行溢出次数累计;
(3)从秒-分-时和年-月-日的计时是通过累加和数值比较实现的;
(4)时钟显示缓冲区:
时钟时间在方位数码管上进行显示,为此在内部RAM中要设置显示缓冲区,共6个地址单元。
显示缓冲区从左到右依次存放时、分、秒、年、月、日数值。
(5)主程序:
主要进行定时器/计数器的初始化编程,然后反复调用显示子程序的方法等待中断的到来。
(6)中断服务程序:
进行计时操作。
3、程序流程图
中断走时流程图
4、使用的资源分配
把单片机系统区域中的P0.0-P0.7端口用线连接到动态数码显示区域中的A-H端口上;
把单片机系统区域中的P3.0-P3.7端口用线连接到动态数码显示区域中的S1-S7端口上;
把单片机系统区域中的P3.0-P3.5端口用导线连接到6个数码管的公共端。
5、实验调试与结果分析
实验调试
1.实验程序的调试
在TKStudio软件中,反复运行,发现错误并改正。
2.实验电路的调试
把调试好的程序载入单片机中,在运行看是否有错误。
结果分析
本次设计的单片机时钟系统中,其误差主要来源包括晶体频率误差,定时器溢出误差,
延迟误差。
晶体频率产生这震荡,容易产生走时误差;定时器溢出的时间误差,本应这一秒溢出,但却在这一秒溢出,造成走时误差;延时时间过长或过短,都会造成与基准时间产生偏差,造成走时误差。
6、实验总结
经过将近一周的努力,在指导老师和同学的帮助下,终于完成了多功能电子时钟的课程设计。
刚开始拿到实验题目的时候,一头雾水,不知该从何看起,单通过对程序的模块化分解,各个问题也就明了了。
在此次的多功能电子钟设计过程中,更进一步地熟悉了芯片的结构及掌握了各芯片的工作原理和其具体的使用方法。
此次的多功能电子钟设计重在于仿真和编程,虽然能把电路原理图接出来,并能正常显示,但对于电路本身的原理并不是十分熟悉.总的来说,通过这次的设计实验更进一步地增强了实验的动手能力。
这次的课程设计终于完成了,在此次课程设计中我们获益非浅,其过程中遇到了很多编程问题和操作问题,但最终还是在老师的指导下迎刃而解。
7、实验程序清单(加注解)
ORG0000
AJMPMAIN
ORG001BH
LJMPTIME
ORG0100H
MAIN:
MOV20H,#10H;中断次数
MOV32H,#18H;赋初值
MOV31H,#28H
MOV30H,#00H
MOV40H,#23H
MOV41H,#12H
MOV42H,#12H
MOVR7,#00H
MOVTMOD,#10H;选择定时器/计数器工作方式1
MOVTL1,#0B0H;定时器/计数器赋初值
MOVTH1,#3CH
SETBTR1;启动定时器/计数器1
MOVIE,#88H;允许定时器/计数器中断
DUSP:
MOVR2,#3;显示年月日主程序
MOVR0,#30H
MOVDPTR,#TAB
MOVP3,#0DFH
LOOP:
MOVA,@R0
ANLA,#0FH;取秒的低位
MOVCA,@A+DPTR;查表
MOVP0,A;把日的低位送到P0口
LCALLYSH2S;延时
MOVA,P3
RRA
MOVP3,A
MOVA,@R0
ANLA,#0F0H;取日的高位
SWAPA
MOVCA,@A+DPTR;查表
MOVP0,A
LCALLYSH2S;延时
MOVA,P3
RRA
MOVP3,A
INCR0
DJNZR2,LOOP循环3次,分别显示时分秒
JNBP1.7,KEY17;查询键17有没有按下
JNBP1.6,KEY16;查询键16有没有按下
JNBP1.5,KEY15;查询键15有没有按下
JNBP1.4,KEY14;查询键14有没有按下
JNBP1.3,KEY13;查询键13有没有按下
AJMPDUSP;跳到显示年月日的子程序
KEY17:
JNBET1,KEY17B;键处理
CLRET1
CLREA
MOVR6,#0BH
LJMPDUSP
RET
KEY17B:
MOVR6,#0AH
SETBET1
SETBEA
LJMPDUSP
RET
KEY16:
JNBP1.6,$
CJNER6,#0BH,KEY16B
MOVA,32H
ADDA,#01H
DAA
MOV32H,A
CJNEA,#24H,KK1
MOV32H,#00H
KK1:
LCALLYSH2SLL;调用延时
LCALLDISPS
KEY16B:
LJMPDUSP
RET
KEY15:
JNBP1.5,$
CJNER6,#0BH,KEY15B
MOVA,31H
ADDA,#01H
DAA
MOV31H,A
CJNEA,#60H,KK2
MOV31H,#00H
KK2:
LCALLYSH2SLL
LCAllDISPF
KEY15B:
LJMPDUSP
RET
KEY14:
JNBP1.4,$
CJNER6,#0BH,KEY14B
MOVA,30H
ADDA,#01H
DAA
MOV30H,A
CJNEA,#60H,KK3
MOV30H,#00H
KK3:
LCALLYSH2SLL
LCALLDISPM
KEY14B:
LJMPDUSP
RET
KEY13:
JNBP1.3,$
INCR7
CJNER7,#01H,KEY13B
AJMPDUSPP
KEY13B:
CJNER7,#02H,KEY13BB
MOVR5,#0BH
AJMPDUSPP
KEY13BB:
MOVR5,#0AH
MOVR7,#00H
AJMPDUSP
RET
DUSPP:
MOVR2,#3;年月日的显示子程序
MOVR0,#40H
MOVDPTR,#TAB
MOVP3,#0DFH
LOOPP:
MOVA,@R0
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
LCALLYSH2S
MOVA,P3
RRA
MOVP3,A
MOVA,@R0
ANLA,#0F0H
SWAPA
MOVCA,@A+DPTR
MOVP0,A
LCALLYSH2S
MOVA,P3
RRA
MOVP3,A
INCR0
DJNZR2,LOOPP
JNBP1.3,KEY13
JNBP1.2,KEY12
JNBP1.1,KEY11
AJMPDUSPP
RET
KEY12:
JNBP1.2,$
CJNER5,#0BH,KEY12B
MOVA,41H
ADDA,#01H
DAA
MOV41H,A
CJNEA,#13H,KK4
MOV41H,#01H
KK4:
LCALLDISPY
LCALLYSH2S;调用延时
KEY12B:
LCALLDUSPP
RET
KEY11:
JNBP1.1,$
CJNER5,#0BH,KEY11B
MOVA,40H
ADDA,#01H
DAA
MOV40H,A
CJNEA,#31H,KK5
MOV40H,#01H
KK5:
LCALLDISPR
LCALLYSH2S
KEY11B:
LJMPDUSPP
RET
DISPY:
MOVDPTR,#TAB;单独显示年
MOVA,41H
ANLA,#0FH
MOVCA,@A+DPTR;查表
MOVP0,A
MOVP3,#11110111B;显示
LCALLYSH2S
MOVA,41H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR;查表
MOVP0,A
MOVP3,#11111011B;显示
LCALLYSH2S
RET
DISPR:
MOVA,40H;日的独立显示
ANLA,#0FH
MOVCA,@A+DPTR;查表
MOVP0,A
MOVP3,#11011111B;显示
LCALLYSH2S
MOVA,40H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
MOVP3,#11101111B
LCALLYSH2S
RET
YSH2S:
MOV50H,#01H;延时程序
LOOP2:
MOV51H,#14H
LOOP21:
MOV52H,#5AH
XHD3:
DJNZ52H,XHD3
DJNZ51H,LOOP21
DJNZ50H,LOOP2
RET
YSH2SLL:
MOV60H,#05;长延时程序
MM3:
MOV61H,#20
MM2:
MOV62H,#20
MM1:
DJNZ62H,MM1
DJNZ61H,MM2
DJNZ60H,MM3
RET
TIME:
PUSHPSW;走时程序
PUSHACC
MOVTL1,#0B0H
MOVTH1,#3CH
DJNZ20H,RETURN
MOV20H,#10H
CPLP2.0
MOVA,30H
ADDA,#01H
DAA
MOV30H,A
CJNEA,#60H,RETURN
MOV30H,#00H
MOVA,31H
ADDA,#01H
DAA
MOV31H,A
CJNEA,#60H,RETURN
MOV31H,#00H
MOVA,32H
ADDA,#01H
DAA
MOV32H,A
CJNEA,#24H,RETURN
MOV32H,#00H
MOVA,40H
ADDA,#01H
DAA
MOV40H,A
CJNEA,#31H,RETURN
MOV40H,#01H
MOVA,41H
ADDA,#01H
DAA
MOV41H,A
CJNEA,#13H,RETURN
MOV41H,#01H
MOVA,42H
ADDA,#01H
DAA
MOV42H,A
CJNEA,#99,RETURN
MOV42H,#00H
RETURN:
POPACC
POPPSW
RETI
DISPS:
MOVDPTR,#TAB;单独显示时
MOVA,32H
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
MOVP3,#11111101B
LCALLYSH2S
MOVA,32H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
MOVP3,#11111110B
LCALLYSH2S
RET
DISPF:
MOVA,31H;单独显示分
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
MOVP3,#11110111B
LCALLYSH2S
MOVA,31H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
MOVP3,#11111011B
LCALLYSH2S
RET
DISPM:
MOVA,30H;单独显示秒
ANLA,#0FH
MOVCA,@A+DPTR
MOVP0,A
MOVP3,#11011111B
LCALLYSH2S;调用延时程序
MOVA,30H
SWAPA
ANLA,#0FH
MOVCA,@A+DPTR;查表
MOVP0,A
MOVP3,#11101111B;显示
LCALLYSH2S
RET
TAB:
DB3FH,06H,5BH,4FH,66H,6DH;表
DB7DH,07H,7FH,6FH
END
8、实验电路图
电路连接总图
按键电路图
键名
实现功能
K1
调试开关,控制调试开始
K2
实现时加一
K3
实现分加一
K4
实现秒加一
K5
实现年月日的切换
K6
实现月的加一
K7
实现日的加一
各按键实现功能说明表