资源描述
沈阳工程学院
课 程 设 计
设计题目:多功能时钟程序设计
沈阳工程学院
课程设计任务书
课程设计题目: 多功能时钟程序设计
多功能时钟程序设计成绩评定表
指导教师评审意见
评价内容
具体要求
权重
评分
加权分
论 证
独立查阅文献,制定课程设计方案和日程安排。
0.1
5
4
3
2
工作能力态度
工作态度认真,遵守纪律,出勤情况是否良好,能够独立完成设计工作。
0.2
5
4
3
2
工作量
按期圆满完成规定的设计任务,工作量饱满,
0.2
5
4
3
2
说明书的质量
说明书立论正确,论述充分,文字通顺,技术用语准确,符号统一,书写工整规范。
0.5
5
4
3
2
指导教师评审成绩
(加权分合计乘以12)
分
加权分合计
指导教师签名:
年 月 日
评阅教师评审意见
评价内 容
具体要求
权重
评分
加权分
查文献
查阅文献有广泛性,有综合归纳资料的能力
0.2
5
4
3
2
工作量
工作量饱满,难度适中
0.5
5
4
3
2
说明书的质量
说明书立论正确,论述充分,文字通顺,技术用语准确,符号统一,书写工整规范。
0.3
5
4
3
2
评阅教师评审成绩
(加权分合计乘以8)
分
加权分合计
评阅教师签名:
年 月 日
课程设计总评成绩
分
系部: 班级: 学生姓名:
中文摘要
时钟,自从它发明的那天起,就成为人类的朋友,但随着时间的推移,科学技术的不断发展,人们对时间计量的精度要求越来越高,应用越来越广。怎样让时钟更好的为人民服务,怎样让我们的老朋友焕发青春呢?这就要求人们不断设计出新型时钟。
数字电子钟的设计方法有多种,其中,利用单片机实现的电子钟具有编程灵活,便于电子钟功能的扩充,即可用该电子钟发出各种控制信号,精确度高等特点,同时可以用该电子钟发出各种控制信号。
该数字钟采用液晶显示屏显示其时间与定时时间,即采用P6口输入,P7口输出,由R0输入需显示的时间,再通过延时程序将时间稳定的显示在液晶屏上。校准时间由外部中断4及开关按键控制;定时时间由外部中断3及开关按键控制 ,KEY3、KEY4键每按一次其时分秒的数字增加一。
关键字: 单片机, 数字钟, 校时, 定时器
目录
1 课程设计要求 1
1.1 设计主要内容及要求 1
1.2 对设计论文撰写内容、格式及字数的要求 1
1.3 时间进度安排 1
2 课程设计思路 2
2.1 计时 2
2.2 校时 2
2.3 闹铃 2
3 设计流程图 3
4 各模块设计 4
4.1 时钟部分 4
Ø 时钟程序分析 4
Ø 时钟部分程序 4
4.2 定时部分 6
Ø 定时程序分析 6
Ø 定时部分程序 6
4.3 校时部分 8
Ø 校时程序分析 8
Ø 校时部分程序 8
4.4 显示部分 10
Ø 显示程序分析 10
Ø 显示部分程序 10
5 工作过程分析 16
5.1 时钟程序分析 16
5.2 定时程序分析 17
5.3 校时程序分析 19
5.4 显示程序分析 20
6 主要元器件介绍 23
6.1 C8051F020单片机 23
6.2 液晶显示器 24
总结 26
致谢 27
参考文献 27
附录 28
39
多功能时钟程序设计
1 课程设计要求
1.1 设计主要内容及要求
1) 编写多功能时钟程序
2) 能够显示时、分、秒的时钟程序。
3) 具有闹钟功能。
4) 能够进行时间调整。
1.2 对设计论文撰写内容、格式及字数的要求
1) 课程设计论文是体现和总结课程设计成果的载体,一般不应少于 3000字。
2) 学生应撰写时应做到文理通顺,内容正确完整,书写工整,装订整齐。
3) 论文要求打印,打印时按《沈阳工程学院毕业设计(论文)撰写规范》的要求
4) 课程设计论文装订顺序为:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、参考文献。
1.3 时间进度安排
顺序
阶段日期
计 划 完 成 内 容
地址
1
1月7日
教师讲解题目,学生查阅相关资料
实训F422
2
1月8日
查阅相关资料、进行方案论证
实训F422
3
1月9日
确定闹钟设置时间调整方法
实训F422
4
1月10、11、14日
编写程序
实训F422
5
1月15、16日
调试程序
实训F422
6
1月17日
撰写论文
实训F422
7
1月18日
论文答辩
实训F422
2 课程设计思路
本文主要介绍用单片机编程来实现多功能时钟的方法,本设计由单片机C8051F芯片、LED灯液晶显示屏为核心,辅以必要的程序,构成了一个单片机数字时钟。与传统时钟相比,它具有走时精确,显示直观等特点。它的计时周期为12小时,分上下午,显满刻度为“11时59分59秒”,然后上下午交替,另外具有校时、闹钟显示星期等功能等特点。
2.1 计时
当T0进入中断后,先给T0计时1s,再计时60s;当秒计数满60s后开始分的计数,同时将秒清零,否则返回程序继续执行;同理当分计数到60min,开始时的计时并共计数12次,与此同时分、秒清零。当完成12小时的计时后,切换上下午,当从下午切换到上午时为12:00:00星期加一,加到8时再变到1,然后返回主程序继续。
2.2 校时
校时就是对时间进行调整,现将其赋一初值,然后将初值带入计时程序中,然后将其作为初值,计时从该值开始显示.。其中初值的设置由外部中断KEY3和开关按键设定,K1、K2、K3、K4、K6分别控制时、分、秒 、上下午、星期。
2.3 闹铃
定时程序实则就是让系统设定一个闹铃时间,并使LED灯在到达时间时亮。先判断秒是否相等,不等则继续,相等则判断分,同理分相等时判断时、上下午、星期,当系统设定的秒、分、时、上下午、星期与显示的时间都相等时跳到程序TSR使LED亮。其中初值的设置由外部中断KEY4和开关按键设定,K1、K2、K3、K4、K6分别控制时、分、秒、上下午、星期 。
3 设计流程图
主程序
定时50ms
显示
秒加一
校时
判断是否为60s
分加一
定时
判断是否为60m
时加一
判断是否相等
判断是否为12
时加一
时加一
灯亮
上下午翻转
时加一
判断是否为下午
星期变为1
返回主程序
判断是否为8
星期加一
4 各模块设计
4.1 时钟部分
Ø 时钟程序分析
主程序主要是使各端口使能,保证各端口正常使用(主程序请参考附录)。T0工作于定时方式1,进行16位计数。其中秒的地址为30H,分的地址为31H,小时的地址为32H,上下午的地址是50H,星期的地址是34H。
当T0进入中断后,先给T0赋初值3CB0,定时50ms,循环20次计时1s,再跳入子程序ABC中循环60次计时60s;当秒计数满60s后开始分的计数,同时将秒清零重新计时,否则返回程序继续执行;同理当分计数到60min,程序开始时的计时并共计数12次,当计数满12次时,上下午翻转,计满13次时时针变为1,与此同时分、秒清零需重新开始计数,当从下午变成上午时,星期加1,星期计满7次变为1。
Ø 时钟部分程序
$INCLUDE(C8051F020.INC)
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP T0
ORG 0093H
LJMP KEY3
ORG 009BH
LJMP KEY4
ORG 0100H
MAIN: MOV WDTCN,#0DEH ;关看门狗
MOV WDTCN,#0ADH
MOV OSCICN,#05H ;内部振荡4MHz
MOV P1MDOUT,#0FFH ;设置P1的输出方式
MOV P74OUT, #0F0H ;端口6、端口7输出方式为推挽输出
MOV CKCON,#00H ;T0定时器12分频
MOV TMOD,#01H ;T0处于工作方式一,16位
MOV TCON,#10H ;TR0=1,允许T0计数
MOV XBR2,#40H ;交叉开关总使能
MOV EIE2,#30H ;中断6、中断7使能
MOV P3IF,#0CH ;中断7上升沿触发
MOV 50H,#00H
MOV 60H,#00H
MOV TH0,#3CH ;赋初值
MOV TL0,#0B0H
MOV 30H,#00H ;秒存储地址
MOV 31H,#00H ;分存储地址
MOV 32H,#12H ;时存储地址
MOV 33H,#00H ;上下午储存地址
MOV 34H,#01H ; 星期储存地址
MOV 40H,#00H
MOV 41H,#00H
MOV 42H,#12H
MOV 43H,#00H
MOV 44H,#01H
MOV R1,#04H ;1s循环次数
MOV IE,#82H ;中断使能
AJMP $
T0: MOV TL0,#0B0H ;定时50ms
MOV TH0,#3CH
DJNZ R1,X ;计时1s
MOV R1,#04H
LCALL ABC ;跳转到计时程序
LCALL DING ;跳转到定时程序
LCALL TIME ;跳转到显示程序
X: RETI
ABC: MOV A,30H
ADD A,#1 ;秒加1
DA A ;做十进制调整
MOV 30H,A
CJNE A,#60H,Y ;是否等于60s?若不是,则跳至Y
MOV 30H,#00H ;若是,则30H清零
MOV A,31H
ADD A, #1 ;分加1
DA A ;做十进制调整
MOV 31H,A
CJNE A,#60H,Y ;是否等于60s?若不是,则跳至Y
MOV 31H,#00H ;若是,则31H清零
MOV A,32H
ADD A,#1 ;时加1
DA A ;做十进制调整
MOV 32H,A
CJNE A,#12H,L
MOV A,31H
CJNE A,#00H,L
MOV A,30H
CJNE A,#00H,L
MOV A,50H
CPL A
MOV 50H,A
CJNE A,#00H,Y
MOV A,34H
ADD A,#01H
DA A
MOV 34H,A
CJNE A,#08H,Y
MOV 34H,#01H
L: MOV A,32H
CJNE A,#13H,Y
MOV 32H,#01H
Y:RET
4.2 定时部分
Ø 定时程序分析
定时程序实则就是人为设定一个闹铃时间,并使LED灯在到达时间时亮。
将秒赋予A,判断系统是否与设定的一致,不等则继续执行下一条指令,相等则跳转到lop1判断分;再将分赋予A,判断系统是否与设定的一致,不等则继续执行下一条指令,相等则跳转到lop2判断时;然后将时赋予A,判断系统是否与设定的一致,不相等则继续下一条指令,相等则跳到LOP3判断上下午;再将上下午赋予A,判断系统是否与设定的一致,不相等则继续下一条指令,相等则跳到lop4判断星期,将星期赋予A,判断系统是否与设定的相等,不相等则继续下一条指令,相等时跳转到TSR子程序。
定时时间由外部中断4控制,每按一下,其值增加一,时、分、秒、上下午星期由开关按键K1,K2,K3,K4、K6控制。判断位00H、01H、02H、03、05是否为0,哪个不为0跳转到相应的时、分、秒、上下午、星期程序中。在42H、41H、40H、60H、44H中存放时、分、秒、上下午、星期。当系统设定的秒、分、时、上下午、星期与显示的时间都相等时LED灯亮,表示闹铃时间到。将K1拨到0时,按下KEY4,可熄灭LED灯。
Ø 定时部分程序
DING: MOV A,30H ;定时程序
CJNE A,40H,N
AJMP LOP1
LOP1: MOV A,31H
CJNE A,41H,N
AJMP LOP2
LOP2: MOV A,32H
CJNE A,42H,N
AJMP LOP3
LOP3: MOV A,50H
CJNE A,60H,N
AJMP LOP4
LOP4:MOV A,34H
CJNE A,44H,N
AJMP TSR
N: RET
TSR: MOV P1,#00H
RET
KEY4: LCALL T2
LCALL TIME
MOV P3IF,#00H
RETI
T2: MOV 20H,P5 ;定时程序
JNB 00H,SHI1
JNB 01H,FEN1
JNB 02H,MIAO1
JNB 03H,XINGQI1
JNB 05H,ZHOU1
RET
ZHOU1: MOV A,44H
ADD A,#1
DA A
MOV 44H,A
CJNE A,#08H,MB
MOV 44H,#01H
RET
XINGQI1:MOV A,60H
CPL A
MOV 60H,A
RET
SHI1: MOV P1,#0FFH
MOV A,42H
ADD A,#1
DA A
MOV 42H,A
CJNE A,#13H ,MB
MOV 42H,#1
RET
FEN1: MOV A,41H
ADD A,#1
DA A
MOV 41H,A
CJNE A,#60H ,MB
MOV 41H,#0
RET
MIAO1:MOV A,40H
ADD A,#1
DA A
MOV 40H,A
CJNE A,#60H ,MB
MOV 40H,#0
MB: RET
4.3 校时部分
Ø 校时程序分析
校时部分就是在系统时间不准确的情况下,给系统赋定值,使系统时间可以从该值开始变化,使用外部中断KEY3,先给30H、31H、32H、50H、34H赋所需时间,然后调用程序将其显示。其中进入中断后调用子程序T1可以由KEY3键设置所定时间每按一次KEY3键值增加一,是调整时还是分或秒,可由开关量输入键K1、K2、K3、K4、K5分别控制。其主程序中加入了外不中断的有关指令.但需注意的是,在调解时除打开时、分、秒上下午、星期控制键外还需打开K11键。(主程序只给出所加指令)
Ø 校时部分程序
KEY3: LCALL T1
LCALL TIME
MOV P3IF,#00H
RETI
T1: MOV 20H,P5 ;校准程序
JNB 00H,SHI
JNB 01H,FEN
JNB 02H,MIAO
JNB 03H,XINGQI
JNB 05H,ZHOU
RET
ZHOU: MOV A,34H
ADD A,#1
DA A
MOV 34H,A
CJNE A,#08H,MN
MOV 34H,#01H
RET
XINGQI:MOV A,50H
CPL A
MOV 50H,A
RET
SHI:MOV A,32H
ADD A,#1
DA A
MOV 32H,A
CJNE A,#13H ,MN
MOV 32H,#01H
RET
FEN: MOV A,31H
ADD A,#1
DA A
MOV 31H,A
CJNE A,#60H ,MN
MOV 31H,#0
RET
MIAO:MOV A,30H
ADD A,#1
DA A
MOV 30H,A
CJNE A,#60H ,MN
MOV 30H,#0
MN: RET
4.4 显示部分
Ø 显示程序分析
显示程序就是将程序中的时分秒显示在液晶显示屏上使其看起来更直观、方便。其中第一行显示系统运行时间,第二行显示定时时间。
该程序主要根据老师所给程序改编,利用子程序LINE设定显示屏的主要参数.让时间显示在上一行且只显示一个时分秒,如“12:12:12PMXQ1”,不造成显示多个的后果。NCD为常函数表,将0-9、A、P、M、X、Q数字和字母依次存放到以左边标号为起始地址的存储单元中。TIME中就是将时分秒的十位、各位分别赋予R0,还有判断50H中是00H还是0FFH,如果是00H就显示上午AM,然后星期加一,如果是0FFH就显示下午PM,然背后调用查表程序将其显示在液晶屏上。值得注意的是:时与分、分与秒之间需将冒号也显示出来。同理,定时时间的显示在第二行,由TIME1控制。
Ø 显示部分程序
TIME: CLR A
MOV XBR0, A
LCALL LCD
MOV DPTR,#NCD
MOV A,32H
SWAP A
MOV R0,A
LCALL LINE1
LCALL DELAY
MOV R0,32H
LCALL LINE1
LCALL DELAY
MOV R0,#10
LCALL LINE1
LCALL DELAY
MOV A,31H
SWAP A
MOV R0,A
LCALL LINE1
LCALL DELAY
MOV R0,31H
LCALL LINE1
LCALL DELAY
MOV R0,#10
LCALL LINE1
LCALL DELAY
MOV A,30H
SWAP A
MOV R0,A
LCALL LINE1
LCALL DELAY
MOV R0,30H
LCALL LINE1
LCALL DELAY
MOV A,50H
CJNE A,#0FFH,LOPA
MOV R0,#12
LCALL LINE1
LCALL DELAY
MOV R0,#13
LCALL LINE1
LCALL DELAY
AJMP LOPP
LOPA: MOV R0,#11
LCALL LINE1
LCALL DELAY
MOV R0,#13
LCALL LINE1
LCALL DELAY
LOPP: MOV R0,#14
LCALL LINE1
LCALL DELAY
MOV R0,#15
LCALL LINE1
LCALL DELAY
MOV R0,34H
LCALL LINE1
LCALL DELAY
MOV DPTR,#NED
MOV P7,#0C0H
MOV P6,#1H
MOV P6,#0H
MOV R0,#11
LCALL LINE1
LCALL DELAY
MOV A,42H
SWAP A
MOV R0,A
LCALL LINE1
LCALL DELAY
MOV R0,42H
LCALL LINE1
LCALL DELAY
MOV R0,#10
LCALL LINE1
LCALL DELAY
MOV A,41H
SWAP A
MOV R0,A
LCALL LINE1
LCALL DELAY
MOV R0,41H
LCALL LINE1
LCALL DELAY
MOV R0,#10
LCALL LINE1
LCALL DELAY
MOV A,40H
SWAP A
MOV R0,A
LCALL LINE1
LCALL DELAY
MOV R0,40H
LCALL LINE1
LCALL DELAY
MOV A,60H
CJNE A,#0FFH,LOPA1
MOV R0,#12
LCALL LINE1
LCALL DELAY
MOV R0,#13
LCALL LINE1
LCALL DELAY
LJMP LOP44
LOPA1:MOV R0,#11
LCALL LINE1
LCALL DELAY
MOV R0,#13
LCALL LINE1
LCALL DELAY
LOP44:MOV R0,#14
LCALL LINE1
LCALL DELAY
MOV R0,#15
LCALL LINE1
LCALL DELAY
MOV R0,44H
LCALL LINE1
LCALL DELAY1
RET
LINE1: MOV A,R0
ANL A,#0FH
MOVC A,@A+DPTR
MOV P7,A
MOV P6,#05H
MOV P6,#04H
RET
LCD: LCALL DELAY
MOV P7, #38H
MOV P6, #01H
MOV P6, #00H
LCALL DELAY
MOV P7, #0EH
MOV P6, #01H
MOV P6, #00H
LCALL DELAY
MOV P7, #06H
MOV P6, #01H
MOV P6, #00H
LCALL DELAY
MOV P7, #01H
MOV P6, #01H
MOV P6, #00H
LCALL DELAY
RET
DELAY: MOV R6,#50
DELAY0: MOV R5,#50
DJNZ R5,$
DJNZ R6,DELAY0
RET
DELAY1: MOV R4,#35 ;DD
DELAY2: MOV R3,#150
DELAY3: MOV R2,#250
DJNZ R2,$
DJNZ R3,DELAY3
DJNZ R4,DELAY2
RET
NCD:DB'0','1','2','3','4','5','6','7','8','9',':','A','P','M','X','Q',' ' ;常数表
NED:DB'0','1','2','3','4','5','6','7','8','9',':','A','P','M','X','Q',' ' ;常数表
END
5 工作过程分析
5.1 时钟程序分析
在设计时分秒的程序时,首先定时1s,然后循环60次,则计时60秒,再判断是否循环60次,没有则继续执行以完成秒的计时,若完成60次循环则分加一,同理当分计数满60时,时加一,在判断是否计数满12次,若完成12次则上下午翻转,在判断是否由下午变成上午,若是则星期加1,以此完成时时分秒上下午星期的计时并据此编写程序。(主程序未给出)
T0: MOV TL0,#0B0H ;定时50ms
MOV TH0,#3CH
DJNZ R1,X ;计时1s
MOV R1,#04H
LCALL ABC ;跳转到计时程序
LCALL DING ;跳转到定时程序
LCALL TIME ;跳转到显示程序
X: RETI
ABC: MOV A,30H
ADD A,#1 ;秒加1
DA A ;做十进制调整
MOV 30H,A
CJNE A,#60H,Y ;是否等于60s?若不是,则跳至Y
MOV 30H,#00H ;若是,则30H清零
MOV A,31H
ADD A, #1 ;分加1
DA A ;做十进制调整
MOV 31H,A
CJNE A,#60H,Y ;是否等于60s?若不是,则跳至Y
MOV 31H,#00H ;若是,则31H清零
MOV A,32H
ADD A,#1 ;时加1
DA A ;做十进制调整
MOV 32H,A
CJNE A,#12H,L
MOV A,31H
CJNE A,#00H,L
MOV A,30H
CJNE A,#00H,L ;是否为12:00:00?若不是,跳L
MOV A,50H
CPL A
MOV 50H,A ;上下午翻转
CJNE A,#00H,Y
MOV A,34H ;判断是否是下午变成上午,若不是,跳Y
ADD A,#01H ;星期加1
DA A
MOV 34H,A
CJNE A,#08H,Y
MOV 34H,#01H
L: MOV A,32H ;时钟是否为13,若不是,跳Y
CJNE A,#13H,Y
MOV 32H,#01H ;若是,时钟变成1
Y:RET
T0进入中断,开始时分秒上下午星期的计时。最大显示为“11:59:59PMXQ7”。
5.2 定时程序分析
定时程序实则就是让时钟设定一个闹铃时间,当系统时间与设定的时间一致时显示时间并使LED灯亮。先判断秒是否相等,不等则继续,相等则跳转到lop1判断分,同理相等时跳转到lop2、lop3、lop4判断时上下午、星期,当系统设定的与显示的时间都相等时跳到程序TSR使LED亮。闹钟时间由K4调整。
DING: MOV A,30H
CJNE A,40H,N ;判断秒是否相等
AJMP LOP1
LOP1: MOV A,31H
CJNE A,41H,N ;判断分是否相等
AJMP LOP2
LOP2: MOV A,32H
CJNE A,42H,N ;判断时是否相等
AJMP LOP3
LOP3: MOV A,50H
CJNE A,60H,N ;判断上下午是否相等
AJMP LOP4
LOP4: MOV A,34H
CJNE A,44H,N ;判断星期是否相等
AJMP TSR
N: RET
TSR: MOV P1,#00H
RET
KEY4: LCALL T2
LCALL TIME
MOV P3IF,#00H
RETI
T2: MOV 20H,P5 ;定时程序
JNB 00H,SHI1
JNB 01H,FEN1
JNB 02H,MIAO1
JNB 03H,WU1
JNB 05H,ZHOU1 ;判断加1的是哪个
RET
ZHOU1:MOV A,44H
ADD A,#1 ;星期加1
DA A
MOV 44H,A
CJNE A,#08H,MB
MOV 44H,#01H
RET
WU1:MOV A,60H
CPL A ;上下午翻转
MOV 60H,A
RET
SHI1: MOV P1,#0FFH
MOV A,42H
展开阅读全文