2012级基于单片机定时闹钟设计专业综合训练
基于单片机定时闹钟设计
学生学号:1204020213 学生姓名: 郝向忠
指导教师: 童一凡
机电工程系
2014年 月 日
2012级基于单片机定时闹钟设计专业综合训练
基于单片机定时闹钟设计
石家庄职业技术学院机电系 郝向忠 邮编 050081
摘 要
随着科学技术的不断发展 , 人们对时间计量的要求越来越高 。在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。本作品是以STC89C51单片机作为主控芯片,使用12MHZ 的晶振, 产生时间信息,时间精确。在其基础上外围扩展芯片和外围电路,附加时钟电路,复位电路,键盘接口及数码管显示。键盘采用独立连接式。还有定时报警系统,即定时时间到,通过扬声器发出报警声,提示预先设定时间时间到,从而起到定时作用。
关键字 按键 、单片机、 汇编
目 录
1 设计课题任务、功能要求说明及总体方案介绍.........................4 1.1 设计课题任务................................................4 1.2 功能要求说明................................................4 1.3 总体方案介绍及工作原理说明..................................4 2 硬件系统设计.....................................................5
2. 1 各模块功能选择与设计........................................6 2. 2 电路原理图...............................................8 2. 3 元器件清单.................................................9 3 软件系统的设计.................................................9
3. 1 单片机资源分配情况......................................9 3. 2 软件系统程序流程框图................................10 3. 3 软件系统各模块功能简述 ......................................12 3. 4 软件系统程序清单..........................................12 4 设计结论、仿真过程及设计体会.........................20
4. 1 设计结论及使用说明.......................................21 4. 2 仿真过程.................................................20 4. 3 设计体会................................................24 参考文献...........................................................25 致谢...............................................................25
1 设计课题任务、功能要求说明及总体方案介绍
1.1 设计课题任务
设计一个单片机控制的电子闹钟系统,利用单片机的定时器/计数器定时和记数的原理,结合显示电路、用六个LED 数码管以及按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行闹时,同时数码管能够正确地显示时间。 1.2 功能要求说明
1.正常状态下,数码管显示当前时间。当定时开关按下时,启动定时功能;启动定时后,若定时时间到,则蜂鸣器响30秒。
2.默认定时时间是12:00:00。定时时间可以用开关设定。 3.当时间不准确时,可以按动校时开关进行校时。 * 4.允许自己增加功能 1.3 总体方案介绍及工作原理说明
本设计利用AT89S52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据,P2.0-P2.4口作数码管显示输出,6个按键S2至S7分别依次接在P3.3至P3.7口线,硬件电路基本原理图如图1.1所示。
复位电路
按键模块
单片机显示模块
时钟电路电源电路
图1.1 闹钟硬件电路基本原理图
2012级基于单片机定时闹钟设计专业综合训练
2 硬件系统设计
2.1 各模块功能选择与设计 2.1.1 显示电路的选择与设计 数码管显示电路
单片机中通常使用7段LED ,LED 是发光二极管显示器的缩写。LED 显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,颜色鲜艳,配臵灵活与单片机接口方便而得到广泛应用。LED 显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。LED 显示器有多种形式,如:“米”字型显示器,点阵显示器和七段数码显示器等,在单片机系统中使用最多的是七段数码显示器
2012级基于单片机定时闹钟设计专业综合训练
LED 七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管
的连接形式不同,LED 有共阴极和共阳极两种,如图3所示: 采用高亮共阴型数位数码管,为示区别,显示秒的两个数码管个头较小,另外4个较大。共阴数码管连接线路如下:一般用7个发光二极管构成显示数字和符号,另外还用一段发光二极管显示小数点。这种显示器一般分为两种,共阳极显示器和共阴极显示器,共阳极显示器是把每个二极管的正端连在一起,共阴极显示器是把每个二极管的阴极连在一起。一只显示器是有8个发光二极管构成,当把某段加正向电压时,则该段所对应的笔划亮,不加正向电压则暗,为了保护各段不受损坏需要加限流电阻,无论是共阳极显示器还是共阴极显示器,它的8段排列顺序都是一样的:A 段、B 段、C 段、D 段、E 段、F 段、G 段和DP 段。在单片机中通常使用7段LED 。
段驱动
八位数码显示
管
AT89S52
位驱动
图2.1 显示电路基本原理图
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
2.1.2 按键电路的选择与设计
当按键没有按下时,单片机的I/O口直接连接电源,因此需要接上拉电阻来进行限流,本设计中选取阻值为470Ω 的电阻作为上拉电阻. 具体设计如图2.2所示
2.1.3 时钟电路的选择与设计
单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。本系统中AT89C51单片机采用内部时钟方式。最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHz ~12MHz 之间。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在20pF ~100pF 之间取值。AT98S51单片机的时钟电路如图2所示。
2.1.4 复位电路的选择与设计
标准AT89S52不仅复位源比较单一,而且还没有设计内部上电复位的延时功能,因此必须借助于外接阻容支路来增加延时环节,如图2.4(a)所示。其实,外接电阻R 还是可以省略的
在每次单片机断电之后,须使延时电容C 上的电荷立刻放掉,以便为随后可能在很短的时间内再次加电作好准备。否则,在断电后C 还没有充分放电的情况下,如果很快又加电,那么RC 支路就失去了它应有的延迟功能。因此,在图2.4(a)的基础上添加一个放电二极管D ,上电复位延时电路就变成了如图2.4(c)所示的改进电路。也就是说,只有RC 支路的充电过程对电路是有用的,放电过程不仅无用,而且会带来潜在的危害。于是附加一个放电二极管D 来大力缩短放电持续时间,以便消除隐患。二极管D 只有在单片机断电的瞬间(即VCC 趋近于0 V ,可以看作VCC 对地短路)正向导通,平时一直处于反偏截止状态。
手动复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。单片机要完成复位,必须向复位端输出并持续两个机器周期以上的高电平,从而实现复位操作。
本设计采用上电且开关复位电路,如图2.5所示上电后,由于电容充电,使RST 持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST 持续一段时间的高电平,从而实现上电且开关复位的操作。
2.1.5 音响报警电路
在AT89C51外围的一个管口上加蜂鸣器,通过软件与硬件的结合可实现定时闹钟功能
2012级基于单片机定时闹钟设计专业综合训练
2.2 电路原理图
2.3 元器件清单
3 软件系统的设计
3.1 单片机资源分配情况
P0.7---P0.0段控线, 接LED 的显示段 P2.7---P2.0位控线
P3.3---P3.7 6个按键S6至S1
3.3 软件系统程序流程框图
3.3 软件系统各模块功能简要介绍
TIME_1MS(定时1ms 子程序)
KEY(键扫描子程序)
KEYCHULI(P1口数据处理子程序)
3.4 软件系统程序清单
ORG 0000H
LJMP MAIN ;主程序跳转
ORG 000BH
LJMP T0 ;T0跳转
ORG 001BH
LJMP T1INT ;T1跳转
MAIN:MOV SP,#70 ;堆栈初始化
MOV TMOD,#11H ;T0.T1方式1工作
MOV TL1,#0EFH ;T1初值
MOV TH1,#0D8H
MOV TL0,#00h ;T0初值
MOV TH0,#0EEH
MOV IE,#8aH ;开中断
MOV 39H,#30
MOV R7,#100 ;中断次数(计时)
MOV R5,#6 ;位个数
MOV R4,#01H
MOV 30H,#0 ;时钟缓冲区
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#2
MOV 35H,#1
MOV 40H,#0 ;闹钟缓冲区
MOV 41H,#0
MOV 42H,#0
MOV 44H,#6
MOV 45H,#0
MOV DPTR,#TAB
SETB TR1 ;启动定时器1
SETB TR0 ;启动定时器0
MainLoop:
MOV R3,39H
CJNE R3,#0, YU
MOV 39H,#30 ;蜂鸣器叫30S
CLR 20H.0 ;关蜂鸣器
CLR 20H.1 ;关闹钟
YU:JB P3.7,CheckPP
LCALL Delay2
JB P3.7,CheckPP ;闹时设臵键按下了吗?没有则转去检测秒设臵键篇p3.4 SETB 20H.1 ;开闹钟
CALL NAOZHONG
CheckPP: MOV 46H,#30H
JB P3.4,CheckPQ ;分设臵键按下了吗?没有则转去检测小时设臵键 CALL Delay2 ;
JB P3.4,CheckPQ
INC 32H
MOV A,32H
CJNE A,#10,NotOver1 ;到10分钟了吗?
MOV 32H,#0
NotOver1: ;以下等待按键释放及防抖动
JNB P3.4,$
CheckPQ:
JB P3.3,CheckPQ1 ;分十位设臵键按下了吗?没有则转去闹时状态检测
JB P3.3 ,CheckPQ1
INC 33H
MOV A,33H
CJNE A,#6,NotOver2
MOV 33H,#0
NotOver2:
;以下等待按键释放及防抖动
JNB P3.3,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckPQ1:
JB P3.5,CheckPQ2 ;小时个位设臵键按下了吗?
CALL Delay2
JB P3.5,CheckPQ2
INC 34H
MOV A,35H
CJNE A,#0,JU1
MOV A,34H
CJNE A,#10,NotOver21
MOV 34H,#0
MOV A,35H
JU1: CJNE A,#1,JU
MOV A,34H
CJNE A,#10,NotOver21
MOV 34H,#0
JU:CJNE A,#2,NotOver21
MOV A,34H
CJNE A,#4,NotOver21
MOV 34H,#0 ;到24小时则将小时清0
NotOver21:
;以下等待按键释放及防抖动
JNB P3.5,$
小时调整逻辑;*********************************
********************************************
CheckPQ2:
JB P3.6,CheckAlarm ;小时十位设臵键按下了吗?没有则转去闹时状态检测 CALL Delay2
JB P3.6,CheckAlarm
INC 35H
MOV A,34H
CJNE A,#0,E1
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E1:CJNE A,#1,E2
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E2:CJNE A,#2,E3
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E3:CJNE A,#3,E4
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E4:CJNE A,#4,E5
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E5:CJNE A,#5,E6
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E6:CJNE A,#6,E7
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E7:CJNE A,#7,E8
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E8:CJNE A,#8,E9
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E9:CJNE A,#9,NotOver22
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0 ;到24小时则将小时清0
NotOver22:
;以下等待按键释放及防抖动
JNB P3.6,$
CheckAlarm: JNB 20H.1,LL ;判闹钟
LCALL BIJIAO ;调用闹钟子程序
LL: AJMP MainLoop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X显示程序;;;;;;;;;;;;;;;;;; T0:MOV TL0,#00H ;T0初值
MOV TH0,#0EEH
DJNZ R5,T01 ;一轮扫描是否结束
MOV R5,#6 ;动态扫描位数
MOV R4,#01H ;动态扫描初值
MOV R0,46H ;动态扫描缓冲区选择
T01:MOV P0,#00H ;关显示
MOV A,@R0 ;取首地址
MOVC A,@A+DPTR ;查表
MOV P2,A ;送段码
MOV P0,R4 ;送位码
MOV A,R4 ;位偏移
RL A
MOV R4,A
INC R0
RETI
T1INT:
MOV TL1,#0EFH ;T1初值
MOV TH1,#0D8H
DJNZ R7,N
MOV R7,#100 ;1秒计时
jnb 20h.0, bt01
cpl p1.7 ;蜂鸣器叫
cpl p1.0
DEC 39H
bt01: INC 30H ;秒个位加1
MOV R3,30H
CJNE R3,#10,N
MOV 30H,#0
INC 31H ;秒十位加1
MOV R3,31H
CJNE R3,#3,TTT
CLR 20H.0
TTT:CJNE R3,#6,N
MOV 31H,#0
INC 32H ;分个位加一
MOV R3,32H
CJNE R3,#10,N
MOV 32H,#0
INC 33H ;分十位加一
MOV R3,33H
CJNE R3,#6,N
MOV 33H,#0
INC 34H ;时个位加一
MOV R3,34H
CJNE R3,#4,N1
MOV R3,35H
CJNE R3,#2,N1
LJMP N2
N1:CJNE R3,#10,N
MOV 34H,#0
INC 35H ;时十位加一
LJMP N
N2:MOV 30H,#0 ;计时24小时清0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
N:RETI
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;译码表
Delay1: MOV R5,#5 ;延时间产生1s ,扬声器的震动间隔时间
de3:MOV R6,#200
de2:MOV R7,#250
DJNZ R7,$
DJNZ R6,dE2
DJNZ R5,dE3
RET
Delay2: MOV R6,#10 ;延时产生15ms ,按键防止抖动时间
de4:MOV R7,#245
DJNZ R7,$
DJNZ r6,de4
RET
;********************************N闹钟调整子程************************************************
NAOZHONG: INC 60H ;单元加一,,选取首地址
MOV A,60H
MM1: CJNE A,#1,MM
MOV 46H,#40H ;闹钟首地址
MM: CJNE A,#0,M2
MOV 46H,#30H ;时钟首地址
M2:CJNE A,#2,MM1
MOV 60H,#0
NAOZHONGaa:JB P3.4,CheckPQa ;分设臵键按下了吗?没有则转去检测小时设臵键 CALL Delay2 ;
JB P3.4,CheckPQa
INC 42H
MOV A,42H
CJNE A,#10,NotOver1a ;到10分钟了吗?
MOV 42H,#0
NotOver1a: ;以下等待按键释放及防抖动
JNB P3.4,$
CheckPQa:
JB P3.3,CheckPQ1a ;小时设臵键按下了吗?没有则转去闹时状态检测
序
CALL Delay2
JB P3.3 ,CheckPQ1a
INC 43H
MOV A,43H
CJNE A,#6,NotOver2a
MOV 43H,#0
NotOver2a:
;以下等待按键释放及防抖动
JNB P3.3,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckPQ1a:
JB P3.5,CheckPQ2a ;小时设臵键按下了吗?
CALL Delay2
JB P3.5,CheckPQ2a
INC 44H
MOV A,45H
CJNE A,#0,JU1a
MOV A,44H
CJNE A,#10,NotOver21a
MOV 44H,#0
MOV A,45H
JU1a:CJNE A,#1,JUa
MOV A,44H
CJNE A,#10,NotOver21a
MOV 44H,#0
JUa:CJNE A,#2,NotOver21a
MOV A,44H
CJNE A,#4,NotOver21a
MOV 44H,#0 ;到24小时则将小时清0
NotOver21a: ;以下等待按键释放及防抖动
JNB P3.5,$
CheckPQ2a:
JB P3.6,kka ;小时设臵键按下了吗?
CALL Delay2
JB P3.6,kka
INC 45H
MOV A,44H
CJNE A,#0,E1a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E1a:CJNE A,#1,E2a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E2a:CJNE A,#2,E3a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E3a:CJNE A,#3,E4a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E4a:CJNE A,#4,E5a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E5a:CJNE A,#5,E6a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E6a:CJNE A,#6,E7a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E7a:CJNE A,#7,E8a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E8a:CJNE A,#8,E9a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E9a:CJNE A,#9,NotOver22a
MOV A,35H
CJNE A,#2,NotOver22a
MOV 35H,#0 ;到24小时则将小时清0
NotOver22a:
;以下等待按键释放及防抖动
JNB P3.6,$
kkaa:ljmp NAOZHONGaa
kka:JB P3.2,kkaa ;[**************]00返回计时显示[1**********]00
RET
BIJIAO : ;比较计时闹时时间到
MOV A,35H
CJNE A,45H,BI3
MOV A,34H
CJNE A,44H,BI3
MOV A,33H
CJNE A,43H,BI3
MOV A,32H
CJNE A,42H,BI3
setb 20h.0 ;启动蜂鸣器标志位
BI3:RET
4 设计结论、仿真过程及设计体会
4.1 设计结论及使用说明
4.1.1 设计结论
本系统就是充分利用了AT89S52芯片的I/O引脚。该闹钟上电或按键复位后能自动显示系统提示符“12.00.00”,进入准备工作状态。闹钟具有调时、定时、报警等功能
4.1.2 使用说明
K1:跳出闹钟定时
K2:分十位调整
K3:分个位调整
K4:时十位调整
K5:时个位调整
K5:进入闹钟调整
4.2仿真过程
在仿真过程中遇到蜂鸣器不发声,不是程序问题,是元器件加载错误。灯光太暗,原因是限流电阻太大!
4.4 设计体会
我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。 这次单片机课程设计我们历时一个星期,时间虽然不算长,但经过这一个星期的实践和体验下来,我们综合那些理论知识来运用到设计和创新,那些原本感觉枯燥乏味的程序在这次课程设计后,我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
通过本次设计,复习巩固我们以前所学习的数字、模拟电子技术、单片机原理及应用等课程知识,加深对各门课程及相互关系的理解,并成功使用了Keil 、Protel 99se和Proteus 三款电子软件,使理论知识系统化、实用化,系统地掌握微机应用系统的一般设计方法,培养较强的编程能力、开发能力。
当自己不懂得时候不要逃避要面对困难,自己想办法总会解决的。办法永远比困难多! 相信自己,要安慰,踏实。
参考文献
[1]刘焕平,童一凡. 单片机原理及应用, 北京邮电大学出版社
[2]万光毅,严义, 邢春香. 单片机实验与实践教程, 北京航空航天大学出版社
[3]张迎新. 单片机中级教程,北京航空航天大学出版社
[4]丁元杰. 单片机原理与应用,机械工业出版社
[5]孙育才.MCS-51系列单片微型计算机及其应用,东南大学出版社
致 谢
由于编程能力的有限和所学知识的局限性,在这个程序和设计系统中只实现了所有的基本要求和部分的高级要求,而且这其中还有许多不完善的地方,有时在上翻和下翻时会出现一些问题,这说明我在这方面还存在着很多不足,知识不够完备和系统,在以后的学习中还有待提高。希望老师能在以后的学习和生活中对我多加指导,促使我能取得更大的进步。
感谢童老师,是他严谨的作风一直不断激励着我,让我在困难的路上不断前行。通过本次设计使我们的动手能力得到了很大的提高,使我们走出了实践的盲区,为以后工作后的动手打下了坚实的基础。最后感谢老师和同学们的帮助
2012级基于单片机定时闹钟设计专业综合训练
基于单片机定时闹钟设计
学生学号:1204020213 学生姓名: 郝向忠
指导教师: 童一凡
机电工程系
2014年 月 日
2012级基于单片机定时闹钟设计专业综合训练
基于单片机定时闹钟设计
石家庄职业技术学院机电系 郝向忠 邮编 050081
摘 要
随着科学技术的不断发展 , 人们对时间计量的要求越来越高 。在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。本作品是以STC89C51单片机作为主控芯片,使用12MHZ 的晶振, 产生时间信息,时间精确。在其基础上外围扩展芯片和外围电路,附加时钟电路,复位电路,键盘接口及数码管显示。键盘采用独立连接式。还有定时报警系统,即定时时间到,通过扬声器发出报警声,提示预先设定时间时间到,从而起到定时作用。
关键字 按键 、单片机、 汇编
目 录
1 设计课题任务、功能要求说明及总体方案介绍.........................4 1.1 设计课题任务................................................4 1.2 功能要求说明................................................4 1.3 总体方案介绍及工作原理说明..................................4 2 硬件系统设计.....................................................5
2. 1 各模块功能选择与设计........................................6 2. 2 电路原理图...............................................8 2. 3 元器件清单.................................................9 3 软件系统的设计.................................................9
3. 1 单片机资源分配情况......................................9 3. 2 软件系统程序流程框图................................10 3. 3 软件系统各模块功能简述 ......................................12 3. 4 软件系统程序清单..........................................12 4 设计结论、仿真过程及设计体会.........................20
4. 1 设计结论及使用说明.......................................21 4. 2 仿真过程.................................................20 4. 3 设计体会................................................24 参考文献...........................................................25 致谢...............................................................25
1 设计课题任务、功能要求说明及总体方案介绍
1.1 设计课题任务
设计一个单片机控制的电子闹钟系统,利用单片机的定时器/计数器定时和记数的原理,结合显示电路、用六个LED 数码管以及按键来设计计时器。将软、硬件有机地结合起来,使得系统能够正确地进行闹时,同时数码管能够正确地显示时间。 1.2 功能要求说明
1.正常状态下,数码管显示当前时间。当定时开关按下时,启动定时功能;启动定时后,若定时时间到,则蜂鸣器响30秒。
2.默认定时时间是12:00:00。定时时间可以用开关设定。 3.当时间不准确时,可以按动校时开关进行校时。 * 4.允许自己增加功能 1.3 总体方案介绍及工作原理说明
本设计利用AT89S52单片机的定时器/计数器定时和记数的原理,使其能精确计时。利用中断系统使其能实现开始暂停的功能。P0口输出段码数据,P2.0-P2.4口作数码管显示输出,6个按键S2至S7分别依次接在P3.3至P3.7口线,硬件电路基本原理图如图1.1所示。
复位电路
按键模块
单片机显示模块
时钟电路电源电路
图1.1 闹钟硬件电路基本原理图
2012级基于单片机定时闹钟设计专业综合训练
2 硬件系统设计
2.1 各模块功能选择与设计 2.1.1 显示电路的选择与设计 数码管显示电路
单片机中通常使用7段LED ,LED 是发光二极管显示器的缩写。LED 显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,颜色鲜艳,配臵灵活与单片机接口方便而得到广泛应用。LED 显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。LED 显示器有多种形式,如:“米”字型显示器,点阵显示器和七段数码显示器等,在单片机系统中使用最多的是七段数码显示器
2012级基于单片机定时闹钟设计专业综合训练
LED 七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管
的连接形式不同,LED 有共阴极和共阳极两种,如图3所示: 采用高亮共阴型数位数码管,为示区别,显示秒的两个数码管个头较小,另外4个较大。共阴数码管连接线路如下:一般用7个发光二极管构成显示数字和符号,另外还用一段发光二极管显示小数点。这种显示器一般分为两种,共阳极显示器和共阴极显示器,共阳极显示器是把每个二极管的正端连在一起,共阴极显示器是把每个二极管的阴极连在一起。一只显示器是有8个发光二极管构成,当把某段加正向电压时,则该段所对应的笔划亮,不加正向电压则暗,为了保护各段不受损坏需要加限流电阻,无论是共阳极显示器还是共阴极显示器,它的8段排列顺序都是一样的:A 段、B 段、C 段、D 段、E 段、F 段、G 段和DP 段。在单片机中通常使用7段LED 。
段驱动
八位数码显示
管
AT89S52
位驱动
图2.1 显示电路基本原理图
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的公共阴极位选线由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码,依此规律循环,即可使各位数码管显示将要显示的字符,虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人同时显示的感觉。
2.1.2 按键电路的选择与设计
当按键没有按下时,单片机的I/O口直接连接电源,因此需要接上拉电阻来进行限流,本设计中选取阻值为470Ω 的电阻作为上拉电阻. 具体设计如图2.2所示
2.1.3 时钟电路的选择与设计
单片机的时钟产生方法有两种:内部时钟方式和外部时钟方式。本系统中AT89C51单片机采用内部时钟方式。最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。振荡晶体可在1.2MHz ~12MHz 之间。电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在20pF ~100pF 之间取值。AT98S51单片机的时钟电路如图2所示。
2.1.4 复位电路的选择与设计
标准AT89S52不仅复位源比较单一,而且还没有设计内部上电复位的延时功能,因此必须借助于外接阻容支路来增加延时环节,如图2.4(a)所示。其实,外接电阻R 还是可以省略的
在每次单片机断电之后,须使延时电容C 上的电荷立刻放掉,以便为随后可能在很短的时间内再次加电作好准备。否则,在断电后C 还没有充分放电的情况下,如果很快又加电,那么RC 支路就失去了它应有的延迟功能。因此,在图2.4(a)的基础上添加一个放电二极管D ,上电复位延时电路就变成了如图2.4(c)所示的改进电路。也就是说,只有RC 支路的充电过程对电路是有用的,放电过程不仅无用,而且会带来潜在的危害。于是附加一个放电二极管D 来大力缩短放电持续时间,以便消除隐患。二极管D 只有在单片机断电的瞬间(即VCC 趋近于0 V ,可以看作VCC 对地短路)正向导通,平时一直处于反偏截止状态。
手动复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。单片机要完成复位,必须向复位端输出并持续两个机器周期以上的高电平,从而实现复位操作。
本设计采用上电且开关复位电路,如图2.5所示上电后,由于电容充电,使RST 持续一段高电平时间。当单片机已在运行之中时,按下复位键也能使RST 持续一段时间的高电平,从而实现上电且开关复位的操作。
2.1.5 音响报警电路
在AT89C51外围的一个管口上加蜂鸣器,通过软件与硬件的结合可实现定时闹钟功能
2012级基于单片机定时闹钟设计专业综合训练
2.2 电路原理图
2.3 元器件清单
3 软件系统的设计
3.1 单片机资源分配情况
P0.7---P0.0段控线, 接LED 的显示段 P2.7---P2.0位控线
P3.3---P3.7 6个按键S6至S1
3.3 软件系统程序流程框图
3.3 软件系统各模块功能简要介绍
TIME_1MS(定时1ms 子程序)
KEY(键扫描子程序)
KEYCHULI(P1口数据处理子程序)
3.4 软件系统程序清单
ORG 0000H
LJMP MAIN ;主程序跳转
ORG 000BH
LJMP T0 ;T0跳转
ORG 001BH
LJMP T1INT ;T1跳转
MAIN:MOV SP,#70 ;堆栈初始化
MOV TMOD,#11H ;T0.T1方式1工作
MOV TL1,#0EFH ;T1初值
MOV TH1,#0D8H
MOV TL0,#00h ;T0初值
MOV TH0,#0EEH
MOV IE,#8aH ;开中断
MOV 39H,#30
MOV R7,#100 ;中断次数(计时)
MOV R5,#6 ;位个数
MOV R4,#01H
MOV 30H,#0 ;时钟缓冲区
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#2
MOV 35H,#1
MOV 40H,#0 ;闹钟缓冲区
MOV 41H,#0
MOV 42H,#0
MOV 44H,#6
MOV 45H,#0
MOV DPTR,#TAB
SETB TR1 ;启动定时器1
SETB TR0 ;启动定时器0
MainLoop:
MOV R3,39H
CJNE R3,#0, YU
MOV 39H,#30 ;蜂鸣器叫30S
CLR 20H.0 ;关蜂鸣器
CLR 20H.1 ;关闹钟
YU:JB P3.7,CheckPP
LCALL Delay2
JB P3.7,CheckPP ;闹时设臵键按下了吗?没有则转去检测秒设臵键篇p3.4 SETB 20H.1 ;开闹钟
CALL NAOZHONG
CheckPP: MOV 46H,#30H
JB P3.4,CheckPQ ;分设臵键按下了吗?没有则转去检测小时设臵键 CALL Delay2 ;
JB P3.4,CheckPQ
INC 32H
MOV A,32H
CJNE A,#10,NotOver1 ;到10分钟了吗?
MOV 32H,#0
NotOver1: ;以下等待按键释放及防抖动
JNB P3.4,$
CheckPQ:
JB P3.3,CheckPQ1 ;分十位设臵键按下了吗?没有则转去闹时状态检测
JB P3.3 ,CheckPQ1
INC 33H
MOV A,33H
CJNE A,#6,NotOver2
MOV 33H,#0
NotOver2:
;以下等待按键释放及防抖动
JNB P3.3,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckPQ1:
JB P3.5,CheckPQ2 ;小时个位设臵键按下了吗?
CALL Delay2
JB P3.5,CheckPQ2
INC 34H
MOV A,35H
CJNE A,#0,JU1
MOV A,34H
CJNE A,#10,NotOver21
MOV 34H,#0
MOV A,35H
JU1: CJNE A,#1,JU
MOV A,34H
CJNE A,#10,NotOver21
MOV 34H,#0
JU:CJNE A,#2,NotOver21
MOV A,34H
CJNE A,#4,NotOver21
MOV 34H,#0 ;到24小时则将小时清0
NotOver21:
;以下等待按键释放及防抖动
JNB P3.5,$
小时调整逻辑;*********************************
********************************************
CheckPQ2:
JB P3.6,CheckAlarm ;小时十位设臵键按下了吗?没有则转去闹时状态检测 CALL Delay2
JB P3.6,CheckAlarm
INC 35H
MOV A,34H
CJNE A,#0,E1
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E1:CJNE A,#1,E2
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E2:CJNE A,#2,E3
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E3:CJNE A,#3,E4
MOV A,35H
CJNE A,#3,NotOver22
MOV 35H,#0
E4:CJNE A,#4,E5
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E5:CJNE A,#5,E6
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E6:CJNE A,#6,E7
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E7:CJNE A,#7,E8
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E8:CJNE A,#8,E9
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0
E9:CJNE A,#9,NotOver22
MOV A,35H
CJNE A,#2,NotOver22
MOV 35H,#0 ;到24小时则将小时清0
NotOver22:
;以下等待按键释放及防抖动
JNB P3.6,$
CheckAlarm: JNB 20H.1,LL ;判闹钟
LCALL BIJIAO ;调用闹钟子程序
LL: AJMP MainLoop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X显示程序;;;;;;;;;;;;;;;;;; T0:MOV TL0,#00H ;T0初值
MOV TH0,#0EEH
DJNZ R5,T01 ;一轮扫描是否结束
MOV R5,#6 ;动态扫描位数
MOV R4,#01H ;动态扫描初值
MOV R0,46H ;动态扫描缓冲区选择
T01:MOV P0,#00H ;关显示
MOV A,@R0 ;取首地址
MOVC A,@A+DPTR ;查表
MOV P2,A ;送段码
MOV P0,R4 ;送位码
MOV A,R4 ;位偏移
RL A
MOV R4,A
INC R0
RETI
T1INT:
MOV TL1,#0EFH ;T1初值
MOV TH1,#0D8H
DJNZ R7,N
MOV R7,#100 ;1秒计时
jnb 20h.0, bt01
cpl p1.7 ;蜂鸣器叫
cpl p1.0
DEC 39H
bt01: INC 30H ;秒个位加1
MOV R3,30H
CJNE R3,#10,N
MOV 30H,#0
INC 31H ;秒十位加1
MOV R3,31H
CJNE R3,#3,TTT
CLR 20H.0
TTT:CJNE R3,#6,N
MOV 31H,#0
INC 32H ;分个位加一
MOV R3,32H
CJNE R3,#10,N
MOV 32H,#0
INC 33H ;分十位加一
MOV R3,33H
CJNE R3,#6,N
MOV 33H,#0
INC 34H ;时个位加一
MOV R3,34H
CJNE R3,#4,N1
MOV R3,35H
CJNE R3,#2,N1
LJMP N2
N1:CJNE R3,#10,N
MOV 34H,#0
INC 35H ;时十位加一
LJMP N
N2:MOV 30H,#0 ;计时24小时清0
MOV 31H,#0
MOV 32H,#0
MOV 33H,#0
MOV 34H,#0
MOV 35H,#0
N:RETI
TAB:DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;译码表
Delay1: MOV R5,#5 ;延时间产生1s ,扬声器的震动间隔时间
de3:MOV R6,#200
de2:MOV R7,#250
DJNZ R7,$
DJNZ R6,dE2
DJNZ R5,dE3
RET
Delay2: MOV R6,#10 ;延时产生15ms ,按键防止抖动时间
de4:MOV R7,#245
DJNZ R7,$
DJNZ r6,de4
RET
;********************************N闹钟调整子程************************************************
NAOZHONG: INC 60H ;单元加一,,选取首地址
MOV A,60H
MM1: CJNE A,#1,MM
MOV 46H,#40H ;闹钟首地址
MM: CJNE A,#0,M2
MOV 46H,#30H ;时钟首地址
M2:CJNE A,#2,MM1
MOV 60H,#0
NAOZHONGaa:JB P3.4,CheckPQa ;分设臵键按下了吗?没有则转去检测小时设臵键 CALL Delay2 ;
JB P3.4,CheckPQa
INC 42H
MOV A,42H
CJNE A,#10,NotOver1a ;到10分钟了吗?
MOV 42H,#0
NotOver1a: ;以下等待按键释放及防抖动
JNB P3.4,$
CheckPQa:
JB P3.3,CheckPQ1a ;小时设臵键按下了吗?没有则转去闹时状态检测
序
CALL Delay2
JB P3.3 ,CheckPQ1a
INC 43H
MOV A,43H
CJNE A,#6,NotOver2a
MOV 43H,#0
NotOver2a:
;以下等待按键释放及防抖动
JNB P3.3,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckPQ1a:
JB P3.5,CheckPQ2a ;小时设臵键按下了吗?
CALL Delay2
JB P3.5,CheckPQ2a
INC 44H
MOV A,45H
CJNE A,#0,JU1a
MOV A,44H
CJNE A,#10,NotOver21a
MOV 44H,#0
MOV A,45H
JU1a:CJNE A,#1,JUa
MOV A,44H
CJNE A,#10,NotOver21a
MOV 44H,#0
JUa:CJNE A,#2,NotOver21a
MOV A,44H
CJNE A,#4,NotOver21a
MOV 44H,#0 ;到24小时则将小时清0
NotOver21a: ;以下等待按键释放及防抖动
JNB P3.5,$
CheckPQ2a:
JB P3.6,kka ;小时设臵键按下了吗?
CALL Delay2
JB P3.6,kka
INC 45H
MOV A,44H
CJNE A,#0,E1a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E1a:CJNE A,#1,E2a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E2a:CJNE A,#2,E3a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E3a:CJNE A,#3,E4a
MOV A,45H
CJNE A,#3,NotOver22a
MOV 45H,#0
E4a:CJNE A,#4,E5a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E5a:CJNE A,#5,E6a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E6a:CJNE A,#6,E7a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E7a:CJNE A,#7,E8a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E8a:CJNE A,#8,E9a
MOV A,45H
CJNE A,#2,NotOver22a
MOV 45H,#0
E9a:CJNE A,#9,NotOver22a
MOV A,35H
CJNE A,#2,NotOver22a
MOV 35H,#0 ;到24小时则将小时清0
NotOver22a:
;以下等待按键释放及防抖动
JNB P3.6,$
kkaa:ljmp NAOZHONGaa
kka:JB P3.2,kkaa ;[**************]00返回计时显示[1**********]00
RET
BIJIAO : ;比较计时闹时时间到
MOV A,35H
CJNE A,45H,BI3
MOV A,34H
CJNE A,44H,BI3
MOV A,33H
CJNE A,43H,BI3
MOV A,32H
CJNE A,42H,BI3
setb 20h.0 ;启动蜂鸣器标志位
BI3:RET
4 设计结论、仿真过程及设计体会
4.1 设计结论及使用说明
4.1.1 设计结论
本系统就是充分利用了AT89S52芯片的I/O引脚。该闹钟上电或按键复位后能自动显示系统提示符“12.00.00”,进入准备工作状态。闹钟具有调时、定时、报警等功能
4.1.2 使用说明
K1:跳出闹钟定时
K2:分十位调整
K3:分个位调整
K4:时十位调整
K5:时个位调整
K5:进入闹钟调整
4.2仿真过程
在仿真过程中遇到蜂鸣器不发声,不是程序问题,是元器件加载错误。灯光太暗,原因是限流电阻太大!
4.4 设计体会
我觉得做单片机课程设计是十分有意义的,而且是十分必要的。在已度过的大学时间里,我们大多数接触的是专业课。我们在课堂上掌握的仅仅是专业课的理论知识,如何去锻炼我们的实践能力?如何把我们所学的专业基础课理论知识运用到实践中去呢?我想做类似的课程设计就为我们提供了良好的实践平台。 这次单片机课程设计我们历时一个星期,时间虽然不算长,但经过这一个星期的实践和体验下来,我们综合那些理论知识来运用到设计和创新,那些原本感觉枯燥乏味的程序在这次课程设计后,我发现自己在一点一滴的努力中对单片机的兴趣也在逐渐增加。
通过本次设计,复习巩固我们以前所学习的数字、模拟电子技术、单片机原理及应用等课程知识,加深对各门课程及相互关系的理解,并成功使用了Keil 、Protel 99se和Proteus 三款电子软件,使理论知识系统化、实用化,系统地掌握微机应用系统的一般设计方法,培养较强的编程能力、开发能力。
当自己不懂得时候不要逃避要面对困难,自己想办法总会解决的。办法永远比困难多! 相信自己,要安慰,踏实。
参考文献
[1]刘焕平,童一凡. 单片机原理及应用, 北京邮电大学出版社
[2]万光毅,严义, 邢春香. 单片机实验与实践教程, 北京航空航天大学出版社
[3]张迎新. 单片机中级教程,北京航空航天大学出版社
[4]丁元杰. 单片机原理与应用,机械工业出版社
[5]孙育才.MCS-51系列单片微型计算机及其应用,东南大学出版社
致 谢
由于编程能力的有限和所学知识的局限性,在这个程序和设计系统中只实现了所有的基本要求和部分的高级要求,而且这其中还有许多不完善的地方,有时在上翻和下翻时会出现一些问题,这说明我在这方面还存在着很多不足,知识不够完备和系统,在以后的学习中还有待提高。希望老师能在以后的学习和生活中对我多加指导,促使我能取得更大的进步。
感谢童老师,是他严谨的作风一直不断激励着我,让我在困难的路上不断前行。通过本次设计使我们的动手能力得到了很大的提高,使我们走出了实践的盲区,为以后工作后的动手打下了坚实的基础。最后感谢老师和同学们的帮助