c51单片机电子时钟报告解析.docx
- 文档编号:29516874
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:27
- 大小:1.10MB
c51单片机电子时钟报告解析.docx
《c51单片机电子时钟报告解析.docx》由会员分享,可在线阅读,更多相关《c51单片机电子时钟报告解析.docx(27页珍藏版)》请在冰豆网上搜索。
c51单片机电子时钟报告解析
电子时钟实验报告
一,实验目的
1.学习8051定时器时间计时处理、按键扫描及LED数码管显示的设计方法。
2.设计任务及要求利用实验平台上4个LED数码管,设计带有闹铃功能的数字时钟
二,实验要求
1、准确计时,以数字形式显示时、分、秒的时间。
2、小时以24小时计时形式,分秒计时为60进位。
3、校正时间功能,即能随意设定走时时间。
4、设计5V直流电源,系统时钟电路、复位电路。
三,实验基本原理
1、STC89C51单片机介绍
STC89C51单片机是由深圳宏晶公司代理销售的一款MCU,是由美国设计生产的一种低电压、高性能CMOS8位单片机,片内含8kbytes的可反复写的FlashROM和128bytes的RAM,2个16位定时计数器[5]。
STC89C51单片机内部主要包括累加器ACC(有时也简称为A)、程序状态字PSW、地址指示器DPTR、只读存储器ROM、随机存取存储器RAM、寄存器、并行I/O接口P0~P3、定时器/计数器、串行I/O接口以及定时控制逻辑电路等。
这些部件通过内部总线联接起来,构成一个完整的微型计算机。
其管脚图如图所示。
STC89C51单片机管脚结构图
VCC:
电源。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
2、上电按钮复位电路
本设计采用上电按钮复位电路:
首先经过上电复位,当按下按键时,RST直接与VCC相连,为高电平形成复位,同时电解电容被电路放电;按键松开时,VCC对电容充电,充电电流在电阻上,RST依然为高电平,仍然是复位,充电完成后,电容相当于开路,RST为低电平,单片机芯片正常工作。
其中电阻R2决定了电容充电的时间,R2越大则充电时间长,复位信号从VCC回落到0V的时间也长。
3、晶振电路
本设计晶振电路采用12M的晶振。
晶振的作用是给单片机正常工作提供稳定的时钟信号。
单片机的晶振并不是只能用12M,只要不超过20M就行,在准许的范围内,晶振越大,单片机运行越快,还有用12M的就是好算时间,因为一个机器周期为1/12时钟周期,所以这样用12M的话,一个时钟周期为12us,那么定时器计一次数就是1us了,电容范围在20-40pF之间,这里连接的是30pF的电容。
机器周期=10*晶振周期=12*系统时钟周期
四,实验设计分析
设计用到的STC89C52单片机芯片的ISP下载线是通过单片机的TXD,RXD引脚把程序烧进去的。
管脚TXD和RXD用于异步串行通信。
其实STC89C52单片机的ISP下载线就是一个max232芯片连接STC和计算机的串行通信口。
计算机把程序从九针串口送到max232芯片,电平转换后送进单片机的串行口,也就是TXD和RXD。
然后单片机的串行模块把数据送到程序区。
五,实验要求实现
A.电路设计
1.整体设计
此次设计主要是应用单片机来设计电子时钟,硬件部分主要分以下电路模块:
显示电路用8个共阴数码管分别显示,星期(年份),小时、分钟(月份)和秒(日),通过动态扫描进行显示,从而避免了译码器的使用,同时节约了I/0端口,使电路更加简单。
单片机采用AT89S51系列,这种单片机应用简单,适合电子钟设计。
电路的总体设计框架如下:
2.分块设计
模块电路主要分为:
输入部分、输出部分、复位和晶振电路。
2.1输入部分
输入信号主要是各种模式选择和调整信号,由按键开关提供。
以下为输入部分样例:
在本实验中主要用用P3口输入按键信号,还用到了特殊的P0口。
对于P0口,由于其存在高阻状态,为了实现开关功能,给其添加上拉电阻,具体如下图所示:
2.2输出部分
本电路的输出信号为7段数码管的位选和段选信号,闹铃脉冲信号,提示灯信号。
本实验的数码管是共阴的,为了防止段选信号不能驱动数码管,故在P1口连接上拉电阻后,再送段选信号,以提高驱动,位选信号直接从P2口接入,如下图:
闹铃由P2.6端输出,模块如下:
2.3晶振与复位电路
本实验单片机时钟用内部时钟,模块如下:
复位电路为手动复位构成,模块如下:
各模块拼接组合,电路总体设计图如下:
B.程序设计
B.1程序主要模块
B.1.1延时模块
数码管显示动态扫描时,用到延时程序,这里使用延迟1ms的程序,此程序需要反复调用程序如下:
D_1MS:
MOVR7,#2
D_5:
MOVR2,#250
DJNZR2,$
DJNZR7,D_5
RET
除数码管动态扫描外,数码管的闪烁提示,以及音乐模块也用到了延时,只是延时的长短不同罢了,在此不再赘述。
B.1.2中断服务程序
本实验中,计数器T0,T1中断都有运用,其中T0中断为时钟定时所用,T1中断用于音乐播放。
T0的定时长度为0.01s,工作于方式1,计数1次,时长1us,故计数器计数10000次,进入中断,计数初值为65536-10000=55536=#0D8F0,装满定时器需要0.01s的时间,从而100次中断为一秒,一秒之后,判断是否到60秒,若不到则秒加一,然后返回,若到,则秒赋值为0,分加一,依次类推。
包括日期显示的功能也是如此。
另外,由于要实现倒计时功能,因此在中断程序中还要加入减一的寄存器,需要时将其进行显示。
基于以上考虑,以R3为倒计时中的秒,R4为倒计时的分,当秒加1时R3减一,减到0之后,秒赋值为59,分减一,直到分为0。
本实验用8个数码管,刚好能显示年,月,日,扫描显示与时间的扫描显示类似。
年比较特殊,由两个寄存器存储,个位,十位为0时,表明年数能被100整除,若此时千位,百位
组成两位数能被4整除,则年数被400整除,为闰年。
若十位,个位组成两位数能被4整除,则年数能被4整除,为闰年。
B.1.3主程序
主程序主要对按键进行扫描,以及判断定时和闹铃时间是否已到,若到则调用相关程序,该段程序如下:
MAIN:
JNBP3.0,DATETZ;按下0键,显示日期并可对日期进行调整
JNBP3.1,ZSTZ1;按下1键,显示时间,并可调时
JNBP3.2,NLTZZ;按下2键,进行闹铃设置
JNBP3.3,DSTZ;按下3键,进行定时设置
JNBP3.4,CESHI;闹铃测试
JNBP3.6,STOPWATCHTZ;按下6键,进入秒表方式
ACALLDISP;调用时钟显示子程序
JNBP0.6,RERING;判断是否开启闹铃重响功能
RE:
JNBP2.7,DSPDKQ;判断是否开启闹铃功能,没开则去判断定时
FMQPD:
;判断定时值R4,R3是否到零、闹铃时刻是否已到
MOVA,HOUR;
SUBBA,38H;
JZFEN;判断小时数是否到闹铃所定时间,若到,则对分进行判断;若不到,则对定时进行判断
AJMPDSPDKQ
FEN:
MOVA,MINUTE;
SUBBA,37H;
JZMIAO;判断分是否到闹铃所定时间,若到,则对秒进行判断;若不到,则对定时进行判断
AJMPDSPDKQ
MIAO:
MOVA,SECOND
SUBBA,#0
JZSHENGYIN1;判断秒是否到闹铃所定时间,若到,则时,分,秒都到达闹铃时刻,进入响铃子程序;若不到则判断定时
AJMPDSPDKQ
RERING:
;闹铃重响判断程序
JNBF0,RE;标志位F0为0,不进行闹铃重响设定
CPLF0
MOV3CH,#1;定时判断标志位赋1,定时判断功能开启
JNBP0.7,M1;闹铃重响间隔时间选取
MOVR4,#0;闹铃重响间隔30秒
MOVR3,#30
AJMPMAIN
M1:
;闹铃重响间隔60秒
MOVR4,#1
MOVR3,#0
AJMPMAIN
DSPDKQ:
;判断是否应该进行定时判断
MOVA,3CH;3CH是引入的判断因子,当其为0时,不对定时时间是否到0进行判断
JNZDSPD2;当3CH不是0时,跳转到定时判断程序
AJMPMAIN
DSPD2:
MOVA,R4;
JZS_PD;R4所存定时分数为0,则转而判断R3所存定时秒数
AJMPMAIN;
S_PD:
MOVA,R3;
JNZMAIN;R4,R3所存参数减为0,定时长度已到
JNBP0.6,SHENGYIN2;闹铃重响功能开启时,跳入响铃程序
AJMPTISHI;不是闹铃重响定时,则定时时间到时,跳入提示程序
AJMPMAIN
CESHI:
ACALLRING
AJMPMAIN
SHENGYIN1:
;调用响铃子程序
LCALLRING
AJMPMAIN
SHENGYIN2:
SETBF0;闹铃重响标志位设定
LCALLRING;响铃
CLRF0;标志位复位
AJMPMAIN
NLTZZ:
AJMPNLTZ1;跳入闹铃调整程序
DSTZ:
AJMPDSTZ1;跳入定时调整程序
DATETZ:
AJMPDATETZ1;跳入日期调整程序
STOPWATCHTZ:
AJMPSTOPWATCHTZ1;跳入秒表程序
B.1.4显示子程序
8个数码管轮流进行显示,分别显示1ms,依赖人的视觉暂留效应,给人以数码管持续高亮的错觉。
该段程序如下:
DISP:
;时间显示子程序
JNBP3.7,OUT1;判断节能开关7是否按下,按下则数码管不显示,延长其寿命
MOVDPTR,#LEDTAB
MOVA,SECOND;显示当前时间秒位
MOVB,#10
DIVAB;A存十位,B存个位
MOVCA,@A+DPTR
MOVP1,A
CLRSEC_S
ACALLD_1MS;显示当前时间秒十位
SETBSEC_S
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRSEC_G
ACALLD_1MS;显示当前时间秒个位
SETBSEC_G
MOVA,MINUTE;显示当前时间分位
MOVB,#10
DIVAB
MOVCA,@A+DPTR
MOVP1,A
CLRMIN_S
ACALLD_1MS
SETBMIN_S
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRMIN_G
ACALLD_1MS
SETBMIN_G
MOVA,HOUR;显示当前时间时位
MOVB,#10
DIVAB
MOVDPTR,#LEDTAB
MOVCA,@A+DPTR
MOVP1,A
CLRHOU_S
ACALLD_1MS
SETBHOU_S
MOVA,B
MOVCA,@A+DPTR
MOVP1,A
CLRHOU_G
ACALLD_1MS
SETBHOU_G
MOVA,WEEK;显示当前星期数
MOVCA,@A+DPTR
MOVP1,A
CLRY_S
ACALLD_1MS
SETBY_S
OUT1:
RET
日期的显示,秒表的显示,倒计时的显示,调闹铃,调定时的显示,闪烁的显示程序与以上的的扫描相似,有的以子程序的方式出现,通过子程序调用语句ACALL调用;有点直接嵌套在相应的程序里面,顺序执行,或者用调转语句AJMP调用。
B.2.5调整程序
时钟包括很多调整,如时间,日期,闹铃,秒表等,本程序,设计了相应的调整程序段,通过对应的按键,程序跳入调整模式或功能模式。
在此着重分析一下闹铃重响以及定时功能的实现过程,这两个功能都灵活运用了标志位。
1,定时功能运用了一个内存地址3CH为标志位,只有3CH中所存值非0时,在主程序中才判断定时是否已到。
3CH值初始化为0,程序开始运行时并不判断定时是否已到。
当通过按键进入定时初值设置,并开始倒计时,3CH的值被赋为1,
当倒计时显示到0时,进入闪烁提示,提示结束后3CH又被赋值为0,程序回到主程序后,不必判断定时是否已到。
但当倒计时未完,按返回键回到主程序时,3CH的值为1,故在主程序判断未完成的定时任务,倒计时到0时调用同一个提示程序,最后仍可保证在主程序不再定时开启时去判断定时,从而节约资源。
2,重闹铃的精髓也是标志位的设计,以F0为标志位,其初值为0,正常响铃时判断重响功能键,若重响功能关闭,则跳过重响设定程序;若重响功能开启,则判断标志位F0,为了更好的说明,将相关程序截取如下:
//闹铃重响功能是否判断//
JNBP0.6,RERING
//重响定时,//
RERING:
;闹铃重响判断程序
JNBF0,RE;标志位F0为0,不进行闹铃重响设定
CPLF0
MOV3CH,#1;定时判断标志位赋1,定时判断功能开启
JNBP0.7,M1;闹铃重响间隔时间选取
MOVR4,#0;闹铃重响间隔30秒
MOVR3,#30
AJMPMAIN
M1:
;闹铃重响间隔60秒
MOVR4,#1
MOVR3,#0
AJMPMAIN
JBP2.7,GO;判断暂停键是否按下,未按下则响铃
JNBP0.6,GO1;音乐暂停键,再判断闹铃重响功能是否开启
AJMPEND0
GO1:
;闹铃重响功能开启处理程序
JBF0,GO;重响标志位判断,若F0为1,表明此次响铃调用为重闹铃导致,进入重闹铃环节;若F0为0则表示此次闹铃调用为正常闹铃导致,因为重闹铃功能开启,故将F0置1,以便重闹铃的实现!
CPLF0
AJMPEND0
通过以上程序可知,闹铃初次响时,标志位F0总是0,若重响功能开启,则在初次闹铃自然结束或人为按键结束后通过CPLF0语句,使F0置1,为重响时间间隔的设置提供条件。
当F0值为1时,才能在闹铃功能关闭的情况下重闹铃,重闹铃不像正常闹铃那样,即使没有人为关闭,音乐唱完后,自动回到主程序,而是一直再响,若要关闭重闹铃,则拨动重闹铃开启开关即可。
重闹铃结束后回到调用闹铃的位置,用CLRF0使标志位复位,至此一个重闹铃循环结束。
又回到初次闹铃前的状态。
若要重响开启重闹铃,则需再次开启重闹铃功能。
*******************************************************************************
JNBP0.6,SHENGYIN2;闹铃重响功能开启时,跳入响铃程序
AJMPTISHI;不是闹铃重响定时,则定时时间到时,跳入提示程序
AJMPMAIN
SHENGYIN2:
SETBF0;闹铃重响标志位设定
LCALLRING;响铃
CLRF0;标志位复位
AJMPMAIN
以上程序段可以区别正常定时和重闹铃定时,通过若重闹铃功能选择键按下,则定时,时间到通过一直响铃来提示;若重闹铃功能关闭则定时到用闪烁来提示。
我们不难发现重闹铃开关也可作为定时在主程序中判断时,不同提示方式的选择开关,我们不会影响重闹铃标志位,因为在闹铃子程序调用语句后有F0标志位的清零语句:
CLRF0
C.程序调试及仿真
c.1利用Keil软件实验过程截图:
1,建一个工程,并设定与Proteus仿真相关的参数
2,汇编程序,并生成HEX文件
c.2利用Proteus仿真实验过程截图:
1.普通时间显示模式仿真图,表示:
星期一9点10分38秒
2.日期调节,显示模式仿真图,表示:
2010年7月10日
3.闹铃调节显示仿真图,表示闹铃时刻为8点整
4.定时,倒计时显示仿真图,表示此时定时初值已经减到54秒,及还有54秒定时到。
定时最大值为59分59秒。
5.秒表显示仿真图,表示秒表已经从0记到8.28秒。
秒表可计时到小时,其中小时位数字可到99,即最大计时为100小时
D,电子时钟电路板焊接实现
据以往经验,焊接电路的布线非常重要,首先要在电路板上将线的大致走向规划好,如何美观,精简是要领。
一下是本次试验的硬件电路实现
正面:
反面:
五,感想。
在整个系统的仿真中,嘀嘀声提示音只是偶尔比较靠谱的出现一次,但嘀嘀声的间隔及音调发生的频率不正常,通常结果是发出沉闷的噗噗声,发声频率勉强分辨,发声间隔不能仿真实现,似乎是一定的。
如果我只将嘀嘀声提示子程序作为主程序单独运行,则能清晰地分辨高,低音频,以及实现响音的间隔,但是若提高响音的间隔,运行的结果没有什么变化,响音间隔没多大变化。
对于嘀嘀声提示子程序的仿真文件,我将和电子时钟整个系统的仿真文件一并提交。
我认为有些细节是仿真软件不能模拟的,必须要通过开发板的实际操作得以验证,PC机的资源有限,运行速度和性能的差异也有可能产生仿真的不同结果。
以下为具体实现程序段:
TIMER1:
;计数器T1中断服务程序
JBP0.1,OO;判断中断服务的种类
MOVA,56H;此标志位决定倒计时最后10秒和
定时到时发出不同频率的声音
CJNEA,#0,PP
JNBF0,III
DJNZ55H,OOT
CPLF0
III:
DJNZ50H,EE;定时前十秒嘀嘀声提醒
MOV50H,#100
DJNZ51H,EE
MOV51H,#10
MOVTH1,#3CH
MOVTL1,#0B0H
MOV55H,#10
CPLF0
AJMPOT
OOT:
MOVTH1,#3CH
MOVTL1,#0B0H
AJMPOT
EE:
MOVTH1,#0FEH
MOVTL1,#0CH
CPLP2.6
AJMPOT
PP:
JNBF0,II
DJNZ54H,OOT1
CPLF0
II:
DJNZ52H,FF;定时到嘀嘀声提示
MOV52H,#150
DJNZ53H,FF
MOV53H,#10
MOVTH1,#3CH
MOVTL1,#0B0H
MOV54H,#10
CPLF0
AJMPOT
OOT1:
MOVTH1,#3CH
MOVTL1,#0B0H
AJMPOT
FF:
MOVTH1,#0FFH
MOVTL1,#5AH
CPLP2.6
AJMPOT
OO:
;音乐闹铃服务程序
MOVTH1,21H;定时器T1置初值
MOVTL1,20H
CPLP2.6;音符对应频率产生
OT:
RETI
以上就是实验中遇到的主要问题,基本上都找到了相应的解决之道。
整个实验的过程就是一个解决问题的过程,每天都解决一些问题,我的实验也就解决了,当然结果不重要,功利化的追求结果,会使人浮躁,还是享受那份疑难迎刃而解的快感吧!
附件:
A.Proteus电路图
参考文献、资料索引
文献、资料名称
编著者
出版单位
《51系列单片机高级实例开发指南》
《MCS—51/96系列单片机原理及应用》
《AT89系列单片机原理与接口技术》
《单片机原理及应用》
《C程序设计》
《单片机原理与实用技术》
《电子技术基础》
《电路基础》
《电路与电子技术》
《电路基本分析》
李军
孙涵芳
王幸之
欧阳斌林
潭浩强
付晓光
邹寿彬
许熙文
卢尔健
石生
北京航空航天大学出版社
北京航空航天大学出版社
北京航空航天大学出版社
中国水利水电出版社
北京航空航天出版社
清华大学出版社
清华大学出版社
高等教育出版社
科学技术出版社
高等教育出版社
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c51 单片机 电子 时钟 报告 解析