可调式定时器的设计与制作Word文档格式.docx
- 文档编号:19107675
- 上传时间:2023-01-03
- 格式:DOCX
- 页数:14
- 大小:673.80KB
可调式定时器的设计与制作Word文档格式.docx
《可调式定时器的设计与制作Word文档格式.docx》由会员分享,可在线阅读,更多相关《可调式定时器的设计与制作Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
利用单片机为核心,设计并制作电子定时器,具有以下功能:
(1)电子定时器能定时给电器供电或断电;
(2)给电最大时间可以长达30min;
(3)四位数码管显示时间;
(4)继电器作电器电源输出控制。
1方案论证与对比
1.1方案一
该方案由待命状态、预定定时时间、定时器开始与暂停系统、系统处理、DS1302处理时间、蜂鸣器报警、数码显示等模块组成。
系统的计时部分采用了一块时钟芯片DS1302,用其实现系统通过继电器对电器供电的计时工作。
原理框图如图1所示:
图1方案一系统方框图
1.2方案二
该方案仅由待命状态、预定时间、定时器开始与暂停系统、系统处理、继电器供电或断电、蜂鸣器报警、数码显示四个模块组成。
整个系统的计时功能皆由STC89C52内部自带的定时器T0来实现。
同样,结合继电器给电器供电,并利用蜂鸣器进行断电报警。
原理框图如图2所示:
图2方案二系统方框图
1.3方案对比与选择
以上两个方案在原理上显然都可以完成该电子定时器的设计。
但方案一中利用DS1302时钟芯片进行计时,虽然可达到题目的计时要求,但题目要求最大计时需达到30分钟,而该芯片的计时周期规定了为24小时制,所以如果采用该方案的话,程序的设计处理复杂度将会大大增加。
在方案二中,利用STC89C52单片机内部的定时器T0循环溢出中断,从而完成定时器的计时功能,5位共阴数码管显示时间,继电器作电器电源输出控制,其电路简单,操作使用方便,大大减轻了设计的工作量。
所以选定该方案来进行本次课程设计。
2单元电路设计与计算
2.1STC89C52与8255路设计
在本次设计中,需用到多个输出端口,所以熟悉单片机的接口也是至关重要的。
本系统采用8255I/O扩展,P0、P2口为总线控制I/O扩展;
在扩展的IO口中,PA口作为数码管的位选端口;
PB作为数码管的段选端口;
P1^2口连接继电器,P3口分别用以控制各个中断、蜂鸣器等各个模块的控制。
在XTAL2引脚和XTAL1引脚之间接有一块12M的晶振,从而使芯片内部的定时器能实现计时功能。
单片机接口分配电路如图3所示:
图3STC89C52与8255电路设计
2.2矩阵键盘电路的设计
根据设计要求,需要通过按键来选择系统的工作方式,所以我从4×
4矩阵键盘上定义了四个按键,可以通过按键S4、S8来设定定时时间;
通过按键S12、S16来控制系统工作的开始和暂停。
矩阵键盘电路如图4所示:
图4矩阵键盘电路原理图
在程序中,先将第一列的公共线拉高,即给PC4口赋一个值(如0x10)。
然后如果这一排有键被按下的话,PC3口的值就会发生改变,例如按下S4号键,PC3口的值就会由低电平变成高电平,依次类推,我们就可以根据PC3-PC0口值的变化来获得各个键值。
2.3继电器电路的设计
由P1^2引脚输出高低电平经S2控制三极管的通断,从而控制继电器的吸合与释放,继电器的输出端采用分离方式,即输出端不与内电路连接,直接连接端子,这样会增加更多利用功能,可控制更高电压设备的开和关,图上的S2单刀双掷开关控制继电器电路的电源。
继电器电路原理图如图5所示:
图5继电器电路原理图
2.4蜂鸣器电路的设计
为了提醒用户对电器供电或断电后的其它工作,设计中用到了蜂鸣器的报警功能。
定时器1用来控制蜂鸣器响应的频率。
在电路中蜂鸣器由P3.3脚控制,当将所预置的时间倒数完毕后数码管进行模拟警报器声发出警报。
蜂鸣器设计电路如图6示:
图6蜂鸣器电路原理图
2.5数码管显示电路设计
由于该设计需用到五位数码管来显示时间,所以必须要有一个数码管显示电路。
电路数码管为共阳型。
数码管位的选择由8255PA口来处理,每次只选择其中一位数码管显示。
用动态扫描技术对五个数码管进行扫描,由PA控制位选。
利用快速的循环显示,人眼看到的就是多位了。
用PB口控制数码管的段选,根据不同的显示时间选择不同的段码。
每显示一位数码管都进行消隐,消除暗瘾。
数码管连接图如下:
图7数码管显示电路原理图
3系统软件工作流程图
3.1系统工作流程
程序采用模块化、结构化设计,并采用了软件抗干扰技术,其软件的可靠性较好,可维护性强。
在本主程序中有3个状态:
待命状态、计时工作状态和到点工作状态。
当系统进入待命状态时,数码管上会显示“30—00”样符号;
通过按键S4和S8来预置定时时间,时间可调范围是0到59分59秒。
只要按下S12定时器打开开始倒计时。
在工作中如果按下S16就可以暂停倒计时。
在工作中,都结合数码管显示时间,继电器给电器供电,当时间显示到00—00时蜂鸣器就会报警,表示继电器给电器断电了。
系统程序流程图如下图所示:
图8系统程序流程图
3.2定时器T0中断工作分析
定时器T0用于时间计时。
定时溢出中断周期设为50ms,中断进入后先进行定时中断值校正,当中断累计20次(即50ms×
20=1s)时,对秒计数单元进行减1操作;
当到了0s时,分计数单元减1操作;
直到计时完毕。
4系统调试及性能分析
先检查印制板及焊接的质量情况,在检查无误后通电检查数码管的点亮状况。
至于矩阵键盘的调试,关键是把握好按键的去抖效果。
当出现按键“不灵”情况,一般是由于程序中用于按键去抖的延时时间不够。
将程序编辑编译完成后,将生成的hex文件通过串口下载软件下载到STC89C52单片机芯片中去。
在进行调试之前,还应注意操作的顺序:
先进行定时时间的预置,然后选定工作方式。
下表所列的是系统定时
功能测试结果。
表1系统计时测试结果
测量序号
理论值
测量值
1分钟
5分钟
4分59秒
10分钟
9分58秒
15分钟
14分57秒
30分钟
29分56秒
误差分析:
由于程序中使用了一些延时语句,所以如果计时时间过长的话,就会在时间上产生一定的误差。
因为我们的计时完全是通过单片要内部的计时器来完成的,所以该误差是不可避免的。
5详细仪器清单
表2仪器清单
仪器名称
数量
STC89C52开发板
1块
串口下载线
1根
电源线
万用表
6总结与思考及致谢
课程设计是针对某一理论课程的要求,对学生进行综合性实践训练的实践教学环节,可以提高学生运用课程中所学的理论知识与实践紧密结合,独立地解决实际问题的能力。
在这次课程设计过程中使我从中学到许多以前在课本和课堂上所无法学到的,特别是在课程设计过程中查找资料的过程中从中学到了许多东西并从中体会到许多的乐趣,从而丰富了自己,使自己无论是上课时还是在课余都感到很充实。
在本次课程设计的过程中,曾得到过老师与几位同学的悉心指导与帮助,才使得我的设计非常圆满的完成,在此对他们表示我们最衷心的感谢,谢谢你们!
因学习知识的能力和时间有限,并且此次单片机原理及应用课程设计对于我们来说还只是初体验,因此在本次的课程设计过程中,难免存在错误,恳请老师给以批评和指正,并再次感谢曾帮助过我的老师和同学。
参考文献
[1]楼然苗,李光飞编著.单片机课程设计指导[M].北京:
北京航空航天大学出版社,2007
[2]朱定华,戴汝平编著.单片微机原理与应用[M].北京:
清华大学出版社,2003
[3]胡汉才编著.单片机原理及接口技术[M].北京:
清华大学出版社,2004
[4]谭浩强编著.C程序设计(第三版)[M].北京:
清华大学出版社,2005
[5]李大友.姜秀芳主编.单片微型硬件.软件及应用[M].北京:
高等教出版社,2003
[6]沈红卫编著.单片机应用系统设计实例与分析[M].北京:
北京航空航天大学出版社,2002
附录一:
单片机系统板原理图
附录二:
详细系统源程序
#include<
reg52.h>
#include<
absacc.h>
#definePAXBYTE[0xD1FF]/*PA口地址*/
#definePBXBYTE[0xD2FF]/*PB口地址*/
#definePCXBYTE[0xD5FF]/*PC口地址*/
#defineCONXBYTE[0xD7FF]/*控制字地址*/
#defineuintunsignedint
#defineucharunsignedchar
sbitRELAY=P1^2;
/****定义继电器接口****/
sbitbeen=P3^3;
//*******************数码管段******************//
ucharcodeTAB_CODE[]={0XA0,0XBB,0X62,0X2A,0X39,0X2C,0X24,0XBA,0X20,
0X28,0X30,0X25,0XE4,0X23,0X64,0X74};
ucharnum,t,s,m=30;
//**小延时函数**//
voiddelay(uinta)
{
while(a--);
}
voidTime();
voidStart();
voidkeyscan();
voidmain()
TMOD=0x21;
//定时器工作方式设置
TH0=(65535-50000)/256;
TL0=(65535-50000)%256;
EA=1;
ET0=1;
ET1=1;
CON=0x81;
//控制字设置
while
(1)
keyscan();
Time();
Start();
//**数码管显示函数***//
voidStart()
PB=0xff;
//***消影***//
delay(100);
PA=0xfe;
//***位选通***//
PB=TAB_CODE[m/10];
//***分十位显示***//
delay(150);
PA=0xfd;
PB=TAB_CODE[m%10];
//***分个位显示***//
PA=0xfb;
PB=0x7f;
//***时间分隔-显示***//
PA=0xf7;
PB=TAB_CODE[s/10];
//***秒十位显示***//
PA=0xef;
PB=TAB_CODE[s%10];
//***秒个位显示***//
delay(50);
while(s==0&
&
m==0)//***判断时间是否走完***//
{
TR0=0;
//***定时器关闭***//
TR1=1;
//***定时器1打开***//
RELAY=1;
//***继电器断电***//
delay(350);
PA=0;
PB=0xa0;
num+=2;
}
//****键盘扫描函数******//
voidkeyscan()
uchark,j=0x10;
//***初始化8255控制器***//
PC=0x10;
//*****把PC.4口拉高*****//
k=PC;
k=k&
0x0f;
//***判断是否有键按下***//
if(k!
=0)
{
delay(50);
Start();
if(k!
while(PC!
=0x10)//******松手检测******//
Start();
k=k+j;
if(k==0x18)
m++;
if(m==60)
m=0;
if(k==0x14)
if(m==0)
m=60;
m--;
}
if(k==0x12)//开始键
{
TR0=1;
RELAY=0;
if(k==0x11)//暂停键
TR0=0;
RELAY=1;
P1=PC;
//***倒计时控制函数***//
voidTime()
if(t==20)
t=0;
if(s==0)
s=60;
if(m==0)
m=60;
m--;
s--;
voidSer0()interrupt1
t++;
//定时器中断1设计蜂鸣器响应的频率
voidSer1()interrupt3
TH1=0x01;
TL1=num;
been=!
been;
/************************************END*******************************************/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 调式 定时器 设计 制作