定时打铃设计报告.docx
《定时打铃设计报告.docx》由会员分享,可在线阅读,更多相关《定时打铃设计报告.docx(40页珍藏版)》请在冰豆网上搜索。
![定时打铃设计报告.docx](https://file1.bdocx.com/fileroot1/2023-2/9/3ccd5f85-ee52-4ce5-aa9b-6574688e7cee/3ccd5f85-ee52-4ce5-aa9b-6574688e7cee1.gif)
定时打铃设计报告
前言
用单片机控制的自动打铃器,充分发挥单片机体积小,价格便宜,功耗低,可靠性好等特点,可用于学校作息,方便了广大师生。
同时也可作为电子手表的设计方案,两者在原理及实现的功能上是一样的效果,也可作为各种时钟控制电路的报警装置使用,具有用途范围广,具有原理简单便于操作和维护的优点。
总体上单片机设计方案在现实中应用非常广泛,而且在现实生活中也比较容易实现设计的实施。
随着科技的发展,以单片机系统为控制中心、采用大规模集成电路生产的定时打铃产品是最新的发展趋势,具有性能稳定,走时更精确,操作简单、人性化,使用方便等特点。
它还能播放音乐乐曲,兼作电子时钟显示,其外形美观大方,亮度清晰,赏心悦目,可取代传统时钟、日历牌、挂历等。
第一章设计要求
1.1设计内容
(1)显示时钟格式:
**时**分**秒。
(2)可任意设定时间达到定时控制,定时点至少有2个。
(3)定时时间到,打铃1分钟,然后自动关闭打铃。
1.2设计要求
本次设计以8255管理键盘和显示,6位LED数码管从左到右分别显示时.分.秒(各占用2位),采用24小时标准计时制。
设置了总共10个按键,分别为时“+”键、时“-”键、分“+”键、分“-”键、4个定时点键、校时键、确定键。
分,秒加到59后变为00,减到00后变到59;小时加到23后再按键即变为00,减到00后变为23,在调校时时均不向上一单位进位(例如分加到59后变为00;但小时不发生改变)。
本设计的振铃部分则采用发光二极管代替。
1.3设计框图
(图1.1)
第二章系统组成及工作原理
2.1系统组成
通过对系统总体结构的分析,根据打铃器实际要求,采用了模块化设计,此定时打铃器主要由显示模块、校时模块和时钟运算模块三大部分组成。
显示模块主要有6只LED数码管组成,校时模块和时钟运算模块要对时、分、秒的数值进行操作,并且秒计算到60时,要自己清零并向分进1;分计算到60时,要自己清零并向时进1;时计算到24时,要清零。
时钟运算模块的主要功能是对时、分、秒的运算。
通过这些模块从而方便地实现了通过按键来校时、定时以及铃响控制。
2.2系统工作原理
定时打铃器主要由8051片内定时器定时中断,并取一存储单元作为计数器使用,每中断一次,在中断服务程序中使计数器加1,主要用8051片内定时器定时中断服务程序完成秒、分、时的运算即计时功能,8255A负责将内存里的时位、分位和秒位数值输出到数码管。
单片机不断的把定时单元内容和是时间单元内容进行比较,如果时间到则打铃。
此设计可设置有4个定时点,分别有8051的P1.0,P1.1,P1.2,P1.3来输出。
第三章系统硬件设计
3.1方案比较
对于振铃电路的设计我们拟订了两种设计方案
3.1.1方案一:
其振铃电路如下
分析:
此电路的特点是为一继电器输出接口,信号经光耦合后再经过继电器输出,当P1.0为低电平时经7407驱动后经过耦合使SPEAKER发声。
P1.0为低电平时,喇叭响,为高电平时喇叭不响,次方案的缺点是继电器的磁铁震动,造成不稳定。
a)
图3.1.1
3.2.2方案二:
其振铃电路如下
分析:
图中反相器的作用是驱动喇叭的,此方案的优点是:
硬件电路简单,稳定,实现起来方便,很适合于实现中。
而且硬件调试也简单,这样成功率会高一些。
(b)
图3.1.2
综上所述为了提高设计的可靠性及可行性我们决定采用第二种方案,这一方案非常简便,极易容易实现。
3.2单片机控制系统
单片微型计算机(Single-ChipMicrocomputer),简称单片机。
就是将微处理器(CPU)、存储器(存放程序或数据的ROM和RAM)、总线、定时器/计数器、输入/输出接口(I/O口)和其他多种功能器件集成在一块芯片上的微型计算机。
对51系列单片机来说,最小系统一般应该包括:
单片机、晶振电路、复位电路。
复位电路和晶振电路是STC89C51工作所需的最简外围电路。
基本系统电路原理图3.2:
图3.2单片机控制系统原理图
3.3显示模块设计
显示部分硬件用六只LED为显示管,这些LED发光二极管的阴极是互相连接在一起的,所以称为共阴极数码管。
通过在这6只发光二极管的阳极加+5V或0V的电压使不同的二极管发光,形成不同的数字。
该模块主要是将运算模块和校时模块运算出来并存放在内存单元里的十六进制表示的时位、分位和秒位数值转化为十进制,并通过6只数码管显示出来。
采用软件译码,即在程序中设置一个段选码表。
CPU直接往LED输出八段代码,省去了硬件译码器。
A0~A3作为8段数据输出口,经74LS07驱动后到达各LED。
只要做到每送一次段选码时也送一次位扫描码,并且每送一次位扫描码后,位码中的0左移一位作为下一次的位扫描码,即可实现由右向左使6只LED依次出现数字显示。
显示字符
显示码
显示字符
显示码
0
7EH
8
7FH
1
30H
9
7BH
2
6DH
H
37H
3
79H
E
4FH
4
33H
L
0EH
5
5BH
O
7EH
6
5FH
-
01H
7
70H
表3-1字形码表
3.4键盘模块设计
键盘显示电路主要用8255来设计而成,板面上有6个LED管,用来显示时间,8255用来控制键盘。
该模块的主要功能是输入命令,对我们要的状态进行切换,并把最终结果存到事先已经开辟的内存单元里,键盘分为四行六列,行与8255PC口低四位相连即PB0-PB3,列与8255的PA口相连,形成一个矩阵形式,一个行号和列号确定一个键的位置,便于单片机读取键值。
第四章软件设计
4.1程序设计思想
本次设计最主要的思想体现在使用了模块化的编程思想。
在确定了方案后,就仔细思考并统筹了整个程序框架,然后将其分为主程序、中断子程序、键盘扫描子程序、显示子程序、打铃子程序等几个部分来分别设计,这样不仅思路清楚,而且便于程序的编写和调试。
4.2主程序设计
主程序是整个系统软件的运行主体,各个子系统软件都必须经过它的调度,才能运行得当。
根据设计的功能要求,主程序中主要完成内存单元及定时器的初始化,显示和键盘的扫描。
部分按键说明:
A键
设定定时点1
MON键
确定键
B键
设定定时点2
F1/LS键
时加‘+1’键
C键
设定定时点3
STEP键
时加‘-1’键
D键
设定定时点4
RG/FS键
分加‘+1’键
F2/NX键
校时键
SCAL键
分加‘-1’键
表4-1
4.2.1主程序流程图
根据设计所规定要求,定时打铃器设计的流程图如图4.1所示。
(图4.1)主程序流程图
4.3子程序设计
根据这次模块化的设计思想,总共分成了按键处理子程序、中断服务程序、显示子程序三个部分。
4.3.1按键处理子程序
按键处理子程序主要包括读键值处理、数字键处理、校时键处理、定时键处理、确认键处理等,其流程图如图4.2所示:
4.3.2定时中断服务程序设计
本次中断服务程序设计中用了T0定时中断,其流程图如图4.3所示:
1、定时器初值分析
T0定时最长时间约为130ms,可用T0产生100ms的定时,再通过计时10次就可达到1s。
设定时初值为X(2^16-X)*2μs=100ms,得X=3CB0H.即TH0=3CH,TL0=B0H。
图4.3定时中断服务程序流程图
4.3.3显示子程序设计
这次显示电路DIR处理很简单,主要是通过一个子程序将30H、31H、32H单元中的内容“分割”到显缓区40H到45H中,从而调用DIR显示,其流程图如图4.4所示:
图4.4显示程序流程图
第五章调试与结果分析
本次系统调试共分为硬件调试和软件调试两部分,硬件调试用来测试硬件电路设计是否合理以及电线连接正确性;软件调试则测试软件设计的程序代码是否有语法错误及能否实现所要求的功能。
由于实验时硬件用的是实验箱,内部电路已经连接正确,所以硬件几乎不用调试。
在软件调试中,也采用了模块化的思想进行调试。
软件调试是整个系统调试的核心部分,花的时间最长。
首先,对各个模块分别调试。
将编写好的源程序输入电脑,编译后出现很多错误,这些错误有许多时平时的实验遇到过的,于是和同组人员一起进行逐条跟踪法,对每条程序检查。
其中有输入的符号格式不正确,零和字母O弄混淆了,字母写错等原因。
经过一番思考后,采用了单步调试及断点运行等方法后,发现最致命的错误是:
程序中出现了死循环。
经调整修改程序,这些问题都解决了。
第二次上机调试时,可以正确显示时钟和打铃一分钟,但是按键无效,又经过仔细的分析,发现调用按键子程序时出现了错误,最终这个问题解决了。
第三次上机调试比较成功,可以满足所有的基本要求。
第1、在调试前,编了一个小程序读出最小系统板的键码值,根据键值确定了各个按键的功能。
第2、之后,就是对按键子程序调试。
在调试的过程中,涉及到的键的去抖及一键多功能的问题,采用了单步调试及断点运行等方法后,很快调试正确了。
通过同组人几天的合作以及向一些其他同学的请教最终所有的程序都调试正确了。
总结
经过两个星期的单片机电子打铃的课题的设计,我从中学到了很多东西。
如:
如何设计硬件电路,如何编写、调试软件程序等。
这使我受益非浅,感受很深。
这不仅使我重温了单片机的基本结构及工作原理,接口技术,而且进一步熟悉了如何使用单片机汇编语言编写程序和调用程序的方法与技巧。
能够熟练地对小键盘进行操作,对单片机常用的几种芯片也有了更深一步的了解,而且学会了如何利用计算机进行程序汇编和写入程序存储进行调试,使我对整个制作流程有了深刻的了解和体会。
特别是认识到使用单片机进行软件、硬件的开发过程中应注意设计要求、经过及解决一些客观存在问题的重要性及其意义。
在电子打铃课题的设计制作过程使我们对单片机的设计、开发产生了更加深厚的兴趣,但是也遇到了很多问题和挫折,然而经过自己不断的探索和请教学习后,还是将它们一一解决,并得到了很多很深刻的教训和许多宝贵经验,找出自身整个设计过程中所存在的问题,并认识到自己在以后应该怎样去克服它们。
在整个设计过程中我的动手能力与解决问题的能力也进一步提高。
虽本次设计中我走了不少的弯路,吃了不少的苦头。
但是,我从中得到了更多。
使我对单片机的开发产生了浓厚的兴趣,对我的将来充满斗志和信心。
我相信,将来的社会,只要能想到的就能做。
因为科技无边,智慧无限。
我相信我们的能力。
参考文献:
[1]张友德、赵志英、涂时亮.单片微型机原理、应用与实验.上海.复旦大学出版社,2008年5月.
[2]吴开志、陈黎娟、邓谦、任爱山.单片机技术及应用实验指导书.南昌.南昌航空大出版社,2008年.
[3]吴清绣.微型计算机原理及接口技术.北京.中国科学技术大学出版社,2004年.
[4]吴向军.汇编语言程序设计.北京.高等教育出版社,2001年.
[5]贾金铃.微型计算原理及应用.重庆.重庆大学出版2006年
[6]胡汉才.单片机原理及其接口技术.北京.清华大学出版社.2004年.
附录一:
程序清单及注释:
ORG0000H;主程序入口地址
LJMPMAIN
ORG000BH;定时器入口地址
LJMPINT
MAIN:
MOVSP,#67H
MOVTMOD,#01H;定时器0选择方式1作为时钟信号
MOVIE,#8AH;中断控制IE设为8A
MOVTH0,#3CH;定时器0初始化,赋给初始值
MOVTL0,#0B0H
MOV30H,#23H;时
MOV31H,#59H;分
MOV32H,#50H;秒
MOV33H,#00H;33H清0
MOV34H,#1AH;定时1的显缓单元
MOV35H,#00H
MOV36H,#00H
MOV37H,#2AH;定时2的显缓单元
MOV38H,#00H
MOV39H,#00H
MOV3AH,#3AH;定时3的显缓单元
MOV3BH,#00H
MOV3CH,#00H
MOV3DH,#4AH;定时4的显缓单元
MOV3EH,#00H
MOV3FH,#00H
MOV40H,#0BAH;时显缓单元
MOV41H,#00H
MOV42H,#00H
MOV43H,#00H
MOV79H,#00H
MOV7AH,#00H
MOV7BH,#00H
MOV44H,#00H
MOVR0,#79H;将显缓单元79H给R0
MOVR3,#06H;存储循环次数
XQ:
MOV@R0,#00H
INCR0
DJNZR3,XQ;循环六次
MOVR3,#06H
MOVR0,#79H
CLR08H
CLR09H
CLR00H
CLR0AH
CLR0BH;关闭定时器标志
CLR0CH
CLR0DH
CLR0EH
CLR0FH ;调时屏蔽10号键
SETBTR0;启动定时器0
MAN:
LCALLBJ
MOVA,44H;A=00H
CPLA;A=FFH
LCALLKEYS;调用键盘扫描子程序
MOVA,B
CJNEA,#0FFH,D1;A不等于FFH则转移
JB09H,D8;09H等于01H则转移
LCALLTM
JMPMAN
D1:
SETB09H;09H置1
DECA
MOVR7,A
RLA
ADDA,R7;A=3A2
MOVDPTR,#PMTAB
JMP@A+DPTR
D8:
LCALLDISP;调用数码管显示子程序
LJMPMAN
PMTAB:
LJMPPM0
LJMPPM1
LJMPPM2
LJMPPM3
LJMPPM4
LJMPPM5
LJMPPM6
LJMPPM7
LJMPPM8
LJMPPM9
LJMPPM10
PM0:
CLR0FH
SETB0AH;0AH单元置1
MOV43H,#01H
MOVR1,#36H
LCALLTM0
LJMPD8
PM1:
CLR0FH
SETB0AH;0AH单元置1
MOV43H,#02H
MOVR1,#39H
LCALLTM0
LJMPD8
PM2:
CLR0FH
SETB0AH
MOV43H,#03H
MOVR1,#3CH
LCALLTM0
LJMPD8
PM3:
CLR0FH
SETB0AH
MOV43H,#04H
MOVR1,#3FH
LCALLTM0
LJMPD8
PM4:
SETB0FH
SETB0AH
MOV43H,#05H
MOV42H,31H
MOV41H,30H
MOVR1,#42H
LCALLTM0
LJMPD8
PM5:
SETBTR0
CLR0AH
CLR09H
LJMPMAN
PM6:
JB0AH,GGG
CLR09H
LJMPD8
GGG:
MOVA,43H
DECA
MOVR7,A
RLA
ADDA,R7
MOVDPTR,#PMTAB2
JMP@A+DPTR
PMTAB2:
LJMPPC0
LJMPPC1
LJMPPC2
LJMPPC3
LJMPPC4
PC0:
MOVA,35H;定时0,设定24小时制时的显示
CJNEA,#23H,TY3
TY3:
JCTY
CLRA
JMPTY1
TY:
ADDA,#01H
DAA
TY1:
MOV35H,A
MOVR1,#36H
LCALLTM0
LJMPD8
PC1:
MOVA,38H;定时1,设定24小时制时的显示
CJNEA,#23H,TP3
TP3:
JCTP
CLRA
JMPTP1
TP:
ADDA,#01H
DAA
TP1:
MOV38H,A
MOVR1,#39H
LCALLTM0
LJMPD8
PC2:
MOVA,3BH;定时2,设定24小时制时的显示
CJNEA,#23H,TB3
TB3:
JCTB
CLRA
LJMPTB1
TB:
ADDA,#01H
DAA
B1:
MOV3BH,A
MOVR1,#3CH
LCALLTM0
LJMPD8
PC3:
MOVA,3EH;定时3,设定24小时制时的显示
CJNEA,#23H,TW3
TW3:
JCTW
CLRA
JMPTW1
TW:
ADDA,#01H
DAA
TW1:
MOV3EH,A
MOVR1,#3FH
LCALLTM0
LJMPD8
PC4:
MOVA,41H;定时4,设定24小时制时的显示
CJNEA,#23H,TE3
TE3:
JCTE
CLRA
JMPTE1
TE:
ADDA,#01H
DAA
TE1:
MOV41H,A
MOVR1,#42H
CLRTR0
MOV31H,42H
MOV30H,41H
MOV32H,#00H
MOV33H,#00H
LCALLTM0
LJMPD8
PM7:
JB0AH,GGG1
CLR09H
LJMPD8
GGG1:
MOVA,43H
DECA
MOVR7,A
RLA
ADDA,R7
MOVDPTR,#PMTAB1
JMP@A+DPTR
PMTAB1:
LJMPPN0
LJMPPN1
LJMPPN2
LJMPPN3
LJMPPN4
PN0:
MOVA,35H
CJNEA,#00H,TU
MOVA,#23H
JMPTU1
TU:
MOV79H,A
DECA
ADDA,#00H
DAA
CJNEA,79H,TU3
TU3:
JCTU1
SUBBA,#0CH
TU1:
MOV35H,A
MOVR1,#36H
LCALLTM0
LJMPD8
PN1:
MOVA,38H
CJNEA,#00H,TG
MOVA,#23H
JMPTG1
TG:
MOV79H,A
DECA
ADDA,#00H
DAA
CJNEA,79H,TG3
TG3:
JCTG1
SUBBA,#0CH
TG1:
MOV38H,A
MOVR1,#39H
LCALLTM0
LJMPD8
PN2:
MOVA,3BH
CJNEA,#00H,EK
MOVA,#23H
JMPEK1
EK:
MOV79H,A
DECA
ADDA,#00H
DAA
CJNEA,79H,EK3
EK3:
JCEK1
SUBBA,#0CH
K1:
MOV3BH,A
MOVR1,#3CH
LCALLTM0
LJMPD8
PN3:
MOVA,3EH
CJNEA,#00H,EB
MOVA,#23H
JMPEB1
EB:
MOV79H,A
DECA
ADDA,#00H
DAA
CJNEA,79H,EB3
EB3:
JCEB1
SUBBA,#0CH
EB1:
MOV3EH,A
MOVR1,#3FH
LCALLTM0
LJMPD8
PN4:
MOVA,41H
CJNEA,#00H,EY
MOVA,#23H
JMPEY1
EY:
MOV79H,A
DECA
ADDA,#00H
DAA
CJNEA,79H,EY3
EY3:
JCEY1
SUBBA,#0CH
EY1:
MOV41H,A
MOVR1,#42H
CLRTR0
MOV31H,42H
MOV30H,41H
MOV32H,#00H
MOV33H,#00H
LCALLTM0
LJMPD8
PM8:
JB0AH,GGG2
CLR09H
LJMPD8
GGG2:
MOVA,43H
DECA
MOVR7,A
RLA
ADDA,R7
MOVDPTR,#PMTAB3
JMP@A+DPTR
PMTAB3:
LJMPPD0
LJMPPD1
LJMPPD2
LJMPPD3
LJMPPD4
PD0:
MOVA,36H
CJNEA,#59H,TTT3;定时0,设定24小时制分的显示
TTT3:
JCTTT
CLRA
JMPTTT1
TTT:
ADDA,#01H
DAA
TTT1:
MOV36H,A
MOVR1,#36H
LCALLTM0
LJMPD8
PD1:
MOVA,39H;定时1,设定24小时制分的显示
CJNEA,#59H,AF3
AF3:
JCAF
CLRA
JMPAF1
AF:
ADDA,#01H
DAA
AF1:
MOV39H,A
MOVR1,#39H
LCALLTM0
LJMPD8
PD2:
MOVA,3CH;定时2,设定24小时制分的显示
CJNEA,#59H,YY3
YY3:
JCYY
CLRA
JMPYY1
YY:
ADDA,#01H
DAA
YY1:
MOV3CH,A
MOVR1,#3CH
LCALLTM0
LJMPD8
PD3:
MOVA,3FH;定时3,设定24小时制分的显示
CJNEA,#59H,AS3
AS3:
JCAS
CLRA
JMPAS1
AS:
ADDA,#01H
DAA
AS1:
MOV3FH,A
MOVR1,#3FH
LCALLTM0
LJMPD8
PD4:
MOVA,42H;定时4,设定24小时制分的显示
CJNEA,#59H,HZ3
HZ3:
JCHZ
CLRA
JMPHZ1
HZ:
ADDA,#01H
DAA
HZ1:
MOV42H,A
MOVR1,#42H
CLRTR0
MOV31H,42H
MOV30H,41H
MOV32H,#00H
MOV33H,#00H
LCALLTM0
LJMPD8
PM9:
JB0AH,GGG3
CLR09H
LJMPD8
GGG3:
MOVA,43H
DECA
MOVR7,A
RLA
ADDA,R7
MOVDPTR,#PMTAB5
JMP@A+DPTR
PMTAB5:
LJMPPQ0
LJMPPQ1
LJMPPQ2
LJMPPQ3
LJMPPQ4
PQ0: