基于单片机的定时开关设计.docx
《基于单片机的定时开关设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的定时开关设计.docx(23页珍藏版)》请在冰豆网上搜索。
![基于单片机的定时开关设计.docx](https://file1.bdocx.com/fileroot1/2022-11/27/0caca077-9859-4a94-a3bb-936a441266be/0caca077-9859-4a94-a3bb-936a441266be1.gif)
基于单片机的定时开关设计
0前言.1
1总体设计方案.2
1.1单片机定时开关方案设计2
1.2单片机定时开关的功能.2
2硬件电路设计.3
2.1电源电路.3
2.2手动复位电路3
2.3晶振电路4
2.4液晶显示电路4
2.5键盘控制电路5
2.6继电器电路5
2.7报警电路6
3软件设计.6
3.1定时开关主程序流程6
3.2时钟程序设计7
3.3人机界面程序设计7
4调试分析.8
5结论及进一步设想.9
参考文献.9
课设体会.10
附录1电路原理图11
附录2程序清单12
基于单片机的定时开关设计摘要:
随着家用电器的越来越普及和人们生活节奏的加快,人们对电器的依赖性进一步提高,对电器的定时需求也进一步增大。
定时开关的使用能够做到节能、安全、方便等。
本文首先介绍定时开关设计要实现的功能,接着阐述系统电路的设计及原理说明,包括设计方案选择、关键元器件介绍、电路设计说明(包括电源电路、键盘、单片机控制电路、液晶1602显示、继电器工作电路)软件设计流程以及系统的测试。
最后总结了定时开关设计完成的任务,分析系统的不足并提出了系统的应用展望。
关键词:
定时开关;1602液晶;键盘;继电器
0前言
现如今,生活水平提高,生活节奏加快,市面上的开关往往由于其功能过于单一而不能满足我们的需求。
比如:
学校的起床广播因值班人员睡过头而推迟广播;家中的鱼缸因太久没有供氧造成鱼儿缺氧死亡;许多球迷或者新闻爱好者因为错过了开机时间而与精彩球赛或者新闻擦肩而过等等。
随着电器产品待机能耗的迅速增长,家庭和社会付出了太多的代价,中国节能认证中心对家庭待机能耗做过的调查显示,待机能耗占到家庭电力消耗的10%左右,仅以电视
机为例,平均每台电视机的待机能耗是8.07W,按每天待机2小时大约耗电0.016度。
除此之外,长期通电会使家用电器电路老化,降低了电器的使用寿命,还容易漏电引发火灾。
据公安和消防部门有关资料显示,全过平均每天发生火灾358起,其中电器火灾占30%以上,其主要原因是超负荷、短路、电弧等。
大多数情况下并不是我们不去关闭电源,而是由于忘记了切断电源。
综合以上原因考虑,我们急需要一款智能定时开关。
此开关能够实现定时给电器供电,在工作时间之外把电器的电源切断,这样就能解决电器的待机损耗,达到节约用电的目的,还能消除安全隐患,最终使我们的生活更加方便化、智能化。
定时开关是一款能在特定时间段内控制电器通、断电的开关。
能实现24小时制走时模式,定时时间范围最小为1分钟。
本文阐述了定时开关的硬件电路设计、软件算法设计,给出了定时开关的设计和定型方案,它可以对家中一些需要在特定时间工作的电器进行自动断、通电控制,减少电器的待机损耗,解决生活中的一些烦恼。
1总体设计方案
1.1单片机定时开关方案设计
采用一种以STC89C51为核心的单片机控制方案。
选用单片机AT89S51作为本设计的核心元件,利用单片机灵活的编程设计和丰富的IO端口,及其控制的准确性,实现基本的定时控制功能。
在单片机的外围电路外接输入键盘及1602液晶用于构造人机交互界面以设置各个参数。
其原理如下图1.1所示:
图1.1单片机定时开关原理图
1.2单片机定时开关的功能
系统总体设计主要实现以下功能:
(1)人机交互界面:
通过1602液晶显示屏,与独立按键建立起一套完善的人机交互界面。
可以用于设置定时的参数。
查看定时参数,显示时间。
(2)设置定时时间:
用户通过人机交互界面,查找到设定时间界面,设置对应的每一组的定时和延时时间。
(3)设置现实时间:
由于各种外界因素会导致系统现实时间与实际现实时间相异,系统支持修改系统现实时间。
用户通过人机交互界面,查找到设定时间界面,设置系统现实时间。
(4)提示与报警:
当到达设定时间时LED显示灯熄灭以提示用户定时开始,当设定时间结束后实现用蜂鸣器报警。
2硬件电路设计
实现本设计要求的具体功能,可以选用AT89C51单片机及外围器件构成最小控制系统,包括电源电路、手动复位电路、晶振电路、液晶显示电路、键盘控制电路、继电器电路、报警电路。
2.1电源电路
图2.1电源电路图
系统要提供稳定的直流5V供单片机及其所控制的外围电路用220V交流电经过变压器降压后经7805稳压后给单片机控制系统供电。
2.2手动复位电路
图2.2手动复位电路复位电路分为上电自动复位和按键手动复位,RST引脚是复位信号的输入端,复位信号
是高电平有效.上电自动复位通过电容C3和电阻R1来实现,按键手动复位是由图中复位键
来实现的
2.3晶振电路
图2.3晶振电路
由于系统需要计算精确时间,生单片机工作所需要的时钟信号,号控制下严格地按照时序工作。
所以该模块使用了一个12MHz的晶振。
时钟电路用于产为了保证同步工作方式的实现,电路应在唯一的时钟信
2.4液晶显示电路
图2.4液晶显示电路
本设计选用的1602液晶为16管脚液晶,即带背光液晶。
与单片机接口设计如下:
7—14:
连接P0端口;4:
连接P2.2;5;连接P2.1;6:
连接P2.0。
2.5键盘控制电路
图2.5键盘控制电路
本设计采用了独立键盘设计,只是用了4个独立按键与单片机I/O口连接,利用简单的逻辑方式实现了人机交互界面。
2.6继电器电路
图2.6继电器电路
单片机是一个弱电器件,一般情况下它们大多工作在5V甚至更低‘驱动电流在毫安级以下。
而要把它用于一些大功率场合,显然是不行的。
所以就要有一个环节来衔接,这个环节就是所谓的“功率驱动”。
继电器驱动就是一个典型的、简单的功率驱动环节。
图中三极管8550有两个作用:
一个是起放大作用,一个是起开关作用。
当单片机给出低电平时,三极管处于导通状态,并起放大作用,这样,继电器就能得到足够的驱动电流来正常工作。
当单片机给出高电平时,三极管不工作,继电器因没电流通过而不工作。
二极管4148起到保护作用。
2.7报警电路
本设计报警电路由单片机I/O口经三极管控制蜂鸣器进行报警
3软件设计
3.1定时开关主程序流程
在本次设计中,主程序主要是在单片机的控制下,建立人机操作界面,对设定时间进行储存分析,驱动液晶显示出相关信息,并通过对比分析定时时间与时钟,控制继电器的通、断,从而达到控制开关的通、断电。
在这个过程中,单片机首先进行初始化,包括设置单片机各个端口的方向,各个变量的初始化,液晶显示初始化、继电器断开以及单片机振荡频率的校准等。
整个系统软件设计的流程图如图3.1所示。
图3.1主程序流程图
3.2时钟程序设计
单片机AT89C51内的定时器0和定时器1能准确定时一段时间。
故用定时器0定时,1都是定时50ms中断一
3.2
并通过计算定时次数来实现时钟走时。
本设计定时器0和定时器次,中断20次就能实现一秒钟。
整个系统软件设计的流程图如图
开始
图3.2时钟程序流程图
所示。
是指人和机器在信息人机界面程序流程图如图
3.3人机界面程序设计
人机界面是人与计算机之间传递、交换信息的媒介和对话接口交换和功能上接触或互相影响的领域或称界面所说人机结合面,
3.3
结束
图3.3人机界面服务流程图
所示。
4调试分析
系统调试:
将程序放入KeiluVision4中进行编译调试,若调式无误通过,与Proteus软件连在一起进行调试。
通过键盘设置现在时间和开关打开时间以及开关通电时长,设置完成,系统正常工作如图4.1所示。
图4.1系统调试图
当时间到达开关打开时间时,继电器开关吸附闭合,电路通电并且日光灯亮。
如图
4.2所示。
图4.2系统调试图
5结论及进一步设想
本次设计是一个基于单片机AT89C51的定时开关设计,包括方案选择、软硬件设计、单片机最小系统、继电器驱动电路和键盘电路调试、硬件测试结果及解决在电路调试时遇到的问题。
本次设计完成了一款定时开关系统。
该系统采用51单片机STC89C51编程控制继电器的通、断来实现控制开关的通、断电,而继电器的通、断由定时组别确定。
在定时范围内继电器导通,否则断开。
并用LCD1602显示出时钟及定时时间等信息。
当时钟走到定时开始时间时,继电器接通,开关给负载供电;时钟走到定时结束时间时,继电器断开,开关停止给负载供电。
总的来说,本次设计还是比较成功的,各项指标都符合设计要求。
但也存在不足,例如可以用一个按键实现多个功能,这样子按键数目就会大大减少,减小系统的体积。
电源部分可以用高频磁芯代替变压器,这样设计出来的电源重量及体积会更小,能使电源模块更加小巧玲珑,从而减小整个系统的重量及体积,便于使用等等。
1、通过此次课程设计,更熟练掌握C语言的编程方法,进一步熟悉了外部中断的使用方法。
通过使用仿真软件Proteus,深化了对软硬件联合调试的意义的理解,在仿真的过程中李老师更是指点了许多存在的问题,大大提高了我调试的效率。
2、通过定时控制系统的设计,熟练掌握了软件定时的使用方法,能够应用于不同场合,更节省了定时/计数器的资源。
3、通过显示系统的设计,掌握了LCD1062液晶显示器的应用,使得电路大大简化。
电路的简化在实际应用时使线路的可靠性进一步提高。
本次的单片机课程设计,使我们更进一步了解到单片机的优点和强大功能,在查找资
料的过程中,认识到单片微型计算机应用的广泛性和极高的性价比。
参考文献
[1]何立民.MCS-51系列单片机应用系统设计.北京:
北京航空航天大学出版社,1995
[2]薛钧义,张彦斌.MCS-51系列单片微型计算机及其应用.西安:
西安交通大薛出版社,1997
[3]丁元杰.单片微机原理及应用.北京:
机械工业出版社,1994
[4]元杰.单片机接口技术及应用.北京:
清华大学出版社,2005
[5]潘新民.微型计算机控制技术.北京:
人民邮电出版社,1999.9
[6]余锡存曹国华.单片机原理及接口技术.陕西:
西安电子科技大学出版社,2000.7
课设体会
本次课程设计,我深深体会到仅仅依靠课本知识是远远不够的。
在查找资料和实践的过程中,李老师为我指点了许多难以解决的问题,使我的知识水平大大提高。
特别是在编程的过程中,李老师丰富的经验也使得我受益匪浅,少走许多弯路。
此次单片机课程设计的软硬件联调过程使我们认识到自身知识及能力的薄弱,更让我知道实践的重要性。
在以后的学习过程中,我会更加努力学习相关知识和应用,真正能够运用单片机组成的微控制系统解决各种实际的问题。
最后,此次课程设计,在李老师的指导下,使我的知识水平有了较大的进步。
在对单片机应用较为广泛的各种系统中,对于单片机的理解也更为深刻。
此次设计过程中,使我的理论和实际能力都受益匪浅。
在此非常感谢李老师的悉心指导。
通过此次设计,我得到很多的经验教训,在以后的学习和工作中,我一定会更加用心,更加努力的,更加坚决的完成自己的任务!
[2014年1月10日完成]
附录1电路原理图
附录2程序清单
#include#defineuintunsignedint#defineucharunsignedcharunsignedintcnt_num;sbitrs=P2^0;
sbitrw=P2^1;sbitep=P2^2;sbitled=P2^5;
sbitk1=P3^0;sbitk2=P3^1;
sbitk3=P3^2;sbitk4=P3^3;sbitbz=P2^3;
sbitpower=P2^4;
ucharshi,fen,miao,a,b,c,d,e,f,teep,ling;
ucharcodetable[]={"0123456789:
"};
voiddelay(ucharz)//延时函数
{
ucharx,y;
for(x=10;x>0;x--)
//测试LCD忙碌状态
//写入指令数据到LCD
for(y=z;y>0;y--);}lcd_bz(){
uintresult;
rs=0;
rw=1;
ep=1;delay
(1);
result=P0&0x80;
ep=0;
returnresult;
}
voidlcd_cmd(ucharcmd)
{
while(lcd_bz());
rs=0;
rw=0;
ep=0;delay
(1);
P0=cmd;
delay
(1);ep=1;
delay
(1);
ep=0;
}
voidlcd_dat(uchardat)
{
while(lcd_bz());
rs=1;
//写入字符显示数据到LCD
rw=0;ep=0;
P0=dat;
delay
(1);ep=1;
delay
(1);
ep=0;
voiddisp_time(ucharx,uchary,ucharh,ucharm,uchars)
if(0==y)x|=0x80;//
elsex|=0xC0;//lcd_cmd(x);//lcd_dat(table[h/10]);//lcd_dat(table[h%10]);lcd_dat(table[10]);
lcd_dat(table[m/10]);//lcd_dat(table[m%10]);lcd_dat(table[10]);
lcd_dat(table[s/10]);//lcd_dat(table[s%10]);
}
当要显示第一行时地址码+0x80;在第二行显示是地址码+0xC0;
发送地址码
小时
voidlcd_init()
{
lcd_cmd(0x38);
delay
(1);
lcd_cmd(0x0c);
delay
(1);
lcd_cmd(0x06);
delay
(1);
lcd_cmd(0x01);
//LCD初始化设定
//
//
//
//清除LCD的显示内容
delay
(1);
while
(1)
{
if(teep==0)//每秒变化一次
{
disp_time(6,1,shi,fen,miao);
}
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
if(k1==0)//设置现在时间
{
EA=0;
lcd_cmd(0x01);//清屏
disp_later(0,0,"K2:
HK3:
MK4:
O",14);disp_later(0,1,"TIME:
",5);disp_time(6,1,shi,fen,miao);
while
(1)
{
while(k2==0)
{
delay
(1);
if(k2==1)
{
shi++;
if(shi==24)shi=0;disp_time(6,1,shi,fen,miao);
}
}
while(k3==0)
{
delay
(1);
if(k3==1)
{
fen++;
if(fen==60)fen=0;disp_time(6,1,shi,fen,miao);
}
}if(k2==0){lcd_cmd(0x01);disp_later(0,0,"start:
",6);//显示:
开始时间disp_time(6,0,a,b,c);
disp_later(0,1,"delay:
",6);//显示:
持续时间disp_time(6,1,d,e,f);
delay(10);while(k2==1)
{while(k1==0){
delay(10);if(k1==1){a++;if(a==24)a=0;disp_time(6,0,a,b,c);
}
}while(k2==0)
{
delay(10);
if(k2==1)
{
b++;if(b==60)b=0;disp_time(6,0,a,b,c);
}
}while(k3==0)
{
delay(10);
if(k3==1)
{d=d+1;if(d==60){
d=0;
c++;
if(c==24)
c=0;
}disp_time(6,1,c,d,e);
}
}
if(k4==0)
{
ling=1;disp_later(0,0,"1-SET2-AL3-SAL",16);disp_later(0,1,"TIME:
",5);disp_time(6,1,shi,fen,miao);
break;
}
}
}
if(k3==0)//显示闹铃时间
{
lcd_cmd(0x01);
disp_later(0,0,"start:
",6);//显示:
开始时间
disp_time(6,0,a,b,c);
disp_later(0,1,"delay:
",6);//显示:
持续时间
disp_time(6,1,c,d,e);
delay(10000);
lcd_cmd(0x01);//清屏disp_later(0,0,"1-SET2-AL3-SAL",14);disp_later(0,1,"TIME:
",5);
disp_time(6,1,shi,fen,miao);
}
if(ling==1)
{if(shi==a)
{
if(fen==b)
{
power=0;//开电源
led=1;
}
}
if(shi==a+c)
{
if(fen==b+d)
{
power=1;//关电源
led=0;
bz=0;
delay(1000);
bz=1;
lcd_cmd(0x01);//清屏disp_later(0,0,"1-SET2-AL3-SAL",16);disp_later(0,1,"TIME:
",5);disp_time(6,1,shi,fen,miao);
ling=0;
}
}
}
}
}
voidtimer0()interrupt1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
teep++;
led=0;
if(teep==20)
{
teep=0;
miao++;//秒加一
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
}
}
}
}
}忽略此处..