09325313可调式定时器的设计与制作.docx

上传人:b****3 文档编号:4125617 上传时间:2022-11-28 格式:DOCX 页数:15 大小:785.18KB
下载 相关 举报
09325313可调式定时器的设计与制作.docx_第1页
第1页 / 共15页
09325313可调式定时器的设计与制作.docx_第2页
第2页 / 共15页
09325313可调式定时器的设计与制作.docx_第3页
第3页 / 共15页
09325313可调式定时器的设计与制作.docx_第4页
第4页 / 共15页
09325313可调式定时器的设计与制作.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

09325313可调式定时器的设计与制作.docx

《09325313可调式定时器的设计与制作.docx》由会员分享,可在线阅读,更多相关《09325313可调式定时器的设计与制作.docx(15页珍藏版)》请在冰豆网上搜索。

09325313可调式定时器的设计与制作.docx

09325313可调式定时器的设计与制作

 

 

可调式定时器的设计与制作

 

姓名:

梦琦

专业:

电子信息工程

班级:

093253

学号:

09325313

指导老师:

王晓荣

摘要

本次设计在以STC89C52单片机为核心的系统板上利用C语言设计电子定时器。

该电子定时器能定时给电器供电或断电,最大定时时间可以长达六十分钟且可以再一分钟到六十分钟之间任意调节时间长短,操作使用方便。

采用STC89C52单片机控制,5位共阳数码管显示时间,蜂鸣器提示,继电器作电器电源输出控制。

该定时器可预置定时时间,可通过矩阵键盘上的四个按键来选定定时器预定时间和开始和暂停,然后结合继电器对电器进行供电和断电;利用单片机部的定时器T0,成功实现了计时器的计时功能;本电子定时器会在定时时间到达零时通过蜂鸣器进行报警,以此提醒用户电器即将断电,方便用户对电器进行其它的操作。

关键词:

电子定时器;供电或断电;继电器;60分钟;数码显示;8255

 

设计要求1

1方案论证与对比1

1.1方案一1

1.2方案二2

1.3方案对比与选择2

2单元电路设计与计算3

2.1STC89C52与8255电路设计3

2.2矩阵键盘电路的设计3

2.3继电器电路的设计4

2.4蜂鸣器电路的设计5

2.5数码管显示电路设计5

3系统软件工作流程图6

3.1系统工作流程6

3.2定时器T0中断服务流程及分析6

4系统调试及性能分析7

5详细仪器清单8

6总结与思考及致9

参考文献10

附录一:

单片机系统板原理图12

附录二:

详细系统源程序13

电子定时器

设计要求

利用单片机为核心,设计并制作电子定时器,具有以下功能:

(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分钟

1分钟

1分钟

5分钟

5分钟

4分59秒

10分钟

10分钟

9分58秒

15分钟

15分钟

14分57秒

30分钟

30分钟

29分56秒

误差分析:

由于程序中使用了一些延时语句,所以如果计时时间过长的话,就会在时间上产生一定的误差。

因为我们的计时完全是通过单片要部的计时器来完成的,所以该误差是不可避免的。

 

5详细仪器清单

表2仪器清单

仪器名称

数量

STC89C52开发板

1块

串口下载线

1根

电源线

1根

万用表

1块

6总结与思考及致

课程设计是针对某一理论课程的要求,对学生进行综合性实践训练的实践教学环节,可以提高学生运用课程中所学的理论知识与实践紧密结合,独立地解决实际问题的能力。

在这次课程设计过程中使我从中学到许多以前在课本和课堂上所无法学到的,特别是在课程设计过程中查找资料的过程中从中学到了许多东西并从中体会到许多的乐趣,从而丰富了自己,使自己无论是上课时还是在课余都感到很充实。

在本次课程设计的过程中,曾得到过老师与几位同学的悉心指导与帮助,才使得我的设计非常圆满的完成,在此对他们表示我们最衷心的感,你们!

因学习知识的能力和时间有限,并且此次单片机原理及应用课程设计对于我们来说还只是初体验,因此在本次的课程设计过程中,难免存在错误,恳请老师给以批评和指正,并再次感曾帮助过我的老师和同学。

 

参考文献

[1]楼然苗,光飞编著.单片机课程设计指导[M].:

航空航天大学,2007

[2]朱定华,戴汝平编著.单片微机原理与应用[M].:

清华大学,2003

[3]胡汉才编著.单片机原理及接口技术[M].:

清华大学,2004

[4]谭浩强编著.C程序设计(第三版)[M].:

清华大学,2005

[5]大友.秀芳主编.单片微型硬件.软件及应用[M].:

高等教,2003

[6]红卫编著.单片机应用系统设计实例与分析[M].:

航空航天大学,2002

 

附录一:

单片机系统板原理图

附录二:

详细系统源程序

#include

#include

#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);

PB=0xff;

delay(150);

PA=0xfd;

PB=TAB_CODE[m%10];//***分个位显示***//

delay(150);

PB=0xff;

delay(150);

PA=0xfb;

PB=0x7f;//***时间分隔-显示***//

delay(150);

PB=0xff;

delay(150);

PA=0xf7;

PB=TAB_CODE[s/10];//***秒十位显示***//

delay(150);

PB=0xff;

delay(150);

PA=0xef;

PB=TAB_CODE[s%10];//***秒个位显示***//

delay(150);

PB=0xff;

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;

CON=0x81;//***初始化8255控制器***//

PC=0x10;//*****把PC.4口拉高*****//

k=PC;

k=k&0x0f;//***判断是否有键按下***//

if(k!

=0)

{

delay(50);

Start();

if(k!

=0)

{

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

{

TH0=(65535-50000)/256;

TL0=(65535-50000)%256;

t++;

}

//定时器中断1设计蜂鸣器响应的频率

voidSer1()interrupt3

{

TH1=0x01;

TL1=num;

been=!

been;

}

/************************************END*******************************************/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1