定时闹钟实验报告文档格式.docx
《定时闹钟实验报告文档格式.docx》由会员分享,可在线阅读,更多相关《定时闹钟实验报告文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
其组合而成的配件产品在日常生活的使用过程中非常方便、简单且实用,深受着广大消费者的喜爱。
AT89C51管脚说明如下:
:
供电电压端。
接地端。
P0口:
P0口为三态双向口,能带8个TTL电路。
有两种功能:
第一功能是一个8位漏极开路型的双向I/O口,这时P0口可看做数据总线;
第二功能是在访问外部存储器时,分时提供低8位地址和8位双向数据总线,这时先用做地址总线再用做数据总线。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P0口内部无上拉电阻,作为I/O口使用时,必须外接上拉电阻。
P1口:
P1口是一个内部带上拉电阻的8位准双向I/O口(使用前有一个准备动作),负载能力为4个TTL电路。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部带上拉电阻的8位准双向I/O口,P2口缓冲器可接收、输出4个TTL门电流。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口是一个内部带上拉电阻的准双向I/O口,可接收输出4个TTL门电流。
同时为闪烁编程和编程校验接收一些控制信号。
P3口的8个引脚都有各自的第二功能,可作为AT89C51的一些特殊功能口,如表1所示。
表1P3口第二功能
P3口引脚
第二功能
注释
P3.0
串行输入口
P3.1
串行输出口
P3.2
外部中断0输入
P3.3
外部中断1输入
P3.4
定时/计时器0外部输入
P3.5
定时/计时器1外部输入
P3.6
外部数据存储器写信号
P3.7
外部数据存储器读信号
为复位信号输入端。
当振荡器复位器件时,要保持RST脚两个机器周期(24个时钟周期)以上的高电平时间。
为内部
的备用电源输入端。
当主电源
一旦发生断电或电压降到一定值时,可通过
为单片机内部
提供电源,以保护片内
中的信息不丢失,使
上电后能继续正常运行。
为地址锁存允许信号,当访问外部存储器时,
用来锁存
口送出的低8位地址信号。
在
编程期间,
用于输入编程脉冲。
在平时,
端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个
脉冲。
如想禁止
的输出可在
的8EH地址上置0。
此时,
只有在执行MOVX,MOVC指令时才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态
禁止,置位无效。
外部程序存储器的读选通信号。
在由外部程序存储器取指期间,
产生负脉冲做为外部
的选通信号,每个机器周期两次
有效。
但在访问外部数据存储器时,不会产生有效的
信号。
可驱动8个
门输入端。
访问外部程序存储器控制信号。
当
保持低电平时,则在此期间只访问外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,
将内部锁定为
。
端保持高电平时,
访问程序存储器有两种情况:
一是访问的地址空间在0到4KB范围内,
访问片内程序存储器;
二是访问的地址超出4KB时,
将自动执行外部程序存储器的程序。
编程期间,此引脚也用于施加12V编程电源(
)。
晶体振荡电路的反向器输入端。
晶体振荡电路的反向器输出端。
DIP封装的AT89C51管脚排列如图2所示。
图2AT89C51的管脚排列
(2)时钟电路
单片机的时钟产生方法有两种:
内部时钟方式和外部时钟方式。
本系统中AT89C51单片机采用内部时钟方式。
最常用的内部时钟方式是采用外接晶体和电容组成的并联谐振回路。
振荡晶体可在1.2MHz~12MHz之间。
电容值无严格要求,但电容取值对振荡频率输出的稳定性、大小和振荡电路起振速度有少许影响,一般可在20pF~100pF之间取值。
AT98C51单片机的时钟电路如图3所示。
图3AT98C51单片机的时钟电路
(3)复位电路
复位是单片机的初始化操作。
单片机系统在上电启动运行时,都需要先复位。
其作用是使CPU和系统中其他部件都处于一个确定的初始状态,并从这个状态开始工作。
单片机的外部复位电路有上电自动复位和按键手动复位两种。
本系统中AT89C51单片机采用上电加按键手动复位电路,如图4所示。
图4AT89C51单片机的复位电路
2.3.2报警模块设计
为实现设计的定时闹钟系统在定时时间到时发出报警声,采用蜂鸣器作为报警发声装置。
在本设计中有多种报警声可供选择,可选择报警时播放音乐。
报警电路设计如图5所示。
图5定时闹钟系统的报警电路
2.3.3显示模块设计
本系统中采用6位LED数码管显示时、分、秒,用两片74HC573分别对段码和位码进行锁存,实现动态扫描方式显示,节省单片机I/O口资源,简化硬件电路。
(1)LED显示器
单片机中通常使用8段LED,LED是发光二极管显示器的缩写。
LED显示器由于结构简单,价格便宜,体积小,亮度高,电压低,耐温范围广,可靠性高,寿命长,响应速度快,颜色鲜艳,配置灵活,与单片机接口方便而得到广泛应用。
LED显示器是由若干个发光二极管组成显示字段的显示部件,当发光二极管导通时,相应的一个点或一个笔划发光,控制不同组合的二极管导通,就能显示出各种字符。
LED显示器有多种形式,如:
“米”字型显示器,点阵显示器和七段数码显示器等。
在本系统中采用八段数码显示器。
因为共阴极的LED数码管它的驱动电流是分开的,在单片机进行动态扫描的时候不会影响彼此的电流,故本系统中的6位LED数码管均用共阴极的数码管。
(2)74HC573芯片
特点:
三态总线驱动输出,置数全并行存取,缓冲控制输入,使能输入有改善抗扰度的滞后作用。
原理说明:
74HC573的八个锁存器都是透明的D型锁存器,当使能(G)为高时,Q输出将随数据(D)输入而变。
当使能为低时,输出将锁存在已建立的数据电平上。
输出控制不影响锁存器的内部工作,即老数据可以保持,甚至当输出被关闭时,新的数据也可以置入。
这种电路可以驱动大电容或低阻抗负载,可以直接与系统总线接口并驱动总线,而不需要外接口。
特别适用于缓冲寄存器,I/O通道,双向总线驱动器和工作寄存器。
74HC573引脚说明:
OE:
3态输出使能输入(低电平有效)。
D0-D7:
数据输入端。
Q0-Q7:
3态锁存输出。
LE:
锁存使能输入。
GND:
接地。
VCC:
电源电压。
74HC573的引脚图、逻辑图及真值表如下:
图6
74HC573引脚图
图774HC573逻辑图
表274HC573真值表
OE
LE
D
Q
H
X
Z
L
NOCHANGE
(3)显示电路
将两片74HC573的数据输入端D0-D7都分别与AT89C51单片机的P0.0-P0.7和RESPACK-8排阻的2-9引脚连接,两片74HC573的锁存使能端L分别接至P2.6和P2.7,74HC573的输出端接至数码管,如图8所示。
图8定时闹钟系统的显示电路
2.3.4调时模块设计
本系统要进行时间的调整和定时,因此用4个手动按键对其进行控制。
键盘电路设计如图9所示。
当按下时间调整键S1时,系统可进行时间调整的小时设置;
当再按下S1时,可进行时间调整的分钟设置;
再按下S1时,可进行时间调整的秒钟设置;
再次按下S1时,系统恢复正常时间显示。
当按下设置定时键S2时,系统可进行闹钟定时时间的小时设置,此时S1作为报警声选择键,可通过S1选择报警声;
再按下S2时,可进行定时时间的分钟设置,此时也可通过S1选择报警声;
第三次按下S2时,系统恢复正常时间显示,此时S1恢复为时间调整按键。
设置时间时都通过加时按键S3和减时按键S4进行控制。
图9定时闹钟系统的键盘电路
三、软件设计
3.1主程序流程图
图10主程序流程图
3.2定时中断子程序流程图
图11定时中断子程序流程图
3.3程序设计
根据程序流程图采用汇编语言进行程序设计,其中主程序可根据系统实现的功能划分为以下几个子程序模块。
(程序源代码见附录1)
(1)时间调整子程序模块;
(2)闹钟时间设置子程序模块;
(3)蜂鸣器报警子程序模块;
(4)数码管显示子程序模块。
四、系统的仿真与调试
4.1proteus软件仿真
使用WAVE软件编辑程序,在仿真设置中选择E6000/T仿真器,选择POD-51仿真头。
为方便系统在proteus中进行仿真,选择了7SEG-MPX6-CC-BLUE数字显示器,并改变了一些I/O连接,如图12所示,然后选择80C51CPU进行汇编程序编辑。
经过仿真得知,通过S1、S2、S3和S4四个按键,可以对时间进行修改和闹钟的设置,定时时间到能发出报警声,系统非常完善地实现了所有要求的功能。
图12系统的proteus仿真图
4.2系统的调试
将所编程序在KEIL软件里进行编译,编译正确后生成HEX文件。
在AT89C51芯片中加载此文件后,对完成的实物作品进行调试。
系统运行后,能准确的显示时间,并能通过S1、S2、S3和S4四个按键对时间进行修改和闹钟定时时间的设置,定时时间到能发出报警声。
五、设计总结与体会
设计是培养学生综合运用所学知识,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域,在生活中可以说得是无处不在,作为二十一世纪的大学生来说掌握单片机的开发技术是十分重要的。
通过本次单片机原理及应用设计使我充分认识到了设计的重要性和必要性,本次设计使我对已学过的基础知识有了更深入的理解,学会了独立思考、独立工作以及对应用所学基本理论分析和解决实际问题的能力有了很大的提高。
另外,本次设计使我的实际操作技能得到了训练,同时也进一步培养了我严谨的科学作风。
回顾起此次单片机课程设计,从选题到定稿,从理论到实践,可以说得是有苦有甜,但是从中却学到很多很多的的东西,不但巩固了以前所学过的知识,而且对单片机原理课外知识也得到了拓展。
做的过程中,开始的确遇到了不少困难的问题,比如说芯片管脚不熟悉怎么放置等,同时在这过程中也发现了自己的许多不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
通过单片机设计之后,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我们还学会了如何去培养创新精神和严谨的科学作风,从而不断地战胜自己,超越自己。
更重要的是,我在这一设计过程中,学会了坚持不懈,绝不放弃。
附录1:
源程序代码
1、汇编语言程序:
;
************引脚及变量定义***************
S1BITP3.2;
按键1
S2BITP3.3;
按键2
S3BITP3.4;
按键3
S4BITP3.5;
按键4
SPEAKERBITP2.0;
蜂鸣器
DULABITP2.6;
段选锁存器锁存端
WELABITP2.7;
位选锁存器锁存端
HOUR1EQU20H;
小时
MIN1EQU21H;
分钟
SEC1EQU22H;
秒钟
HOUR2EQU23H;
小时定时变量
MIN2EQU24H;
分钟定时变量
A1EQU25H;
显示变量
B1EQU26H
C1EQU27H
D1EQU28H
E1EQU29H
F1EQU30H
A2EQU31H
B2EQU32H
C2EQU33H
D2EQU34H
NUM1EQU35H;
按键计数变量1
NUM2EQU36H;
按键计数变量2
COUNTEQU37H;
计时变量
ORG0000H
LJMPMAIN
ORG000BH
LJMPTIME
************MAINPROGRAM***************
ORG1000H
MAIN:
MOVSP,#50H
START:
MOVHOUR1,#00H;
初始化时间变量
MOVMIN1,#00H
MOVSEC1,#00H
MOVHOUR2,#01H;
初始化定时变量
MOVMIN2,#01H
MOVCOUNT,#00H;
初始化计时变量
MOVNUM1,#00H;
初始化按键计数变量
MOVNUM2,#00H
MOVTMOD,#01H;
16位计数器
MOVTH0,#0D8H;
赋初值
MOVTL0,#0EFH
SETBET0;
中断允许
SETBEA
SETBTR0;
启动T0
LOOP:
MOVA,NUM2
JNZLOOP1;
A不为0时转移
LCALLDISPLAY1;
显示当前时间
LCALLKEYTIME;
调用时间调整子程序
LCALLSETTIME;
调用定时设置子程序
LJMPLOOP
LOOP1:
LCALLDISPLAY2;
显示定时时间
调用定时设置子程序
LJMPLOOP
************SETTIMEPROGRAM***************
SETTIME:
;
定时设置子程序
LL1:
JBS2,LL3;
P3.3=1时转移
LCALLDELAY5;
延时5MS
MSTOP1:
JBS2,LL3;
P3.3=1时转移
MOVC,S2
JNCMSTOP1;
P3.3=0时转移
INCNUM2;
按键计数变量加1
MOVA,NUM2
CJNEA,#1,LL2;
判断按键计数是否为1
CLRTR0;
定时器中断关闭
LL2:
CJNEA,#3,LL;
判断按键计数是否为3
MOVNUM2,#0;
按键计数变量清0
SETBTR0;
定时器中断打开
LL:
LCALLDISPLAY2;
LL3:
JZLL5;
A为0时转移
JBS3,KK2;
P3.4=1时转移
LCALLDELAY5;
KK1:
JBS3,KK2;
P3.4=1时转移
MOVC,S3
JNCKK1;
P3.4=0时转移
CJNEA,#1,MM1;
INCHOUR2;
小时定时变量加1
MOVA,HOUR2
CJNEA,#24,MM1;
判断小时定时变量是否为24
MOVHOUR2,#0;
小时定时变量为24则复位0
MM1:
LCALLDISPLAY2;
CJNEA,#2,KK2;
判断按键计数是否为2
INCMIN2;
分钟定时变量加1
MOVA,MIN2
CJNEA,#60,KK2;
分钟定时变量是否为60
MOVMIN2,#0;
分钟定时变量为60则复位0
KK2:
JBS4,LL5;
P3.5=1时转移
KK3:
MOVC,S4
JNCKK3;
P3.5=0时转移
CJNEA,#1,MM2;
DECHOUR2;
小时定时变量减1
CJNEA,#0,MM2
MOVHOUR2,#24
MM2:
CJNEA,#2,LL5;
DECMIN2
MOVA,MIN2;
分钟定时变量减1
CJNEA,#0,LL5
MOVMIN2,#60
LL5:
RET
************KEYTIMEPROGRAM***************
KEYTIME:
时间调整子程序
L1:
JBS2,L3;
P3.2=1时转移
LCALLDELAY5;
MSTOP2:
JBS2,L3;
P3.2=1时转移
JNCMSTOP2;
P3.2=0时转移
INCNUM1
MOVA,NUM1
CJNEA,#1,L2;
CLRTR0;
L2:
CJNEA,#4,L3;
判断按键计数是否为4
MOVNUM1,#0
SETBTR0;
L3:
JNZFF;
LJMPL5
FF:
JBS3,K2;
K1:
JBS3,K2;
MOVC,S3
JNCK1;
CJNEA,#1,M1;
INCHOUR1;
小时设置加1
MOVA,HOUR1
CJNEA,#24,M1
MOVHOUR1,#0
LCALLDISPLAY1;
显示调整时间
M1:
LCALLDISPLAY1;
CJNEA,#2,M2;
INCMIN1;
分钟设置加1
MOVA,MIN1
CJNEA,#60,M2
MOVMIN1,#0
LCALLDISPLAY1;
M2:
MOVA,NUM1
CJNEA,#3,K2;
INCSEC1
MOVA,SEC1
CJNEA,#60,K2
MOVSEC1,#0
K2:
JBS4,L5;
K3:
JBS4,L5;
MOVC,S4
JNCK3;
CJNEA,#1,M3;
DECHOUR1
MOVA,HOUR1
CJNEA,#0,M3
MOVHOUR1,#24
M3:
CJNEA,#2,M4;
DECMIN1
CJNEA,#0,M4
MOVMIN1,#60
M4:
CJNEA,#3,L5;