资源描述
《单片机技术》课程设计说明书
数 字 电 子 钟
系 、 部: 电气与信息工程系
学生姓名:
指导教师: 王韧 职称 副教授
专 业: 电子信息工程
班 级: 电子0902
完成时间: 2011-12-25
摘 要
电子钟在生活中应用非常广泛,而一种简单方便的数字电子钟则更能受到人们的欢迎。所以设计一个简易数字电子钟很有必要。本电子钟采用ATMEL公司的AT89S52单片机为核心,使用12MHz 晶振与单片机AT89S52 相连接,通过软件编程的方法实现以24小时为一个周期,同时8位7段LED数码管(两个四位一体数码管)显示小时、分钟和秒的要求,并在计时过程中具有定时功能,当时间到达提前定好的时间进行蜂鸣报时。该电子钟设有四个按键S1、S2、S3和S4键,进行相应的操作就可实现校时、定时、复位功能。具有时间显示、整点报时、校正等功能。走时准确、显示直观、运行稳定等优点。具有极高的推广应用价值。
关键词: 电子钟;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 S1, S2, S3 and S4 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 程序清单 7
4 设计结论、仿真结果、误差分析、教学建议 18
4.1 设计课题的设计结论及使用说明 18
4.2 设计课题的仿真结果 18
4.3 设计课题的误差分析 19
4.4 设计体会 19
4.5 教学建议 19
结束语 20
参考文献 21
致 谢 22
附录A 电路原理图 23
附录B 元器件布局图 24
附录C PCB顶层布线图 25
附录D PCB底层布线图 26
附录E 元器件清单 27
1 设计课题任务、功能要求说明及方案介绍
1.1 设计课题任务
设计一个具有特定功能的电子钟。具有时间显示、报时等功能。并有时间设定,时间调整功能。
1.2 功能要求说明
设计一个具有特定功能的电子钟。该电子钟上电或按键复位后能自动显示系统提示符“P.”, 进入时钟准备状态;第一次按电子钟启动/调整键,电子钟从0时0分0秒开始运行,进入时钟运行状态;再次按电子钟启动/调整键,则电子钟进入时钟调整状态,此时可利用各调整键调整时间,调整结束后可按启动/调整键再次进入时钟运行状态。
1.3 设计课题总体方案介绍及工作原理说明
本电子钟主要由单片机、4*1独立键盘、显示接口电路和复位电路构成,设计课题的总体方案如图1所示:
图1 总体设计方案图
本电子钟的所有的软件、参数均存放在AT89S52的Flash ROM和内部RAM中,减少了芯片的使用数量简化了整体电路也降低了整机的工作电流。键盘采用动态扫描方式。利用单片机定时器及计数器产生定时效果通过编程形成数字钟效果,再利用数码管动态扫描显示单片机内部处理的数据,同时通过端口读入当前外部控制状态来改变程序的不同状态,实现不同功能。
2 设计课题硬件系统的设计
2.1 设计课题硬件系统各模块功能简要介绍
本设计的硬件系统主要采用以下基本模块来实现,单片机最小系统模块,输入模块、输出模块、电源模块。
(1)单片机最小系统模块:包括低功耗、高性能CMOS8位微控制器AT89S52;复位电路;晶振电路。本本模块AT89S52系统控制核心,单片机系统复位由复位电路完成,单片机内部有一个高增益、反相放大器,其输入端为芯片引脚XTAL1,其输出端位位引脚XTAL2。通过这两个引脚在芯片外并接石英晶体振荡器和两只电容。这样就构成一个稳定的自激振荡器。
(2)输入模块:本模块共用到了5个按键,1个电源开关,1个复位键,单片机运行期间,利用按键完成复位操作。3个按键独立式键盘,S1键控制电子钟的启动\调整状态,S2键为加1键,S3键为减1键。且S1、S2、S3任一键都独自连一个I/O(P1.0、P1.1、P1.2)口线,说明它们可以独立实现相应的电子钟功能。
(3)输出模块:本次设计显示为8位,采用两个四位一体数码管(共阳极)作为显示窗口,既可以节约成本又能简化电路。数码管用8个PNP三极管驱动。
(4)电源模块:现在市面上销售的编程器有很多都是由PC机的USB口直接供电为了降低本设计的成本及节省设计时间,没有另外设计编程器,而直接购买了市场上的USB供电及下载器。
2.2 设计课题电路原理图、PCB图、元器件布局图
电路原理图见附录A,元器件布局图见附录B,PCB顶层布线图见附录C,PCB顶层布线图见附录D。
2.3 设计课题元器件清单
设计课题元器件清单见附录E。
3 设计课题软件系统的设计
3.1 设计课题使用单片机资源的情况
设计课题使用单片机资源的情况如下:
P0口输出数码管段选信号,P3口输出数码管位选信号;晶振12MHz;调整选择键SET_KEY:P1.0;通过选择键选择调整位,选中位闪烁;增加键ADD_KEY:P1.1;按一次使选中位加1;减少键DEC_KEY:P1.2;按一次使选中位减1;P2.1为蜂鸣器发声报时;50H-5FH;16个寄存器单元作为显示单元;
50H 用于控制秒基准时钟源的产生;51H 清零秒寄存器;
52H 清零分寄存器;53H 清零时寄存器;
5FH 用于秒个位;5EH 用于秒十位;
5DH 用于分个位;5CH 用于分十位;
5BH 用于时个位;5AH 用于时十位;
54H 用于控制调时闪烁;堆栈栈底:70H。
3.2 设计课题软件系统个模块功能简要介绍
本设计的软件系统主要采用以下基本模块来实现,主程序、中断服务程序、键盘输入程序模块、数码管及其驱动模块和延时模块。
(1)主程序:主要是用于对输入信号的处理、输出信号的控制和对各个功能程序模块的运用及其控制。
(2)中断服务程序:主要是用于电子钟的准确运行、数据输入过程中的闪烁。
(3)键盘输入程序模块:主要是用于确定按键并得到特定的键码值。
(4)数码管及其驱动模块:主要是用于驱动数码管及利用数码管显示时间。
(5)延时模块:程序中有两种延时子程序,一种是短延时用于判键按下等,一种是长延时。
3.3 设计课题软件系统程序流程框图
系统软件采用汇编语言按模块化方式进行设计,然后通过Keil软件开发平台将程
序转变成十六进制程序语言,接着使用Proteous 进行仿真,读出显示数据。
主程序流程框图如2所示;加1子程序如3所示;
中断服务程序程序如4所示;
键盘扫描子程序框图如5所示;
显示子程序框图如6所示;
图2 主程序流程框图
图3 加1子程序流程框图
图4 中断子程序流程框图
图5 键盘扫描子程序流程框图
3.4 程序清单
;-----------
;程序入口
;-----------
ORG 0000H ;程序入口地址
LJMP START
ORG 000BH ;定时器0中断入口地址
LJMP TIMET0
ORG 1000H
;----------------------------------
;显P.程序
;功能:可以在8个数码闪烁移位进行屏保
;----------------------------------
START: MOV R6, #2 ;闪烁次数
MOV A, #0FEH ;位选
TT: MOV P2, A
MOV P0, #0CH ;段码"P."
LCALL DELAY
MOV P2, #0FFH
DJNZ R6, TT
LCALL DELAY
LCALL DELAY1
RR A
JB P1.0, TT ;键是否按下,没按下则转移
LCALL DELAY ;延时去抖
JNB P1.0, KAI ;再次判断键是否按下
KAI: SETB P1.0
CLR A ;状态恢复
MOV P0, #0FFH
LCALL DELAY1
SETB 48H ;用于调时闪烁标志
SETB 47H ;用于产生脉冲用于调时快进的脉冲
MOV R1, #0 ;键功能标志:0计时、1调时、2调分、3调秒
;-------------------------------
MOV R0, #50H ;初始化
MOV R6, #10H
CLEARJCQ:
MOV @R0, #00H ;清寄存器
INC R0
DJNZ R6, CLEARJCQ
MOV IP, #02H
SETB EA
SETB ET0
MOV TMOD, #01H ;设定定时器0工作方式1
MOV TH0, #3CH
MOV TL0, #0B0H ;赋定时初值,定时50ms
SETB TR0 ;启动定时器0
MOV SP, #70H ;堆栈
;--------
;主程序
;--------
MAIN: LCALL DISPLAY
LCALL KEY_SCAN
JZ MAIN
LCALL SET_KEY
JB 46H, MAIN ;如果已进行调时快进,则不再执行下面的调整
LCALL ADD_KEY ;调用增加键处理子程序,加一
LCALL DEC_KEY ;调用减少键处理子程序,减一
LJMP MAIN ;重新循环
;---------------
; 显示处理程序
;---------------
DISPLAY:MOV A, 51H
ANL A, #0FH
MOV 5FH, A ;转换出秒个位,存入5FH
MOV A, 51H
ANL A, #0F0H
SWAP A
MOV 5EH, A ;转换出秒十位,存入5EH
JB 46H, MIN ;如果调时快进,则跳过闪烁处理程序
CJNE R1, #3,MIN ;如果R1为3,闪烁秒位待调整
JB 48H, MIN
MOV 5FH, #0AH ;使该位为10,查表得到使该位不显示
MOV 5EH, #0AH
MIN: MOV A, 52H
ANL A, #0FH
MOV 5DH, A ;转换出分个位,存入5DH
MOV A, 52H
ANL A, #0F0H
SWAP A
MOV 5CH, A ;转换出分十位,存入5CH
JB 46H, HOUR
CJNE R1, #2,HOUR ;如果R1为2,闪烁分位待调整
JB 48H, HOUR
MOV 5DH, #0AH
MOV 5CH, #0AH
HOUR: MOV A, 53H
ANL A, #0FH
MOV 5BH, A ;转换出时个位,存入5BH
MOV A, 53H
ANL A, #0F0H
SWAP A
MOV 5AH, A ;转换出时十位,存入5AH
JB 46H, DISP
CJNE R1, #1,DISP ;如果R1为1,闪烁时位待调整
JB 48H, DISP
MOV 5BH, #0AH ;使该位为10,查表得到使该位不显示
MOV 5AH, #0AH
;-------------------
;数码管动态扫描显示
;-------------------
DISP: MOV DPTR, #TABLE
MOV A, 5FH
MOVC A, @A+DPTR
MOV P0, A
CLR P2.0
LCALL DELAY
SETB P2.0 ;显示秒个位
MOV A, 5EH
MOVC A, @A+DPTR
MOV P0, A
CLR P2.1
LCALL DELAY
SETB P2.1 ;显示秒十位
MOV A, #0BFH
MOV P0, A
CLR P2.5
LCALL DELAY
SETB P2.5 ;显示“-”
MOV A, 5DH
MOVC A, @A+DPTR
MOV P0, A
CLR P2.3
LCALL DELAY
SETB P2.3 ;显示分个位
MOV A, 5CH
MOVC A, @A+DPTR
MOV P0, A
CLR P2.4
LCALL DELAY
SETB P2.4 ;显示分十位
MOV A, #0BFH
MOV P0, A
CLR P2.2
LCALL DELAY
SETB P2.2 ;显示“-”
MOV A, 5BH
MOVC A, @A+DPTR
MOV P0, A
CLR P2.6
LCALL DELAY
SETB P2.6 ;显示时个位
MOV DPTR, #TABLE1 ;该位使用TABLE1以消除时的十位置0
MOV A, 5AH
MOVC A, @A+DPTR
MOV P0, A
CLR P2.7
LCALL DELAY
SETB P2.7 ;显示时十位
RET
;-----------------
;定时器中断1s程序
;-----------------
TIMET0: PUSH ACC ;保护现场
PUSH PSW
MOV TH0, #3CH
MOV TL0, #0B0H
CPL 47H ;产生脉冲用于调时快进
INC 54H
MOV A, 54H
CJNE A, #10,ADD_TIME;产生0.5秒,用于调时闪烁
CPL 48H ;取反调时闪烁标志位
MOV 54H, #00H
ADD_TIME: INC 50H
MOV A, 50H
CJNE A, #10,ZDBACD ;整点报时时蜂鸣器响延迟时间
SETB P3.1 ;关蜂鸣器
ZDBACD: CJNE A, #20,RETI1 ;产生1秒时钟
MOV 50H, #00H ;一秒钟时间到,清零50H
MOV A, 51H
ADD A, #01H
DA A ;十进制调整
MOV 51H, A
CJNE A, #60H,RETI1
MOV 51H, #00H ;一分钟到
MOV A, 52H
ADD A, #01H
DA A
MOV 52H, A
CJNE A, #60H,RETI1
CLR P3.1
MOV 52H, #00H ;一小时到,开蜂鸣器,清分显示
MOV A, 53H
ADD A, #01H
DA A
MOV 53H, A
CJNE A, #24H,RETI1
MOV 53H, #00H ;到24点,清零小时
RETI1: POP PSW
POP ACC ;恢复现场
RETI ;中断返回
;-------------
;键盘扫描程序
;R4设置为00H是为了在进入长按处理前加长延时,以区分长按与短按键
;-------------
KEY_SCAN: CLR 46H ;关闭调时快进标志
MOV P1, #0FFH ;将P1口设置成输入状态
MOV A, P1
CPL A
ANL A, #07H ;1口低3位连接3个按键,只判断该3位
JZ EXIT_KEY
LCALL DELAY ;延时去抖动
MOV A, P1 ;重新判断
CPL A
ANL A, #07H
JZ EXIT_KEY
MOV R5, A
MOV R4, #00H ;用于控制调时快进速度
LOOP: LCALL DISPLAY ;进入长按处理
MOV A, P1
CPL A
ANL A, #07H
JB 47H, LOOP1
INC R4 ;调时快进间隔时间基准加1
LOOP1: CJNE R1, #03H,LOOP2 ;如果调秒时长按,则不处理
LJMP LOOP3
LOOP2: CJNE R4, #99H,LOOP3
MOV R4, #70H ;确认长按后,加快调时快进速度
SETB 46H
LCALL ADD_KEY
LCALL DEC_KEY
LOOP3: JNZ LOOP ;等待键释放
MOV A, R5 ;输出键值
RET
EXIT_KEY: RET
;------------
;延时子程序
;------------
DELAY: MOV R7, #200
DJNZ R7, $
RET
DELAY1: MOV R3, #50
MOV TMOD, #00H
MOV TH1, #63H
MOV TL1, #18H
SETB TR1
LP1:JBC TF1, LP2
SJMP LP1
LP2: MOV TH1, #63H
MOV TL1, #18H
DJNZ R3, LP1
RET
;-----------------
;选择键处理子程序
;-----------------
SET_KEY: CJNE R5, #01H,EXIT ;选择键键值
INC R1 ;调整选择功能标志加一
CJNE R1, #4,EXIT
MOV R1, #0
MOV 54H, #00H ;调时闪烁清零
RET
;----------
;加1子程序
;----------
ADD_KEY: CJNE R5, #02H,EXIT ;加1键值
CJNE R1, #01H,NEXT1 ;选择键功能标志为1调时,否则跳出
MOV A, 53H
ADD A, #01H
DA A
MOV 53H, A
CJNE A, #24H,EXIT
MOV 53H, #00H
NEXT1: CJNE R1, #02H,NEXT2 ;选择键功能标志为2调分,否则跳出
MOV A, 52H
ADD A, #01H
DA A
MOV 52H, A
CJNE A, #60H,EXIT
MOV 52H, #00H
NEXT2: CJNE R1, #03H,EXIT ;选择键功能标志为3调秒,否则跳出
MOV A, 51H
ADD A, #01H
DA A
MOV 51H, A
CJNE A, #60H,EXIT
MOV 51H, #00H ;如加1键按下直接清零秒
RET
;----------
;减1子程序
;----------
DEC_KEY: CJNE R5, #04H,EXIT ;减1键键值
CJNE R1, #01H,NEXT3 ;选择键功能标志为1调时,否则跳出
MOV A, 53H
ADD A, #99H
DA A
MOV 53H, A
CJNE A, #99H,EXIT
MOV 53H, #23H
NEXT3: CJNE R1, #02H,NEXT4 ;选择键功能标志为2调分,否则跳出
MOV A, 52H
ADD A, #99H
DA A
MOV 52H, A
CJNE A, #99H,EXIT
MOV 52H, #59H
NEXT4:CJNE R1, #03H, EXIT ;选择键功能标志为3调秒,否则跳出
MOV A, 51H
ADD A, #99H
DA A
MOV 51H, A
CJNE A, #99H,EXIT
MOV 51H, #59H
RET
;-----------
;返回子程序
;-----------
EXIT: RET
;-----------------
;数码管字形编码表
;-----------------
TABLE:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH
;"0","1","2","3","4","5","6","7","8"",9","不显示"
TABLE1:DB 0FFH,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H,0FFH ;小时编码
;"不显示","1","2","3","4","5","6","7","8","9","不显示"
END
4 设计结论、仿真结果、误差分析、教学建议
4.1 设计课题的设计结论及使用说明
本设计为基于单片机的电子钟的设计。刚开始,我们很多地方理不清头绪,无从下手,但通过认真研究设计课题,找书上网查资料买元件,确定基本设计方案,对所用芯片功能进行查找、调试,然后画电路图制PCB板、打孔、溶铜、焊接等,真的经历了许多困难,却积累了很多宝贵的经验,本设计用2个四位一体的共阳数码管做为显示器,它显示时间值;设计中有三个按键,其中S1为启动/选择调整位置,S2为加控制键 S3为减控制键,当整点时间到时,蜂鸣器报警。这样的结果与设计要求完全相符,本设计成功。完成了设计任务。
4.2 设计课题的仿真结果
在Proteus ISIS的Debug菜单中选择Execute,运行程序,系统仿真结果如图7与图8所示。
实现功能:可调整运行的电子钟具有三种工作状态:“P.”状态、运行状态、调整状态。
(1)、“P.”状态,依靠上电或按复位键进入,在此状态下,按S2、S3键均无效,
按S1键有效,进入运行状态;
(2)、运行状态,在此状态下,按S2、S3键均无效,只有按S1键有效,按下S1键后,退出运行状态,进入调整状态;
(3)、调整状态,按S1键进入时、分、秒的闪烁,在此状态下,按S2(+1键)、
S3(-1键)键均有效;调整结束后必须按S1键,即可退出调整状态,进入
运行状态。在调整状态时长按S2、S3时可以连加及连减。
时间显示格式为:时-分-秒;
图7 “P.”运行状态仿真
图8 时钟运行状态仿真
4.3 设计课题的误差分析
该电子钟在运行中存在一定的误差,误差产生有三种可能,首先是采用的计时方案是软件计时的,计时优势利用中断来实现。而当电子钟运行时间1秒时,又得去执行中断程序,这个过程是需要时间的,所以就产生了一定的误差,当然这个误差是避免不了的,其次还有硬件系统也有一定的影响。第三,设计用到11.0592MHz的晶振,计算是满20次为一秒钟,但实际会慢很多。
4.4 设计体会
本次课程设计,让我受益匪浅,认识到了自己的许多缺点和不足,使我深深的感受到了理论联系实际的必要性及其重要性。在我们以往的学习过程中,我们刻意地去加强理论的基础,对于一个程序我们只求它在运行时没有出错,我们便以为我们的计划成功了岂不知它能否在硬件结构中得以实现则是另外一回事,这就要求我们的动手能力,如果无法使软件与硬件实现有机的结合,那么再好的程序也只是一堆废字符。
4.5 教学建议
经过一个学期王韧老师教导的的单片机学习,我掌握了很多单片机学习的宝贵经验,尤其在编程的思路和PCB实物的制作上面。编程思路是整个程序的灵魂,没有编程思路,程序就不会编出来,就失去了编程的意义。在开始编程之前,想好编程的思路,编程能力才会提高,编程的过程才会顺畅,程序的质量才会提高。
在王韧老师的教学过程中,幽默轻松的教学方式常常让课堂气氛很活跃,幽默诙谐,授课内容条理清晰,经常运用各种实例,娓娓道来,给人印象深刻。王老师在课堂上也十分注重和同学们的互动,经常会用一些亲身实践的经验为例,让同学们在基于事实的基础上更好的理解相关理论,充分做到了理论与实际的结合,既形象生动,又丰富有趣。
结合自己课堂的学习和单片机学习效果总结几点教学建议希望老师接纳:
(1)、每一位学生都要发展,但不必求一样的发展;每一位学生都要提高,但不必是同步的提高;每一位学生都要合格,但不必是相同的规格;
(2)、学生不会说的,您鼓励他说;学生说不准的,您引导他说。
结束语
本设计设计的数字电子钟采用单片机内部定时器进行定时,数码管显示与传统的指针式钟表相比,具有时间准确、其输出时间采用数字显示读数直观方便等优点。系统上电或按键复位后能自动显示系统提示符“P.”,进入工作准备状态。当按下S1键时,电子钟开启,并且该电子钟具有清零时间、调节时间等功能。通过测试和修改,该数字电子钟完成了设计任务,符合设计要求。
参考文献
[1] 代启化.基于Proteus的电路设计与仿真[J].现代电子技术.2006,第19期.
Dai QiHua.Proteus-based circuit design and simulation [J]. Modern electronic
technology.2006,No.19.
[2] 刘文秀.单片机应用系统仿真的研究[J].现代电子技术.2005, 第286 期.
Liu WenXiu .Microcontroller Application System Simulation [J]. Modern electronic
technology.2005,No.286.
[3] 曹巧媛.单片机原理及应用[M],北京:电子工业出版社,1997.7.
Cao QiaoYuan.Microcontroller Theory and Applications [M], Beijing: Electronic
Industry Press, 1997.7.
[4] 张洪润.兰清华,单片机应用技术教程[M],北京:清华大学出版社,1997.11.
Zhang Hongrun ,Lan Qinghua, MCU application technology tutorial [M], Beijing:
Tsinghua University Press, 1997.11.
[5] 李广第.单片机基础[M],北京航空航天大学出版社,2006.7.
Li Guangdi. Microcontroller based on [M], Beijing Aerospace University Press, 2006.7.
致 谢
通过不断努力,终于完成了此次单片机的课程设计。在此,首先感谢王韧老师,正是他在万忙之中还抽出宝贵的时间对我们进行精心的指导,才使我顺利完成了此次单片机课程设计。同时也感谢各位同学和老师对我提供的帮助。使我在此次设计中学到了许多宝贵的知识和经验。在此,衷心地感谢你们!
附录A 电路原理图
附录B 元器件布局图
附录C PCB顶层布线图
附录D PCB底层布线图
附录E 元器件清单
序号
名称、大小
数量
1
电阻200Ω
1个
2
电阻470Ω
24个
3
电阻1KΩ
3个
4
电阻4.7KΩ
1个
5
电容22μF
1个
6
电容33pF
2个
7
18B20
1个
8
AT89S52
1个
9
单排插
展开阅读全文