单片机课程设计-数字电子钟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单片机技术课程设计说明书数字电子钟
院、部:电气与信息工程学院
学生姓名:
指导教师:职称
专业:通信工程
班级:
完成时间:
摘要
电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。

所以设计一个简易数字电子钟很有必要。

本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。

该电子钟设有四个按键K1、K2、K3和K4键,进行相应的操作就可实现校时、定时、复位功能。

具有时间显示、整点报时、校正等功能。

走时准确、显示直观、运行稳定等优点。

具有极高的推广应用价值。

关键词电子钟;AT89S52;硬件设计;软件设计
ABSTRACT
Clock is widely used in life, and a simple digital clock is more welcomed by people. So to design a simple digital electronic clock is necessary.The system use a single chip AT89S52 of ATMEL’s as its core to control The crystal oscillator clock,using of E-12MHZ is connected with the microcontroller AT89S52, through the software programming method to achieve a 24-hour cycle, and eight 7-segment LED digital tube (two four in one digital tube) displays hours, minutes and seconds requirements, and in the time course of a timing function, when the time arrived ahead of scheduled time to buzz a good timekeeping. The clock has four buttons K1, K2, K3 and K4 key, and make the appropriate action can be achieved when the school, timing, reset. With a time display, alarm clock settings, timer function, corrective action. Accurate travel time, display and intuitive, precision, stability, and so on. With a high application value.
Key words Electronic clock;AT89S52;Hardware Design;Software Design
目录
1设计课题任务、功能要求说明及方案介绍 (1)
1.1设计课题任务 (1)
1.2功能要求说明 (1)
1.3设计总体方案介绍及原理说明 (1)
2设计课题硬件系统的设计 (2)
2.1设计课题硬件系统各模块功能简要介绍 (2)
2.2设计课题电路原理图和PCB图以及元器件布局 (2)
2.3设计课题元器件清单 (2)
3设计课题软件系统的设计 (3)
3.1设计课题使用单片机资源的情况 (3)
3.2设计课题软件系统各模块功能简要介绍 (3)
3.3设计课题软件系统程序流程框图 (3)
3.4设计课题软件系统程序清单 (6)
4设计结论、仿真结果、误差分析、教学建议 (7)
4.1设计课题的设计结论及使用说明 (7)
4.2设计课题的仿真结果 (7)
4.3设计课题的误差分析 (8)
4.4设计体会 (8)
4.5教学建议 (8)
结束语 (9)
致谢 (10)
参考文献 (11)
附录 A (12)
附录 B (13)
附录 C (14)
附录 D (15)
附录 E (16)
1 设计课题任务、功能要求说明及方案介绍
1.1 设计课题任务
设计一个具有特定功能的电子钟。

并有时间设定,时间调整功能。

1.2 功能要求说明
设计一个具有特定功能的电子钟。

该电子钟上电或按键复位后能自动显示系统提示符“P.”,进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。

1.3 设计课题总体方案介绍及工作原理说明
本电子钟主要由单片机、4*1独立键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1.1所示:
图1.1 总体设计方案图
本电子钟的所有的软件、参数均存放在AT89S52的内部ROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。

键盘采用动态扫描方式。

利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。

2 设计课题硬件系统的设计
2.1设计课题硬件系统各模块功能简要介绍
硬件系统主要采用以下基本模块来实现,单片机最小系统模块、输入模块、输出模块、电源模块。

(1)单片机最小系统模块:包括低功耗、高性能CMOS8位微控制器AT89S52;复位电路;晶振电路。

本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。

通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。

这样就构成一个稳定的自激振荡器。

(2)输入模块:本模块共用到了5个按键,其中1个复位键,接通电源后,利用按键复位完成复位操作。

,K1键控制电子钟的启动\调整状态,做正常走时状态时K2为电子钟时调整键,K3为电子钟分调整键,K4键为电子钟秒调整键,当作为闹钟调整状态时K4键为闹钟启动/关闭,K2为闹钟时调整键,K3为闹钟分调整键。

K1、K2、K3,K4任一键都独自连一个I/O(P1.0、P1.1、P1.2)口线,说明它们可以独立实现相应的电子钟功能。

(3)输出模块:本次设计显示为8位字符,采用两个四位一体数码管(共阳极)作为显示窗口。

数码管用8个PNP三极管驱动。

(4)电源模块:本次直接购买了市场上由PC机的USB口直接供电的编辑器
2.2设计课题电路原理图、PCB图、元器件布局图
2.2.1 电路原理图
见附录A所示。

2.2.2 PCB图
见附录B所示。

2.2,3 元器件布局图
见附录C所示。

2.3设计课题元器件清单
见附录D所示。

3 设计课题软件系统的设计
3.1 设计课题使用单片机资源的情况
设计课题使用单片机资源的情况如下:
P0口输出数码管段控信号,P2口输出数码管位控信号;晶振12MHz;时间调整开关键K1:P1.0;通过K1切换电子钟走时/暂停;时调整键K2:P1.1;按一次使电子钟时加1;分调整键K3:P1.2;按一次使电子钟分加1;秒调整键K4:P1.3按一次使电子钟秒加1/闹钟开启或关闭;蜂鸣器接:P3.1;整点和闹钟时间到时蜂鸣器报时;28H-36H;9个寄存器单元作为显示单元;
28H 闹铃小时缓冲区;29H闹铃分钟缓冲区;
30H 位选通控制位; 31H 显示位数计数器;
32H 走时小时缓冲区;33H 走时分钟缓冲区;
34H走时秒缓冲区; 35H 定时器中断次数计数器;
36H显示缓冲区首地址;
3.2设计课题软件系统个模块功能简要介绍
本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。

主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。

中断服务程序:主要是用于电子钟的准确运行、数据输入过程中的闪烁。

键盘输入程序模块:主要是用于确定按键并得到特定的键码值。

数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。

延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时。

3.3 设计课题软件系统程序流程框图
系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。

图3.1 主程序流程框图
图3.2 定时器初始化子程序流程框图
图3.3 转换子程序
图3.4动态显示子程序图3.5定时器1中断服务程序
图3.6 按键处理子程序流程框图
3.4设计课题软件系统程序清单
要求:<一>.显示系统提示符“P.”
<二>.定义5个功能键:分别是复位键,启动/暂停键,时调整键,分调整键,秒调整键
<三>.在系统提示符状态下,只有按启动键/暂停键才能开启电子钟
<四>.在电子钟运行状态下,只有按启动键/暂停键才能调整电子钟
电路描述:P0口为数码管段控口,P2口为数码管位控口,蜂鸣器接P3.1口,LED灯接P3.7口
系统程序见附录E
4 设计结论、仿真结果、误差分析
4.1 设计课题的设计结论及使用说明
本设计为单片机的电子钟的设计。

设计中问题很多,比如电路板的制作和电路的设计,但是经过查找和实验制作出了该设计,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中S1为启动/选择调整位置,S2为加控制键 S3为减控制键,当整点时间到时,蜂鸣器报警。

这样的结果与设计要求完全相符,本设计成功。

完成了设计任务。

4.2 设计课题的仿真结果
在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图4.1与4.2所示。

实现功能:
可调整运行的电子钟具有三种工作状态:“P.”状态,运行状态,走时调整状态,闹钟调整状态。

(1)、“P.”状态:依靠上电或按复位键进入,在此状态下,按K2,K3,K4键均无效,按K1键有效,进入运行状态。

(2)、运行状态:在此状态下,按K2,K3键均无效,只有按K1,K4键有效,按下K1键后,退出运行状态,进入调整状态。

(3)、调整状态:按K1键进入在此状态下,按K2(时+1键)、K3(分+1键),K4(秒+1键)键均有效;调整结束后必须按K1键,即可退出调整状态,进入运行状态。

(4)、闹钟调整状态:闹钟走时状态下按K4键进入,在此状态下,按K2(时+1键)、K3(分+1键),键均有效;调整结束后必须按K4键,即可退出闹钟调整状态,进入运行状态。

时间显示格式为:时-分-秒;
图4.1 “P.”运行状态仿真
图4.2 时钟运行状态仿真
4.3 设计课题的误差分析
本设计存在相对的误差,误差的产生有几种情况,第一是采用的计时方案是软件计时的,计时优势利用中断来实现,而当电子钟运行时间1秒时,又得去执行中断程序,这个过程是需要时间的,所以就产生了一定的误差;第二还有硬件系统也有一定的影响;第三,用到12MHz的晶振,计算是满20次为一秒钟,所以实际会慢很多。

4.4 设计体会
通过本次课程设计,加深了我对专业的认识,知道了自己的许多不足,使我深深的感受到了理论和实际动手能力的重要性。

在我们的学习过程中,我们应当加强理论的基础,彻底了解程序的结构和含义,同时加强自己的动手能力,只有这样才能学好这门课程。

4.5 教学建议
通过对这门课程学习,了解了单片机的许多知识,尤其是在王韧老师的教学过程中,你的幽默的教学方式让课堂气氛很活跃,授课内容条理清晰,经常运用各种实例,给人印象深刻。

王老师您在课堂上经常会用一些亲身实践的经验为例,既生动,又有趣。

但是对于不同的学生老师您可以有不同的规格,有的学生以后不一定有专业对口的工作,也对这门专业没兴趣的话,老师您的严格要求可能只会有反效果,所以老师您适当放宽要求即能加深同学的认识也能培养学生的积极性。

结束语
单片机是一门比较难学的课程,相对来说,单片机的课设也是不容易做的。

通过此次课程设计,使我更加扎实的掌握了有关单片机方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。

在此课程设计过程中,我不仅可以学到了很多在书本上所没有学到过的知识,同时还巩固了以前所学过的知识。

通过这次课程设计。

我深刻体会到实际动手操作与书本理论知识有很大的反差,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

致谢
通过不断努力,终于完成了此次单片机的课程设计。

在此,首先感谢王韧老师,正是他在万忙之中还抽出宝贵的时间对我们进行精心的指导,才使我顺利完成了此次单片机课程设计。

同时也感谢各位同学和老师对我提供的帮助。

使我在此次设计中学到了许多宝贵的知识和经验。

在此,衷心地感谢你们!
参考文献
[1] 邓红.张越.单片机实验与应用设计教程[M].北京:冶金工业出版社,2004.5 188-195
[1]. ZhangYue DengGong. SCM experiment and application design tutorial [M]. Beijing: metallurgical industry press, 2004.5 188-195
[2] 李广第.单片机基础[M].北京:北京航空航天大学出版社,2006.7. 1-260 [2] LiGuang first. Single chip microcomputer based [M]. Beijing: Beijing
university of aeronautics &astronautics press, 2006.7. 1-260
[3] 刘建清.轻松玩转51单片机[M].北京:北京航空航天大学出版社,2011.3.
186-208
[3] LiuJianQing. Easy play 51 SCM [M]. Beijing: Beijing university of aeronautics &astronautics press, 2011.3 186-208
附录A
附录B
附录C
附录D
附录E
;=============================================== 程序定义段
;=============================================== ALARM BIT 20H.0
K1 BIT P1.0
K2 BIT P1.1
K3 BIT P1.2
K4 BIT P1.3
HOUR_A EQU 28H
MIN_A EQU 29H
DISP_DIGIT EQU 30H
DISP_SEL EQU 31H
HOUR EQU 32H
MIN EQU 33H
SEC EQU 34H
T1_COUNT EQU 35H
DISP_BUF EQU 36H
;================================================ ; 主程序开始
;================================================ ORG 0000H
LOOP: MOV P0, #0CH
MOV P2, #7FH
JB P1.0, LOOP
LCALL DELAY_10ms
JB P1.0, LOOP
JNB P1.0, $
LJMP MAIN
ORG 000BH
LJMP TIME0
ORG 001BH
LJMP TIME1
ORG 0100H
MAIN: MOV SP, #70H
MOV P0, #0FFH MOV P2, #0FFH
CLR ALARM
MOV HOUR_A, #12
MOV MIN_A, #00
MOV HOUR, #0
MOV MIN, #0
MOV SEC, #0
MOV T1_COUNT, #0
MOV DISP_DIGIT,#7FH
MOV DISP_SEL, #0
MOV DISP_BUF+2,#10
MOV DISP_BUF+5,#10
ACALL T0T1_INIT
START : ACALL CONV
ACALL ALA_CHECK
JB K1, K1_NEXT ACALL LIGHT
ACALL KEY_PROC
AJMP START
K1_NEXT: JB K2, K2_NEXT AJMP START
K2_NEXT: JB K3, K3_NEXT AJMP START
K3_NEXT: JB K4, K4_NEXT ACALL LIGHT
ACALL ALARM_SET
CPL ALARM
JNB ALARM, STOP_BEEP
ACALL LIGHT
ACALL LIGHT
ACALL LIGHT
AJMP START
STOP_BEEP:ACALL LIGHT
K4_NEXT: AJMP START
;================================================= ; 定时器T0.T1初始化子程序
;================================================= T0T1_INIT:MOV TMOD, #11H
MOV TH0, #0F8H
MOV TL0, #0CCH
MOV TH1, #0DCH
MOV TL1, #00H
SETB EA
SETB ET0
SETB ET1
SETB TR0
SETB TR1
RET
;================================================= ; 走时转换子程序
;================================================= CONV: MOV A, HOUR
MOV B, #10
DIV AB
MOV DISP_BUF, A
MOV A, B
MOV DISP_BUF+1,A
MOV A, MIN
MOV B, #10
DIV AB
MOV DISP_BUF+3,A
MOV A, B
MOV DISP_BUF+4,A
MOV A, SEC
MOV B, #10
DIV AB
MOV DISP_BUF+6,A
MOV A, B
MOV DISP_BUF+7,A
RET
;================================================== ; 定时器T0中断服务程序,用于数码管扫描
;================================================== TIME0: PUSH ACC
PUSH PSW
MOV TH0, #0F8H
MOV TL0, #0CCH
ACALL DISP
POP PSW
POP ACC
RETI
;=================================================== ; 显示子程序
;=================================================== DISP: MOV P2, #0FFH
MOV A, #DISP_BUF
ADD A, DISP_SEL
MOV R0, A
MOV A, @R0
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV P0, A
MOV P2, DISP_DIGIT
MOV A, DISP_DIGIT
RR A
MOV DISP_DIGIT,A
INC DISP_SEL
MOV A, DISP_SEL
CLR C
SUBB A, #8
JZ RST_0
AJMP DISP_RET
RST_0: MOV DISP_SEL, #0
DISP_RET: RET
;================================================== ; 定时器T1中断服务程序,用于电子钟走时
;================================================== TIME1: PUSH PSW
PUSH ACC
MOV TH1, #0DCH
MOV TL1, #00H
INC T1_COUNT
MOV A, T1_COUNT
CLR C
SUBB A, #100
JC END_T1
MOV T1_COUNT, #00H
INC SEC
MOV A, SEC
CJNE A, #60, END_T1
INC MIN
MOV SEC, #0
MOV A, MIN
CJNE A, #60, END_T1
INC HOUR
LCALL BEEP
LCALL BEEP
LCALL BEEP
LCALL BEEP
LCALL BEEP
MOV MIN, #0
MOV A, HOUR
CJNE A, #24, END_T1 MOV SEC, #0
MOV MIN, #0
MOV HOUR, #0
END_T1: POP ACC
POP PSW
RETI
;================================================== ; 数码管段控码表
;================================================== TAB: DB 0C0H,0F9H,0A4H,0B0H,099H
DB 092H,082H,0F8H,080H,090H
DB 0BFH
DB 0FFH
;================================================== ; 按键处理子程序
;================================================== KEY_PROC: CLR TR1
KEY2: JB K2, KEY3
ACALL DELAY_10ms
JB K2, KEY3
JNB K2, $
INC HOUR
MOV A, HOUR
CJNE A, #24, KEY2_NEXT MOV HOUR, #0
KEY2_NEXT:ACALL CONV
AJMP KEY2
KEY3: JB K3, KEY4
ACALL DELAY_10ms
JB K3, KEY4
JNB K3, $
INC MIN
MOV A, MIN
CJNE A, #60, KEY3_NEXT MOV MIN, #0
KEY3_NEXT:ACALL CONV
AJMP KEY2
KEY4: JB K4, KEY1
ACALL DELAY_10ms
JB K4, KEY1
JNB K4, $
INC SEC
MOV A, SEC
CJNE A, #60, KEY4_NEXT
MOV SEC, #0
KEY4_NEXT:ACALL CONV
AJMP KEY1
KEY1: JB K1, KEY2
ACALL DELAY_10ms
JB K1, KEY2
JNB K1, $
ACALL LIGHT
SETB TR1
KEY_RET: RET
;================================================= ; LED灯亮子程序
;================================================= LIGHT: CLR P3.7
ACALL DELAY_100ms
SETB P3.7
ACALL DELAY_100ms
RET
;=================================================
; 蜂鸣器响子程序
;================================================= BEEP: CLR P3.1
ACALL DELAY_100ms
SETB P3.1
ACALL DELAY_100ms
RET
;===================================================== ; 闹钟检查及处理子程序
;===================================================== ALA_CHECK:JNB ALARM, CHECK_RET
MOV A, HOUR
MOV B, HOUR_A
CJNE A, B, CHECK_RET
MOV A, MIN
MOV B, MIN_A
CJNE A, B, CHECK_RET TIME_OUT:ACALL BEEP
ACALL CONV
JB K4, TIME_OUT
JNB K4, $
CLR ALARM
CHECK_RET:RET
;====================================================== ; 闹钟时间设置子程序
;======================================================
ALARM_SET:ACALL CONV_A
AKEY2: JB K2, AKEY3
ACALL DELAY_10ms
JB K2, AKEY3
JNB K2, $
INC HOUR_A
MOV A, HOUR_A
CJNE A, #24, AKEY2_NEXT
MOV HOUR_A, #0
AKEY2_NEXT:ACALL CONV_A
AJMP AKEY2
AKEY3: JB K3, AKEY4
ACALL DELAY_10ms
JB K3, AKEY4
JNB K3, $
INC MIN_A
MOV A, MIN_A
CJNE A, #60, AKEY3_NEXT
MOV MIN_A, #0
AKEY3_NEXT:ACALL CONV_A
AJMP AKEY2
AKEY4: JB K4, AKEY2
JNB K4, $
ACALL LIGHT
ACALL CONV
AKEY_RET: RET
;======================================================== ; 闹钟时间转换子程序
;======================================================== CONV_A: MOV A, HOUR_A
MOV B, #10
DIV AB
MOV DISP_BUF, A
MOV A, B
MOV DISP_BUF+1, A
MOV A, MIN_A
MOV B, #10
DIV AB
MOV DISP_BUF+3, A
MOV A, B
MOV DISP_BUF+4, A
MOV DISP_BUF+6, #0
MOV DISP_BUF+6, #0
RET
DELAY_100ms:
MOV R7, #13H DL1:
MOV R6, #14H DL0:
MOV R5, #82H
DJNZ R5, $
DJNZ R6, DL0
DJNZ R7, DL1
RET
DELAY_10ms:
MOV R7, #01H
DL3:
MOV R6, #26H DL2:
MOV R5, #82H
DJNZ R5, $
DJNZ R6, DL2
DJNZ R7, DL3
RET
END。

相关文档
最新文档