09325314可调式定时器的设计与制作
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称:家电原理与检测课程设计
设计题目:电子可调定时器
专业:电子信息工程
学生姓名:李斌
学号:09325314
指导教师:王晓荣
本次设计在以STC89C52单片机为核心的系统板上利用C语言设计电子可调定时器。
该电子可调定时器能定时给电器供电或断电,最大定时时间可以长达三十小时,操作使用方便。
采用STC89C52单片机控制,4位共阳数码管显示时间,继电器作电器电源输出控制。
该定时器可预置定时时间,并设有四种工作方式,可通过矩阵键盘上的四个按键来选定定时器的不同工作方式,然后结合继电器对电器进行供电和断电;利用单片机内部的定时器T0,成功实现了计时器的计时功能;本电子定时器每种工作方式供电的最后五秒钟都通过蜂鸣器进行报警,以此提醒用户电器即将断电或供电,方便用户对电器进行其它的操作。
关键词:电子定时器;供电或断电;继电器;30小时;数码显示
设计要求 (1)
1 方案论证与对比 (1)
1.1 方案一 (1)
1.2 方案二 (2)
1.3 方案对比与选择 (2)
2 单元电路设计与计算 (3)
2.1 STC89C52单片机接口分配电路设计 (3)
2.2 矩阵键盘电路的设计 (3)
2.3 继电器电路的设计 (4)
2.4 蜂鸣器电路的设计 (5)
2.5 数码管显示电路设计 (5)
3 系统软件工作流程图 (6)
3.1 系统工作流程 (6)
3.2 定时器T0中断服务流程及分析 (7)
4 系统调试及性能分析 (8)
5 详细仪器清单 (9)
6 总结与思考及致谢 (10)
参考文献 (11)
附录一:单片机系统板原理图 (12)
附录二:主程序 (12)
电子可调定时器
设计要求
利用单片机为核心,设计并制作电子可调定时器,具有以下功能: (1) 电子可调定时器能定时给电器供电或断电; (2) 给电最大时间可以长达30h ; (3) 四位数码管显示时间;
(4) 继电器作电器电源输出控制。
1 方案论证与对比
1.1 方案一
该方案由待命状态、预定定时时间、工作方式选择、系统处理、DS1302处理时间、蜂鸣器报警、数码显示等模块组成。
系统的计时部分采用了一块时钟芯片DS1302,用其实现系统通过继电器对电器供电的计时工作。
原理框图如图1所示[3]:
按键选择工作
方式
单片机系统
DS1302芯片
蜂鸣器报警
继电器
待命状态数码管显示
预置定时时间
图 1 方案一系统方框图
1.2方案二
该方案仅由待命状态、预定定时时间、工作方式选择、系统处理、继电器报警、数码显示四个模块组成。
整个系统的计时功能皆由STC89C52内部自带的定时器T0来实现。
同样,结合继电器给电器供电,并利用蜂鸣器进行断电报警。
原理框图如图2所示:
按键选择
工作方式
单
片
机
系
统
继电器
待命状态
数码管显示蜂鸣器报警
预置定时时间
图 2 方案二系统方框图
1.3方案对比与选择
以上两个方案在原理上显然都可以完成该电子可调定时器的设计。
但方案一中利用DS1302时钟芯片进行计时,虽然可达到题目的计时要求,但题目要求最大计时需达到30个小时,而该芯片的计时周期规定了为24小时制,所以如果采用该方案的话,程序的设计处理复杂度将会大大增加。
在方案二中,利用STC89C52单片机内部的定时器T0循环溢出中断,从而完成定时器的计时功能,4位共阴数码管显示时间,继电器作电器电源输出控制,其电路简单,操作使用方便,大大减轻了设计的工作量。
所以选定该方案来进行本次课程设计。
2 单元电路设计与计算
2.1 STC89C52单片机接口分配电路设计
在本次设计中,需用到多个输出端口,所以熟悉单片机的接口也是至关重要的。
P0作为矩阵键盘的专用控制口;P2口作为专门的数据输出口;P1口作为数码管的位选端口;P3口分别用以控制各个中断、继电器、蜂鸣器等各个模块的控制。
在XTAL2引脚和XTAL1引脚之间接有一块12M 的晶振,从而使芯片内部的定时器能实现计时功能。
单片机接口分配电路如图3所示:
30p C130p
C212M Y1L1L2L3L4H1H2H3H4P10
P11P12P2A0P2A1P2A2P2A3P2A4P2A5P2A6P2A7
P13P14P15P16P30P31P32P33P34P35P36P37
P17P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.7
8RST/Vpd 9P3.0/RXD 10P3.1/TXD 11P3.2/-INT012P3.3/-INT113P3.4/T014P3.5/T115P3.6/-WR 16P3.7/-RD 17
XTAL218
XTAL119P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.7
28
-PSEN 29
ALE/-PROG 30-EA/Vpp 31
P0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.7
32STC89C52
U1
RST
ALE VCC
图 3 STC89C52单片机接口原理图
2.2 矩阵键盘电路的设计
根据设计要求,需要通过按键来选择系统的工作方式,所以我从4×4矩阵键盘上定义了七个按键,可以通过按键0~2来设定定时时间;通过按键4~7来控制系统分别工作于1、2、3、4工作方式中。
矩阵键盘电路如图4所示:
159
D
4
8C
37B F
26
A E
P0.4
P0.5P0.6
P0.7
P0.0
P0.1
P0.2
P0.3
图 4 矩阵键盘电路原理图
在程序中,先将其中一排的公共线拉低,即给P0口赋一个值(如0x7F)。
然后如果这一排有键被按下的话,P0口的值就会发生改变,例如按下0号键,P0口的值就会由0x7F 变成0x7E ,依次类推,我们就可以根据P0口值的变化来获得各个键值。
2.3 继电器电路的设计
由P35 引脚输出高低电平经R201 控制三极管的通断,从而控制继电器的吸合与释放,继电器的输出端采用分离方式,即输出端不与内电路连接,直接连接端子,这样会增加更多利用功能,可控制更高电压设备的开和关,图上的J14 插针开关控制继电器电路的电源。
继电器电路原理图如图5所示:
10K
R201D201
VCC
123J-JDQ
3
25
J
14
JDQ 8550
Q201220
R202LED201
12
SA
J14P35
图 5 继电器电路原理图
2.4 蜂鸣器电路的设计
为了提醒用户对电器供电或断电后的其它工作,设计中用到了蜂鸣器的报警功能。
在电路中蜂鸣器由P3.4 脚控制,它与电脑键盘接口DATA 引脚经J15 进行切换。
单片机P34 脚输出高低电平经R902 加在三极管B 极,控制三极管的导通与截止,从而控制蜂鸣器的工作。
J15 也可认为是一个开关,插针拔出即切断蜂鸣器了。
电路如图6示:
8550
Q2BELL
10K
R902VCC
123J15
10K
R901P34
图 6 蜂鸣器电路原理图
2.5 数码管显示电路设计
由于该设计需用到四位数码管来显示时间,所以必须要有一个数码管显示电路。
电路数码管为共阴型,与发光二极管相反,要使数码管点亮,P2 口就得输出高电平,数码管位的选择由138 来处理(74HC138 为3-8 译码器,输入3 位数据译出8 种状态线),138 的输入由P10-P12(000-111)译码出八线接入数码管位选择脚,138 输出的八线同一时刻只有一线为低电平,即每次只选择其中一位数码管显示。
用动态扫描技术对各个数码管进行扫描,由P1控制位选。
利用快速的循环显示,人眼看到的就是多位了。
电路中还有一个JSM 开关,是控制138 的SA 脚到GND ,使138不做译码,输出八线全为高电平而关闭数码管显示。
数码管电路原理图如图7示:
A 1
B 2
C 3SB 4SC 5SA 6
Y77Y69Y510Y411Y312Y213Y114Y015
U7
74-138
P10
P11P121
23
J-SM 5.1k
R11VCC
P2
P2B0P2B1P2B2P2B3P2B4P2B5P2B6P2B6P2B5P2B4P2B3P2B2P2B1P2B0Y36
Y28Y19
Y0
12
B 7F 10A
11
E 1G 5D 2C 4H 3Y36
Y28Y19
Y0
12
B 7F 10A
11
E 1G 5D 2C 4H 3P2B7P2B7P10
P11
P12
图 7 数码管显示电路原理图
3 系统软件工作流程图
3.1 系统工作流程
程序采用模块化、结构化设计,并采用了软件抗干扰技术,其软件的可靠性较好,可维护性强。
在本主程序中有3个状态:待命状态、计时工作状态和到点工作状态。
当系统进入待命状态时,数码管上会显示“----”样符号;通过按键0~2来预置定时时间,只要按下4~7中的任何一个按键即可分别进入1、2、3、4工作方式中;工作方式1为定时关电源,定时范围为0秒~59分59秒;工作方式2为定时关电源,定时范围为0秒~99时59分;工作方式3为定时开电源,定时范围为0秒~59分59秒;工作方式4为定时开电源,定时范围为0秒~59分59秒。
在每种工作方式中,都结合数码管显示时间,继电器给电器供电或断电的最后五秒钟都会利用蜂鸣器进行报警。
系统程序流程图如下图所示:
数码管显示时间
预置定时时间并选定
工作方式
开始
待命状态
方式2方式3方式4
定时关电源定时开电源定时开电源
蜂鸣器报警
方式1定时关电源N
Y
图 8 系统程序流程图
3.2 定时器T0中断服务流程及分析
定时器T0用于时间计时。
定时溢出中断周期设为50ms ,中断进入后先进行定时中断值校正,当中断累计20次(即50ms ×20=1s )时,对秒计数单元进行加1操作;当到了60s 时,分计数单元加1操作;同理可得到了60分时,时计数单元加1操作,
直到计时完毕。
T0中断计时流程图如图9所示:
T0中断
保护现场
定时器初值校正
1s 到
加1s 处理
恢复现场,中断返回
分计数单元加1
时计数单元加1
Y
N
60s 到
60min 到
图 9 T0中断计时流程图
4 系统调试及性能分析
先检查印制板及焊接的质量情况,在检查无误后通电检查数码管的点亮状况。
至于矩阵键盘的调试,关键是把握好按键的去抖效果。
当出现按键“不灵”情况,一般是由于程序中用于按键去抖的延时时间不够。
将程序编辑编译完成后,将生成的hex
文件通过串口下载软件下载到STC89C52单片机芯片中去。
在进行调试之前,还应注意操作的顺序:先进行定时时间的预置,然后选定工作方式。
下表所列的是系统定时功能测试结果。
表1系统计时测试结果
测量序号理论值测量值
1分钟1分钟1分钟
1小时1小时1小时
10小时10小时9小时59分58秒
15小时15小时14小时59分55秒
30小时30小时29小时59分51秒
误差分析:由于程序中使用了一些延时语句,所以如果计时时间过长的话,就会在时间上产生一定的误差。
因为我们的计时完全是通过单片要内部的计时器来完成的,所以该误差是不可避免的。
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
附录一:单片机系统板原理图
8550
Q2BELL
10K
R902VCC
30p C1
30p
C2A
1
B 2
C 3SB 4SC 5SA
6
Y77Y69Y510Y411Y312Y213Y114Y0
15U7
74-138
A12
A23A34A45A56A67A78A89B1
18
B217B316B415B514B613B712B811DIR
1
OE 1974HC245
U3
1
5
9D
4
8C
3
7
B F
2
6
A
E
P 0.4
P 0.5
P 0.6
P 0.7
P 0.0
P 0.1
P 0.2
P 0.312M Y110K
R201D201
VCC
L1L2L3L4H1H2H3H4P10P11P12P10P11P12VCC
P2A0P2A1P2A2P2A3P2A4P2A5P2A6P2A7
P2A0
P2A1P2A2P2A3P2A4P2A5P2A6P2A7P2B0P2B1P2B2P2B3P2B4P2B5P2B6P2B71
23
J-SM P13P14P15P16P30P31P32P33P34P35P36P37
P171
23J-JDQ
3
25
J
1
4
JDQ 8550Q201 5.1k
R11VCC
220
R202LED201
P2B0P2B1P2B2P2B3P2B4P2B5P2B6P2B6P2B5P2B4P2B3P2B2P2B1P2B0DH1
DH2DH3DH412SA
J141
23J15
10K
R901Y36
Y28
Y19Y0
12
B
7
F
10
A 11
E
1
G
5
D
2
C
4
H
3
Y3
6
Y2
8
Y1
9
Y012B
7
F
10
A
11
E
1
G
5
D
2
C
4
H
3
P2B7P2B7P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78RST/Vpd 9P3.0/RXD 10P3.1/TXD 11P3.2/-INT012P3.3/-INT113P3.4/T014P3.5/T115P3.6/-WR 16P3.7/-RD 17
XTAL218
XTAL119P2.021P2.122P2.223P2.324P2.425P2.526P2.627P2.7
28
-PSEN 29
ALE/-PROG 30-EA/Vpp 31
P0.039P0.138P0.237P0.336P0.435P0.534P0.633P0.7
32STC89C52
U1
H1
H2
H3
H4
P35
P34
RST
P10
P11
P12
ALE VCC
附录二:主程序
主程序:main.c
#include"reg52.h"
#include "ABSACC.H"
#define uchar unsigned char
extern void display(unsigned char place,unsigned char num); extern void delay(uchar i);
void time0(void);
unsigned int flag=0,count=0,flag_a=0;
unsigned int watch[6]={0,0,0,0,0,0};
sbit CS = P1^2;
main()
{ TMOD=0X01;
EA=1;
ET0=1;
IT0=0;
EX0=1;
IT1=0;
EX1=1;
time0();
while(1)
{
if(flag==1)
{ flag=0;
if(watch[5]==10){watch[5]=0;watch[4]++;}
if(watch[4]==6){watch[4]=0;watch[3]++;}
if(watch[3]==10){watch[3]=0;watch[2]++;}
if(watch[2]==6){watch[2]=0;watch[1]++;}
if(watch[1]==10){watch[1]=0;watch[0]++;}
if(watch[0]==3){watch[0]=0;}
if(watch[4]==3)
{CS=0;TR0=0;EX0=1;watch[5]=watch[4]=watch[3]=watch[2]=watch[1]=watch[0]=0;} }
display(1,watch[0]+0x30);
display(2,watch[1]+0x30);
display(3,watch[2]+0x30);
display(4,watch[3]+0x30);
display(5,watch[4]+0x30);
display(6,watch[5]+0x30);
}
}
void wai0()interrupt 0
{
delay(100000);
TR0=0;
watch[5]=watch[4]=watch[3]=watch[2]=watch[1]=watch[0]=0; time0();count=0;
TR0=1;
CS=1;
EX0=0;
}
void wai1()interrupt 2
{
delay(100000);
TR0=0;
watch[5]=watch[4]=watch[3]=watch[2]=watch[1]=watch[0]=0; time0();count=0;
CS=0;
EX0=1;
}
void time0(void)
{
TL0=0xb0;
TH0=0x3c;
}
void time(void)interrupt 1
{ count++;
if(count==20)
{flag=1;
count=0;
watch[5]++;
}
time0();
}
计时程序:display.c
#include"reg52.h"
#include "ABSACC.H"
#define uchar unsigned char
extern void display(unsigned char place,unsigned char num); extern void delay(uchar i);
void time0(void);
unsigned int flag=0,count=0,flag_a=0;
unsigned int watch[6]={0,0,0,0,0,0};
sbit CS = P1^2;
main()
{ TMOD=0X01;
EA=1;
ET0=1;
IT0=0;
EX0=1;
IT1=0;
EX1=1;
time0();
while(1)
{
if(flag==1)
{ flag=0;
if(watch[5]==10){watch[5]=0;watch[4]++;}
if(watch[4]==6){watch[4]=0;watch[3]++;}
if(watch[3]==10){watch[3]=0;watch[2]++;}
if(watch[2]==6){watch[2]=0;watch[1]++;}
if(watch[1]==10){watch[1]=0;watch[0]++;}
if(watch[0]==3){watch[0]=0;}
if(watch[4]==3)
{CS=0;TR0=0;EX0=1;watch[5]=watch[4]=watch[3]=watch[2]=watch[1]=watch[0]=0;} }
display(1,watch[0]+0x30);
display(2,watch[1]+0x30);
display(3,watch[2]+0x30);
display(4,watch[3]+0x30);
display(5,watch[4]+0x30);
display(6,watch[5]+0x30);
}
}
void wai0()interrupt 0
{
delay(100000);
TR0=0;
watch[5]=watch[4]=watch[3]=watch[2]=watch[1]=watch[0]=0; time0();count=0;
TR0=1;
CS=1;
EX0=0;
}
void wai1()interrupt 2
{
delay(100000);
TR0=0;
watch[5]=watch[4]=watch[3]=watch[2]=watch[1]=watch[0]=0; time0();count=0;
CS=0;
EX0=1;
}
void time0(void)
{
TL0=0xb0;
TH0=0x3c;
}
void time(void)interrupt 1 { count++;
if(count==20)
{flag=1;
count=0;
watch[5]++;
}
time0();
}
东华理工大学长江学院
课程设计评分表
学生姓名:李斌班级:093253 学号:09325314
课程设计题目:电子可调定时器
项目内容满分实评
选题能结合所学课程知识、有一定的能力训练。
符合选题要求
(5人一题)
10 工作量适中,难易度合理10
能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10 理论依据充分,数据准确,公式推导正确10
能应用计算机软件进行编程、资料搜集录入、加工、排版、
制图等
10 能体现创造性思维,或有独特见解10
成果质量总体设计正确、合理,各项技术指标符合要求。
10 说明书综述简练完整,概念清楚、立论正确、技术用语准确、
结论严谨合理;分析处理科学、条理分明、语言流畅、结构
严谨、版面清晰
10
设计说明书栏目齐全、合理,符号统一、编号齐全。
格式、
绘图、表格、插图等规范准确,符合国家标准
10 有一定篇幅,字符数不少于5000 10
总分100
指导教师评语:
指导教师签名:
年月日。