基于单片机定时闹钟设计.docx
《基于单片机定时闹钟设计.docx》由会员分享,可在线阅读,更多相关《基于单片机定时闹钟设计.docx(28页珍藏版)》请在冰豆网上搜索。
基于单片机定时闹钟设计
基于单片机定时闹钟设计
基于单片机定时闹钟设计
学生学号:
xxxxxxxx
学生姓名:
xxx
指导教师:
xxx
机电工程系
2014年月日
基于单片机定时闹钟设计
石家庄职业技术学院机电系xxx邮编xxxxx
摘要
随着科学技术的不断发展,人们对时间计量的要求越来越高。
在当今社会,电子时钟已经得到相当广泛的应用,产品多样,发展更是多元化。
本作品是以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闹钟硬件电路基本原理图
2硬件系统设计
2.1各模块功能选择与设计
2.1.1显示电路的选择与设计
数码管显示电路
单片机中通常使用7段LED,LED是发光二极管显示器的缩写。
LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,可靠性高,寿命长,响应速度快,颜色鲜艳,配置灵活与单片机接口方便而得到广泛应用。
LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。
LED显示器有多种形式,如:
“米”字型显示器,点阵显示器和七段数码显示器等,在单片机系统中使用最多的是七段数码显示器
LED七段数码显示器由8个发光二极管组成显示字符,根据内部发光二极管
的连接形式不同,LED有共阴极和共阳极两种,如图3所示:
采用高亮共阴型数位数码管,为示区别,显示秒的两个数码管个头较小,另外4个较大。
共阴数码管连接线路如下:
一般用7个发光二极管构成显示数字和符号,另外还用一段发光二极管显示小数点。
这种显示器一般分为两种,共阳极显示器和共阴极显示器,共阳极显示器是把每个二极管的正端连在一起,共阴极显示器是把每个二极管的阴极连在一起。
一只显示器是有8个发光二极管构成,当把某段加正向电压时,则该段所对应的笔划亮,不加正向电压则暗,为了保护各段不受损坏需要加限流电阻,无论是共阳极显示器还是共阴极显示器,它的8段排列顺序都是一样的:
A段、B段、C段、D段、E段、F段、G段和DP段。
在单片机中通常使用7段LED。
图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趋近于0V,可以看作VCC对地短路)正向导通,平时一直处于反偏截止状态。
手动复位要求在电源接通的条件下,在单片机运行期间,如果发生死机,用按钮开关操作使单片机复位。
单片机要完成复位,必须向复位端输出并持续两个机器周期以上的高电平,从而实现复位操作。
本设计采用上电且开关复位电路,如图2.5所示上电后,由于电容充电,使RST持续一段高电平时间。
当单片机已在运行之中时,按下复位键也能使RST持续一段时间的高电平,从而实现上电且开关复位的操作。
2.1.5音响报警电路
在AT89C51外围的一个管口上加蜂鸣器,通过软件与硬件的结合可实现定时闹钟功能
2.2电路原理图
2.3元器件清单
序号
元件
规格
数量
1
电阻
10K
1
2
电阻
220Ω
24
3
电阻
1KΩ
6
4
电容
1μF
1
5
电容
33pF
2
6
单片机
AT89S52
1
7
排阻
10K
2
8
晶振
12MHz
1
9
蜂鸣器
1
10
排针
40
11
数码管
六位一体
1
12
LED
共阳极
9
13
三极管
H9012
9
14
四脚按键
7
15
下载口
1
16
电源接口
1
3软件系统的设计
3.1单片机资源分配情况
P0.7---P0.0段控线,接LED的显示段
P2.7---P2.0位控线
P3.3---P3.76个按键S6至S1
3.3软件系统程序流程框图
3.3软件系统各模块功能简要介绍
TIME_1MS(定时1ms子程序)
KEY(键扫描子程序)
KEYCHULI(P1口数据处理子程序)
3.4软件系统程序清单
ORG0000H
LJMPMAIN;主程序跳转
ORG000BH
LJMPT0;T0跳转
ORG001BH
LJMPT1INT;T1跳转
MAIN:
MOVSP,#70;堆栈初始化
MOVTMOD,#11H;T0.T1方式1工作
MOVTL1,#0EFH;T1初值
MOVTH1,#0D8H
MOVTL0,#00h;T0初值
MOVTH0,#0EEH
MOVIE,#8aH;开中断
MOV39H,#30
MOVR7,#100;中断次数(计时)
MOVR5,#6;位个数
MOVR4,#01H
MOV30H,#0;时钟缓冲区
MOV31H,#0
MOV32H,#0
MOV33H,#0
MOV34H,#2
MOV35H,#1
MOV40H,#0;闹钟缓冲区
MOV41H,#0
MOV42H,#0
MOV43H,#0
MOV44H,#6
MOV45H,#0
MOVDPTR,#TAB
SETBTR1;启动定时器1
SETBTR0;启动定时器0
MainLoop:
MOVR3,39H
CJNER3,#0,YU
MOV39H,#30;蜂鸣器叫30S
CLR20H.0;关蜂鸣器
CLR20H.1;关闹钟
YU:
JBP3.7,CheckPP
LCALLDelay2
JBP3.7,CheckPP;闹时设置键按下了吗?
没有则转去检测秒设置键篇p3.4
SETB20H.1;开闹钟
CALLNAOZHONG
CheckPP:
MOV46H,#30H
JBP3.4,CheckPQ;分设置键按下了吗?
没有则转去检测小时设置键
CALLDelay2;
JBP3.4,CheckPQ
INC32H
MOVA,32H
CJNEA,#10,NotOver1;到10分钟了吗?
MOV32H,#0
NotOver1:
;以下等待按键释放及防抖动
JNBP3.4,$
CheckPQ:
JBP3.3,CheckPQ1;分十位设置键按下了吗?
没有则转去闹时状态检测
CALLDelay2
JBP3.3,CheckPQ1
INC33H
MOVA,33H
CJNEA,#6,NotOver2
MOV33H,#0
NotOver2:
;以下等待按键释放及防抖动
JNBP3.3,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckPQ1:
JBP3.5,CheckPQ2;小时个位设置键按下了吗?
CALLDelay2
JBP3.5,CheckPQ2
INC34H
MOVA,35H
CJNEA,#0,JU1
MOVA,34H
CJNEA,#10,NotOver21
MOV34H,#0
MOVA,35H
JU1:
CJNEA,#1,JU
MOVA,34H
CJNEA,#10,NotOver21
MOV34H,#0
JU:
CJNEA,#2,NotOver21
MOVA,34H
CJNEA,#4,NotOver21
MOV34H,#0;到24小时则将小时清0
NotOver21:
;以下等待按键释放及防抖动
JNBP3.5,$
;*********************************小时调整逻辑********************************************
CheckPQ2:
JBP3.6,CheckAlarm;小时十位设置键按下了吗?
没有则转去闹时状态检测
CALLDelay2
JBP3.6,CheckAlarm
INC35H
MOVA,34H
CJNEA,#0,E1
MOVA,35H
CJNEA,#3,NotOver22
MOV35H,#0
E1:
CJNEA,#1,E2
MOVA,35H
CJNEA,#3,NotOver22
MOV35H,#0
E2:
CJNEA,#2,E3
MOVA,35H
CJNEA,#3,NotOver22
MOV35H,#0
E3:
CJNEA,#3,E4
MOVA,35H
CJNEA,#3,NotOver22
MOV35H,#0
E4:
CJNEA,#4,E5
MOVA,35H
CJNEA,#2,NotOver22
MOV35H,#0
E5:
CJNEA,#5,E6
MOVA,35H
CJNEA,#2,NotOver22
MOV35H,#0
E6:
CJNEA,#6,E7
MOVA,35H
CJNEA,#2,NotOver22
MOV35H,#0
E7:
CJNEA,#7,E8
MOVA,35H
CJNEA,#2,NotOver22
MOV35H,#0
E8:
CJNEA,#8,E9
MOVA,35H
CJNEA,#2,NotOver22
MOV35H,#0
E9:
CJNEA,#9,NotOver22
MOVA,35H
CJNEA,#2,NotOver22
MOV35H,#0;到24小时则将小时清0
NotOver22:
;以下等待按键释放及防抖动
JNBP3.6,$
CheckAlarm:
JNB20H.1,LL;判闹钟
LCALLBIJIAO;调用闹钟子程序
LL:
AJMPMainLoop
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;X显示程序;;;;;;;;;;;;;;;;;;
T0:
MOVTL0,#00H;T0初值
MOVTH0,#0EEH
DJNZR5,T01;一轮扫描是否结束
MOVR5,#6;动态扫描位数
MOVR4,#01H;动态扫描初值
MOVR0,46H;动态扫描缓冲区选择
T01:
MOVP0,#00H;关显示
MOVA,@R0;取首地址
MOVCA,@A+DPTR;查表
MOVP2,A;送段码
MOVP0,R4;送位码
MOVA,R4;位偏移
RLA
MOVR4,A
INCR0
RETI
T1INT:
MOVTL1,#0EFH;T1初值
MOVTH1,#0D8H
DJNZR7,N
MOVR7,#100;1秒计时
jnb20h.0,bt01
cplp1.7;蜂鸣器叫
cplp1.0
DEC39H
bt01:
INC30H;秒个位加1
MOVR3,30H
CJNER3,#10,N
MOV30H,#0
INC31H;秒十位加1
MOVR3,31H
CJNER3,#3,TTT
CLR20H.0
TTT:
CJNER3,#6,N
MOV31H,#0
INC32H;分个位加一
MOVR3,32H
CJNER3,#10,N
MOV32H,#0
INC33H;分十位加一
MOVR3,33H
CJNER3,#6,N
MOV33H,#0
INC34H;时个位加一
MOVR3,34H
CJNER3,#4,N1
MOVR3,35H
CJNER3,#2,N1
LJMPN2
N1:
CJNER3,#10,N
MOV34H,#0
INC35H;时十位加一
LJMPN
N2:
MOV30H,#0;计时24小时清0
MOV31H,#0
MOV32H,#0
MOV33H,#0
MOV34H,#0
MOV35H,#0
N:
RETI
TAB:
DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;译码表
Delay1:
MOVR5,#5;延时间产生1s,扬声器的震动间隔时间
de3:
MOVR6,#200
de2:
MOVR7,#250
DJNZR7,$
DJNZR6,dE2
DJNZR5,dE3
RET
Delay2:
MOVR6,#10;延时产生15ms,按键防止抖动时间
de4:
MOVR7,#245
DJNZR7,$
DJNZr6,de4
RET
;********************************N闹钟调整子程序************************************************
NAOZHONG:
INC60H;单元加一,,选取首地址
MOVA,60H
MM1:
CJNEA,#1,MM
MOV46H,#40H;闹钟首地址
MM:
CJNEA,#0,M2
MOV46H,#30H;时钟首地址
M2:
CJNEA,#2,MM1
MOV60H,#0
NAOZHONGaa:
JBP3.4,CheckPQa;分设置键按下了吗?
没有则转去检测小时设置键
CALLDelay2;
JBP3.4,CheckPQa
INC42H
MOVA,42H
CJNEA,#10,NotOver1a;到10分钟了吗?
MOV42H,#0
NotOver1a:
;以下等待按键释放及防抖动
JNBP3.4,$
CheckPQa:
JBP3.3,CheckPQ1a;小时设置键按下了吗?
没有则转去闹时状态检测
CALLDelay2
JBP3.3,CheckPQ1a
INC43H
MOVA,43H
CJNEA,#6,NotOver2a
MOV43H,#0
NotOver2a:
;以下等待按键释放及防抖动
JNBP3.3,$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CheckPQ1a:
JBP3.5,CheckPQ2a;小时设置键按下了吗?
CALLDelay2
JBP3.5,CheckPQ2a
INC44H
MOVA,45H
CJNEA,#0,JU1a
MOVA,44H
CJNEA,#10,NotOver21a
MOV44H,#0
MOVA,45H
JU1a:
CJNEA,#1,JUa
MOVA,44H
CJNEA,#10,NotOver21a
MOV44H,#0
JUa:
CJNEA,#2,NotOver21a
MOVA,44H
CJNEA,#4,NotOver21a
MOV44H,#0;到24小时则将小时清0
NotOver21a:
;以下等待按键释放及防抖动
JNBP3.5,$
CheckPQ2a:
JBP3.6,kka;小时设置键按下了吗?
CALLDelay2
JBP3.6,kka
INC45H
MOVA,44H
CJNEA,#0,E1a
MOVA,45H
CJNEA,#3,NotOver22a
MOV45H,#0
E1a:
CJNEA,#1,E2a
MOVA,45H
CJNEA,#3,NotOver22a
MOV45H,#0
E2a:
CJNEA,#2,E3a
MOVA,45H
CJNEA,#3,NotOver22a
MOV45H,#0
E3a:
CJNEA,#3,E4a
MOVA,45H
CJNEA,#3,NotOver22a
MOV45H,#0
E4a:
CJNEA,#4,E5a
MOVA,45H
CJNEA,#2,NotOver22a
MOV45H,#0
E5a:
CJNEA,#5,E6a
MOVA,45H
CJNEA,#2,NotOver22a
MOV45H,#0
E6a:
CJNEA,#6,E7a
MOVA,45H
CJNEA,#2,NotOver22a
MOV45H,#0
E7a:
CJNEA,#7,E8a
MOVA,45H
CJNEA,#2,NotOver22a
MOV45H,#0
E8a:
CJNEA,#8,E9a
MOVA,45H
CJNEA,#2,NotOver22a
MOV45H,#0
E9a:
CJNEA,#9,NotOver22