基于单片机的定时开关控制器.docx
- 文档编号:2065805
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:24
- 大小:128.69KB
基于单片机的定时开关控制器.docx
《基于单片机的定时开关控制器.docx》由会员分享,可在线阅读,更多相关《基于单片机的定时开关控制器.docx(24页珍藏版)》请在冰点文库上搜索。
基于单片机的定时开关控制器
基于单片机的定时开关控制器
摘要:
本实验基于STC89C51RC为核心,设计具备按键功能和数码管显示功能的外围硬件电路,以便控制器能够在设定的开关时刻控制输出继电器的动作,进而控制负载电源的启闭,并完成软件程序设计。
可以实现电源的直接启动/关闭;也可以通过按键设置负载电源的启动时间,最大预约时间为12小时。
关键词:
STC89C51RC;继电器
TimerSwitchControllerBasedOnMCU
Abstract:
BasedontheexperimentalSTC89C51RCasthecore,thedesignhasthekeyfunctionanddigitaltubedisplayperipheralhardwarecircuitfunction,sothatthecontrollercancontroltheoutputrelaysettheswitchpointoftheaction,thencontroltheopeningandclosingloadpowersupply,andpletethesoftwareprogramdesign.Directstart/canrealizethepoweroff;canalsosetthebuttonloadpowerstart-uptime,maximumreservationfor12hours.
KeyWords:
STC89C51RC;Relay
目 录
1硬件局部构造功能简介
1.1STC89C51RC单片机介绍
STC89C51RC系列单片机是宏晶科技公司推出的新一代高速、低功耗、超强抗干扰的单片机,指令代码完全兼容传统8051单片机。
STC89C51RC系列单片机具有ISP〔在系统中可编程〕动能和IAP(在应用可编程)功能,无需购置专用编辑器,可以通过串行口直接下载用户程序。
单片机主控电路的主要元件是STC89C51RC单片机,其外形如下列图〔图1-1〕:
图1-1STC89C51RC各个引脚
1.2STC89C51RC单片机的主要性能
与单片机产品兼容4K字节在系统可编程Flash存储器、1000次擦写周期、全静态操作:
0Hz~33Hz、三级加密程序存储器、32个可编程I/O口、三个16位定时器/计数器、八个中断源、全双工UART串行通道低功耗空闲和掉电模式、掉电后中断可唤醒看门狗定时器,双数据指针、掉电标识符。
1.3STC89C51RC单片机管脚说明
VCC——供电电压。
GND——接地。
P0口——8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被
定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进展校验时,P0输出原码,此时P0外部必须被拉高。
P1口——带部上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口——带部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1〞时,其管脚被部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进展存取时,P2口输出地址的高八位。
在给出地址“1〞时,它利用部上拉优势,当对外部八位地址数据存储器进展读写时,P2口输出其特殊功能存放器的容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口——带部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1〞后,它们被部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流〔ILL〕这是由于上拉的缘故。
在编程/校验时,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〕。
XTAL1——反向振荡放大器的输入及部时钟工作电路的输入。
XTAL2——来自反向振荡器的输出。
2 硬件电路设计
2.1 单片机最小系统
2.1.1复位电路
复位电路就是在RST端〔9脚〕外接的一个电路,目的是使单片机上的电开场工作时,部电路从初始状态开场工作,或者在工作中人为让单片机重新从初始状态开场工作。
在时钟工作的情况下,只要复位引脚高电平保持在两个机器周期以上的时间,STC89C51RC便能完成系统重置的各项工作,使得部特殊功能存放器的容均被设置成状态,并且从地址0000H处读入程序代码而执行程序。
(图2-1)
图2-1复位电路
2.1.2.时钟电路
时钟电路是产生CPU校准时序,是单片机的控制核心。
STC89C51RC的时钟信号可通过部振荡方式和外部振荡方式两种方式得到。
本次设计使用的是片振荡方式,通过外接12MHz的晶振来实现时钟电路的时序控制。
在使用片振荡器时,XTAL1和XTAL2分别为反向放大器的输入端和输出端。
外接晶体以及电容C1和C2构成并联谐振电路,接在放大器的反应回路中。
当使用外部时钟驱动时,XTAL2引脚应悬空,而由XTAL1引脚上的信号驱动,或者XTAL1引脚应悬空,而由XTAL2引脚上的信号驱动。
外部振荡器再通过一个2分频的触发器来形成部时钟所需要的信号。
在电容器C1、C2选择时方面,一般选择其值为5~30pF。
本系统中所用的电容值为22pF,具体的电路接法如图2-2所示。
图2-2晶振电路图
2.2按键电路
按键电路如图2-3所示
图2-3按键电路
系统中共有四六个独立按键,分别与P2.0、P2.1、P2.2、P2.3、P2.3、P2.4、P2.5连接。
开场键〔P2.0〕:
按下该键,电源和负载接通或当预约调试完毕后按下该键,电源将在设定时间到达后接通。
关闭键〔P2.1〕:
按下该键,切断电源。
预约键〔P2.2〕:
第一次按下该键,可以对电源的接通时间进展“小时〞调整;第二次按下该键,可以对电源接通时间进展“分钟〞调整。
加“1〞键〔P2.3〕:
按下该键,调“小时〞时间加1,最大可加到11;调“分钟〞时间加1,最大可加到59.即最长定时时间为11小时59分钟。
减“1〞键〔P2.4〕:
按下该键,调“小时〞时小时减1,最小值为0;调“分钟〞时分钟减1,最小值为0.
预留键〔P2.5〕:
在本设计中,没有作用。
2.3显示功能
1.按键指示灯D1:
只要有按键按下,该指示灯会点亮。
2.电源开关状态指示灯D3:
当电源和负载接通时,该灯点亮。
3.四位数码管〔图2-4〕:
前两位显示小时,后两位显示分钟。
上电即显示“----〞;预约调小时前两位闪烁,预约调分钟后两位闪烁。
预约时间,倒计时显示。
图2-4LED数码管
2.4中断系统
中断系统的作用主要是对外部或部的终端请求进展管理与处理。
STC89S51RC共有5个中断源,其中有2个外部中断源和3个部中断源。
中断函数如下
//--------------外部中断0中断函数---------------------------------
voidint0()interrupt0using0
{
ucharkeynum;
display();//动态显示程序作为去抖动
if(INT0==0)//判断是否有按键按下
{
keynum=GetKeyNum();//有效键,获取键值
while(INT0==0);//等待按键释放
Keyprocess(keynum);//按键处理
}
}
//-----------------定时器0中断子函数----------------------------
voidtime0()interrupt1//处理调时、显示器闪烁
{
staticucharledt,num;//设置静态变量
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
if((Onflag&&((hour|min)!
=0))|!
Onflag)//指示灯每隔0.5s闪烁
{
ledt++;
if(ledt==10)//10X50mS=0.5S
{
ledt=0;
LED=~LED;
}
}
if(Setflag!
=0)//调时闪烁
{
num++;
if(num==5)
{
num=0;
flag=~flag;
}
}
}
//-------------定时器1中断子函数-------------------
voidtime1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
calculate();//计时
}
2.5继电器
本设计是用单片机控制继电器到达以弱控强的电路,下面再来介绍一下单片机和强电之间的桥梁----电磁继电器。
电磁继电器是有触点电继电器是有触点电继电器的一种。
它是利用电磁效应实现电路开、关控制作用的原件,广泛应用在电子设备、仪器仪表及自动化设备中。
在各种自动设备中,都要求用一个低电压电路提控制一个高电压的电器电路。
这样不仅可以为电子线路和电器电路提供良好的电隔离,还可以保护电子电路和人员平安。
图2-5继电器开关电路
2.6电路设计
根据设计要求,选用STC89C51RC作为电路控制核心,电路中包含了时钟电路、复位电路作为单片机的最小系统。
晶体振荡器频率为12MHz,这样单片机的机器周期恰好为1μs。
P0.0--P0.7作为四位七段数码管的段码输出端,P1.0--P1.3作为四位数码管〔共阴极〕的位码输出端。
P2.0--P2.5作为键盘信号的输入端。
P3.6作为控制信号的输出端控制继电器吸合与释放。
由于P0口输出端为漏极开路门,他要输出高电平才有效,必须外接上拉电阻,本设计中上空电阻阻值为10KΩ。
由于P0口输出电流有限,为减轻单片机的负担,在P0口外接了一个8路同相三态双向驱动器〔起电流放大作用〕。
19脚是它的片选端,低电平有效,1脚是输入/输出端口转换用,当该引脚接高电平时,信号由“A〞端传向“B〞端,当该引脚接低电平,信号由“B〞端传向“A〞端。
P1口通过一个六反相器74LS04和数码管的位码输入端相连,故P1.0--P1.3输出低电平时,相应的数码管点亮。
附录2中六个独立按键分别和P2.0--P2.5相连接,通过上拉电阻和电源相连接,当按键没有按下时,P2.0--P2.5端口输入为“1〞,表示没有信号输入。
这六个按键只要有一个按键按下时,8输入与非门74HC30的输出端必然输出高电平〔它的逻辑功能为:
全1出0,由0出1〕,经非门电路74LS04倒相后,按键按下时输出为低电平,该低电平信号接单片机的外部中断信号输入端
〔即P3.2引脚〕,从而引起单片机中断正常执行的主程序,转而去执行中断效劳程序。
3软件设计
程序开场首先对按键变量和小时、分钟变量进展定义,对共阴极数码管的段码〔字型码〕以一维数组方式定义。
另外对延时函数、定时器初始化子函数、求按键子函数、按键处理子函数、计时子函数、显示子函数进展声明。
主函数
图3-1程序主函数
在定时器T0、T1初始化和外部中断0〔
〕子函数中,规定定时器T0、T1的工作模式为方式1,定时时间为50ms。
外部中断0采用下降沿触发方式。
定时器工作在中断方式,即定时时间到,立即停顿执行主函数,转而去执行中断效劳函数。
图3-2定时器T0中断效劳函数
图3-3外部中断T1中断效劳函数
图3-4外部中断0中断效劳函数
在显示子函数中,上电复位后4位数码管显示“----〞。
其中包括走时转换函数,负责将定时器走时数据转换为分钟的十位和个位,超过60分钟的数据再转换为小时的十位和个位。
在计时子函数中,设置每50ms中断1次,秒计数器中计数值为200时,时间为1分钟。
分钟计数器计数值为60时,时间为1小时预约时间到,单片机P3.6引脚输出低电平,驱动三极管饱和导通,继电器的线圈中有电流经过,从而产生吸合动作,接通电源,用电器开场工作。
〔程序见附录2〕
总结
经过几周的辛苦设计,现在终于可以画上一个圆满句号了。
回想起来做毕业设计的整个过程,其中有苦也有甜。
毕业设计的难度不仅是检验大学所学的深度,也是对自己能力的一种提高。
下面我对整个毕业设计的过程简单的做一下总结。
首先,进展选题选定。
选题是毕业设计的开端,选择恰当的感兴趣的题目,这对于整个毕业设计是否能够顺利进展关系极大。
好比走路,开场的第一步具有决定意义的,第一步迈向何方,需要慎重考虑。
否那么,就可能走许多弯路、费许多周折,甚至可能做的全是无用功。
参考文献
[1]戴佳戴卫.51单片机C语言应用程序设计实例精讲.电子工业,2006
[2]余宏生.吴建立.电子CAD技能实训.人民邮电,2006
[3]贵庭.单片机应用技术及工程化训练.西南交通大学,2009
[4]建清.从零开场学单片机C语言.国防工业,2006
[5]钟富昭等.8051单片机典型模块设计与应用[M].人民邮电,2007
[6]乃夫.可编程控制器原理、应用、实验[M].:
中国轻工业,2003.
[7]章文浩.可编程控制器原理及实验[M].:
国防工业,2003.
[8]谭浩强著.?
C语言设计〔第三版〕?
清华大学
[9]王洪庆主编.?
微型计算机控制技术?
机械工业.2012.9
[10]王静霞主编.宏丽俐副主编.?
单片机应用技术C语言版?
电子工业.2012
[11]朱定华.单片机原理及接口技术实验[M].:
北方交通大学,2002
[12]何立民.MCS—51系列单片机应用系统设计系统配置与接口技术[M].:
航空航天大学出版社,1999.
致
首先要感在大学两年半教育我的教师,没有他们给予我扎实的根底,我想我是不能完成这次毕业设计的。
在这两个多月的毕业设计中,我真诚地感教师和同学们的帮助,在他们的帮助下我顺利的完成了此次毕业设计。
在本次设计过程中学明教师始终给予了我无私的帮助,在最开场的设计思路的构建、资料的选取等是我能顺利完成这次设计的关键。
附录1
系统仿真原理图
附录2
主程序
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitKEYON=P2^0;//开场键
sbitKEYOFF=P2^1;//关闭键
sbitKEYSET=P2^2;//预约键
sbitKEYINC=P2^3;//加1键
sbitKEYDEC=P2^4;//减1键
sbitKEYFREE=P2^5;//预留键
sbitPOWER=P3^6;//电源开关指示灯
sbitLED=P3^3;//按键指示灯
ucharcodedispcode[]={0x3f,0x06,0x05b,0x4f,0x66,
0x6d,0x7d,0x07,0x7f,0x6f,0x40};//0-9的字型码
uchardatadisbuf[]={0,0,0,0};//显示缓冲区
ucharhour,min;//小时、分变量
bitOnflag,flag;
ucharSetflag;
voiddelay(uchar);//延时子函数
voidinit(void);//定时器初始化子函数
ucharGetKeyNum();//求按键号
voidKeyprocess(uchar);//按键处理子函数
voidcalculate();//计时子函数
voiddisplay();//显示子函数
//--------------------主函数-------------------------
voidmain(void)
{
init();
P1=0x00;
while
(1)
display();
}
//-------------定时器TO、T1初始化,外部中断0初始化子函数-----
voidinit()
{
TMOD=0x11;//TO、T1作定时器、工作方式1
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
IT0=1;//选择外部中断0为下降沿触发方式
EX0=1;//开外部中断0
ET1=1;//开定时器1
ET0=1;//开定时器0
EA=1;//开总中断
TR0=1;
}
//----------显示子函数--------------------------
voiddisplay()
{
uchari,j=0x08;
if((Setflag==0)&&!
(min|hour))//数码管显示“----〞
{
for(i=0;i<4;i++)disbuf[i]=dispcode[10];
}
else//正常显示时间
{
disbuf[0]=dispcode[min%10];//分个位
disbuf[1]=dispcode[min/10];//分十位
disbuf[2]=dispcode[hour%10]+0x80;//小时个位
disbuf[3]=dispcode[hour/10];//小时十位
}
if((Setflag!
=0)&flag)//如果调时,数码管闪烁显示
{
for(i=0;i<4;i++)
{
if((disbuf[i]==0x3f)&&(i>2))//不显示前面的0
P0=0;
else
P0=disbuf[i];
if(Setflag==1)P1=j&0xfc;//调时,关断前两位位码
elseP1=j&0xf3;//调分,关断后两位位码
delay(5);//延时2.5ms
P1=0x00;
j=j>>1;
}
}
else//数码管正常显示
{
for(i=0;i<4;i++)
{
if((disbuf[i]==0x3f)&&(i>2))P0=0;//不显示前面的0
elseP0=disbuf[i];
P1=j;//位选通
delay(5);//延时2.5ms
P1=0X00;
j=j>>1;
}
}
}
//--------------外部中断0中断函数---------------------------------
voidint0()interrupt0using0
{
ucharkeynum;
display();//动态显示程序作为去抖动
if(INT0==0)//判断是否有按键按下
{
keynum=GetKeyNum();//有效键,获取键值
while(INT0==0);//等待按键释放
Keyprocess(keynum);//按键处理
}
}
//-----------------定时器0中断子函数----------------------------
voidtime0()interrupt1//处理调时、显示器闪烁
{
staticucharledt,num;//设置静态变量
TH0=(65536-50000)/256;//定时50ms
TL0=(65536-50000)%256;
if((Onflag&&((hour|min)!
=0))|!
Onflag)//指示灯每隔0.5s闪烁
{
ledt++;
if(ledt==10)//10X50mS=0.5S
{
ledt=0;
LED=~LED;
}
}
if(Setflag!
=0)//调时闪烁
{
num++;
if(num==5)
{
num=0;
flag=~flag;
}
}
}
//-------------定时器1中断子函数-------------------
voidtime1()interrupt3
{
TH1=(65536-50000)/256;
TL1=(65536-50000)%256;
calculate();//计时
}
//-----------------求按键号-------------------------------
ucharGetKeyNum()
{
uchartemp;
if(KEYON==0)temp=1;
if(KEYOFF==0)temp=2;
if(KEYSET==0)temp=3;
if(KEYINC==0)temp=4;
if(KEYDEC==0)temp=5;
if(KEYFREE==0)temp=6;
return(temp);
}
//--------------------按键处理函数----------------------------
voidKeyprocess(ucharx)
{
switch(x)
{
case1:
//KEYON处理函数
Onflag=1;//开Onflag标志
Setflag=0;//关〔Setflag〕调时标志
if((!
Setflag)&&!
(hour|min))//没有调时且未处于预约,继电器通
{
POWER=0;
LED=0;
}
else
TR1=1;//定时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 定时 开关 控制器