单片机控制照明电路设计.docx
- 文档编号:11782427
- 上传时间:2023-04-01
- 格式:DOCX
- 页数:43
- 大小:415.53KB
单片机控制照明电路设计.docx
《单片机控制照明电路设计.docx》由会员分享,可在线阅读,更多相关《单片机控制照明电路设计.docx(43页珍藏版)》请在冰豆网上搜索。
单片机控制照明电路设计
1绪论
1.1课题的意义
单片机控制照明电路具有自动化,智能化等特点。
这样,白炽灯就会按照人们设计的程序工作,从而满足人们的要求。
此外,单片机不仅便宜,适应性也强,广泛应用于智能仪表,数据采集系统,控制系统等许多场合。
在灯光控制方面,随着社会的不断发展,人们希望灯光不仅作为一种单调的照明工具,还能有更多的变化。
如灯光亮度可调,自动定时开关灯,尽可能省电等等。
本设计主要用于鸡舍的灯光控制。
课题涉及单片机,数字电路,电力电子等。
这为我们运用所学知识提供了很好的磨练机会。
近年来,我国养殖业得到了快速发展。
为使鸡多产蛋,肉鸡生长加速,除了精心喂养外,鸡舍每天应保证16h的光照,仅靠自然光照不能满足需要。
通常鸡舍在黎明和傍晚开灯,以延长光照时间。
目前,多数养鸡场鸡舍的灯光扔由人工用闸刀控制,傍晚鸡舍光线变暗时开灯,晚上9点左右关灯,黎明前5点左右再开灯,天亮后再关灯。
依靠人工手动控制有不少弊端,现已有一些鸡场的灯光控制采用定时自动开关控制,可节省人力,开关时刻也相对准确。
1.2单片机照明控制的应用前景及趋势
单片机控制范围大,大多数用于大型场合,适用于集中控制可以节省大量的时间和人力资源。
对于普通用户而言,则实用性不高。
首先,小型用户操作照明控制系统就比较困难,不能充分发挥该系统的作用。
其次,小型用户本身管理难度不大,即使使用手动开关也不会占用他们太多的时间。
因此他们还是会选择普通开关,而不是单片机控制的照明系统。
单片机照明系统的应用依然不容乐观。
这就要求该系统必须向小型化、易操作的方向发展。
进而满足广大用户的需求。
1.3课题研究方向
本设计中使用MCS-51单片机实现对养鸡场灯光的夜间间歇控制,使其能满足白天不亮,夜间亮,亮与灭是间歇的。
另外,开灯,亮与灭以及渐熄的时间长短是可调的。
这一系列功能是通过软件与硬件相结合方法来完成的。
根据设计的不同要求,所有的控制设定都可以进行相应地改变。
这个设计的目的是用于鸡舍的灯光控制,因为灯光对肉鸡的生长至关重要,因此控制好灯光可让鸡更好的生长。
2总体设计
2.1设计要求
本设计利用单片机为控制核心,制作一个简易的灯光控制系统,实现时间参数的实时显示,白天熄灯;夜间开关灯可交替。
开灯时间可在15分钟到1小时之间可调;关灯时间在2小时到6小时之间可调。
选择AT89S52作为核心控制系统、DS1302芯片提供时钟定时功能、四脚按键以及4只数码管作为显示。
设计要求:
1、在手动控制状态,通过设在面板上的按钮可以随时进行手动控制开关灯、定时等操作。
2、在自动控制状态,系统会按照所设计的程序有条不紊的执行,不需要人工24小时看守。
2.2系统结构
本系统主要是复位电路、时钟电路模块、键盘电路模块、显示电路、照明电路这几个部分组成的。
其中主要用到:
单片机、数码管、时钟芯片、按键、继电器等部件。
根据灯光控制器的功能要求,以AT89S52为核心控制电路系统。
系统总体结构框图如图1所示。
(1)单片机芯片,AT89S52所要求的电压比较低,能以3V的超底压工作,但性能却很优越,可以编程也可以擦除。
单片机的EEPROM可擦除重复1000次,而CPU和诸多功能模块组合在一个闪存芯片里面,AT89S52单片机则就显得更为轻巧,能为更多的嵌入式系统提供合适的解决方法。
(2)时钟芯片,选择DS1302时钟芯片。
单片机计时,要用到计数器占用硬件资源,还要设置中断、查询等操作也会占用单片机资源。
时钟芯片DS1302能很好的解决这个问题。
(3)显示模块,选用由发光二极管和小数点形成的“8”字型数码管。
它具有价格低、优良的配置、而且很方便与单片机接口等顺应人们需求的优点。
驱动方式选择动态显示。
(4)按键模块,选择独立式按键。
本设计用到五个按键,分别是选择键、加键、减键、确定键以及定时开关键。
图1系统结构框图
3硬件设计
3.1芯片及元器件介绍
3.1.1AT89S52单片机芯片
单片机引脚功能介绍
VCC:
电源电压。
GND:
接地。
PO口:
此端口占有8位,而且不是单向的。
如果内存芯片连接外部,可以用来作为一种低8的地址线和数据线;在ROM编程状态下,它是输入的,而在验证状态下,则是输出的。
最多能够驱动8个LSTTL门电路。
P1口:
此端口占有8位,而且不是单向的,既拥有上拉电阻又可以充当I/O口。
在ROM编程和验证的状态下,只占有低8的地址。
P2口:
此端口占有8位,而且不是单向的,既拥有上拉电阻又可以充当I/O口。
如果单片机连接外部的存储器,它送出高8位的地址。
在ROM编程和验证的状态下,它将占有高8位的地址,同时还可以接受控制信号。
能作用于4个LSTTL的门电路。
P3口:
此端口占有8位,而且不是单向的,既拥有上拉电阻又可以充当I/O口。
能作用于4个LSTTL的门电路。
此引脚还有第二功能,在日常生活里,大多数情况下都不会用第一功能。
具体情况如下表所示:
P3.0RXD(串行接收)
P3.1TXD(串行发送)
P3.2INTO(外输0个中断)
P3.3INT1(外中断1输入)
P3.4T0(定时0计输入)
P3.5T1(定时1计输入)
P3.6WR非(外RAM写选)
P3.7RD非(外ROM读选)
P3口还可用于接板信号。
RST:
复位输入接口,在高电平的时候才能工作。
在振荡器启动的情况下,高电平显示能够超过两个周期,就可以复位。
当89C51能够工作后,ALE端将放出只有正常振荡六分之一频率的正向脉冲,如果示波器能够探查出,那么就可以确定该芯片是好的。
51单片机连接外存储时,P0可以占有地址,也可以作用于数据信号。
此时就要看有没有ALE信号了,一旦有,那么低8位地址就是有用的。
反之,则是传输的数据信号。
ALE信号可在外部的情况下输出时钟或者是定时的信号。
但要记住的是,如果接到外存储,将会自动过滤掉一个ALE的脉冲。
可以驱动8个LSTTL门电路。
PSEN非:
可以判断外程序存储的读选端口。
当访问外部的程序存储器时,一旦取得指令,一个机器周期内要有两次有效的输出信号。
EA非/VPP:
内、外ROM选择。
只有此端口为高电平,CPU才会访问内程序存储;当然超过容量的特殊情况下,会自动接到外程序存储。
反之低电平时,CPU不会去理会内部的程序存储,只会关注外部的程序指令。
但要记住的是,如果是编程LB1的话,在复位过程中会将此端口的状态进行锁存。
XTAL1:
一个可以接外晶和电容的端口。
在外振荡的状态下,此引脚外部输入的是时钟脉冲。
XTAL2:
另一个可以接外晶和电容的端口。
在外振荡的状态下,此引脚是悬浮的。
3.1.2继电器
本系统中电磁继电器作为主要的控制器件。
由于本系统中,照明电路中需要用到继电器来控制电路。
把继电器的一端接上一个可以发光的二极管和一个一千欧姆大小的电阻,这里的电阻起到了限流的作用。
如果在电路运行的时候,发光二极管发光,此时继电器的线圈上有电流。
同时,在电路中还需要并联一个普通的二极管。
它的作用主要是使得一些元器件能够正常工作。
本电路采用5V大小的继电器。
3.2时钟电路
单片机系统里面都有晶振,他就好比单片机的心脏,在单片机系统里面他是不可缺少的一部分,它全称晶体振荡电路。
把定时元件外接在XTAL1、XTAL2引脚上,使单片机内部的振荡电路产生自激振荡。
经常使用的内部时钟方式是选用电容和晶振组成的并联谐振回路。
振荡晶体可在1.2~12MHz范围内选择电容大小可以起到频率微调的作用。
本系统中,选用30pF大小的电容,外接32.768KHz晶振,Vcc1为后备电源,Vcc2为主电源。
即使主电源关闭,时钟也能照常运行。
Vcc1或Vcc2两者中较大的会自动给DS1302进行供电。
如果在传送过程中RSTS置为低电平,就会终止此次数据传送,I/O引脚变为高阻态。
上电后,在Vcc>2V之前,RST要保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
SCLK为时钟输入端。
电路如图2所示。
图2时钟电路
3.3复位电路
单片机的初始化操作首先需要复位,然后才是程序初始化。
它的主要是为了让程序从AT89S52的初始地址0000H处开始执行。
除系统的正常初始化状态外,有时因为操作的错误或者程序的运行发生错误,系统会发生死锁。
这个时候就需要使用按复位键,重新启动系统,这样可以有效的解决死锁状态。
AT89S52单片机内部自带复位电路,RESET引脚是高电平的时候有效,可以通过自动复位或手动复位两种复位方式来进行复位操作。
本设计系统中是低电平有效复位,用户开机的时候就启动复位操作,在+5伏时进入工作状态。
复位电路如图3所示。
图3复位电路
3.4键盘电路
键盘电路如图4所示,单片机P2口用来信号输入,当S1,S2,S3,S4,S5开关其中的任何一个按下时,其对应的P2.0,P2.1,P2.2,P2.3,P2.4口就会为低电平,然后进行单片机相应的操作。
具体实现的功能为:
S1—选择所需调整的时间参数,S2—加时间,S3—减时间,S4—确定参数设定,S5—控制定时的开与关。
按确定键将依次显示时间和各个定时时段,接着按选择键就可以选择要调整的时间(时、分、秒)按加(减)键就可以调整时间或重新定时。
最后,按下确定键,就完成了对参数的设定。
调整时间步骤如下:
1按下确定键,数码管显示当前时间,并停留不动
2按下选择键,数码管显示所选时间,两位数字闪动。
3按加键或减键,自由调整时间,长按则加快增加或减少。
调整定时和调整时间方法一样。
图4键盘电路
3.5数码管显示电路
显示电路是时钟模块中最为重要的部分,因为端口的问题以及动态显示方式的优越性,本系统采用的一个四位数码管,使用共阳极接法以及动态显示,以三极管作为驱动进行数码管的显示。
在本设计中的数码管是显示当前时间和定时时间,因为按键设置有加键和减键,所以先要对数据进行存储然后进行累加或减。
我们把数码管先连接到74LS373锁存器上,然后把锁存器连接到单片机AT89S52上。
在本系统中数码管的所有段选码都由单片机的P1口给出,位选信号由P0.0、P0.1、P0.2和P0.3口控制。
在每一时刻,4位LED可能会显示相同的内容,所以要用扫描显示来使一位亮而其他三位暗,周期为2ms。
由于采用的是共阳极方式,低电平才有效,则要其中一个基极为低电平,三极管导通,集电极为低电平,位选打开,数码管显示。
而段选码由P1口8位I/O口控制,高电平时对应的段被点亮。
在此瞬间,段选码由P2口输出相应的字符电平,P0.0、P0.1、P0.2和P0.3口输出位选码,来保证显示相应的字符。
以此类推,每位进行显示后延时一会,构成视觉暂留,这样看起来就像是一起显示出来的。
如图5所示。
图5显示电路
3.6照明电路
照明电路采用白炽灯进行照明,因为白炽灯额定电压为220V,可根据实际情况并联多个。
继电器K1受时钟电路控制。
照明灯泡使用继电器作为开关驱动照明电路。
J1开关断开时,继电器工作;当J1导通时,继电器控制电路失效,实现人工手动控制。
三极管为使继电器工作股接在继电器的控制端。
由于单片机输出的是低电平信号有效股选用PNP型三极管,当单片机输出低电平是三极管导通,电流流入继电器,使继电器工作,从而控制照明电路的亮灭,其电路连接图如图6所示:
图6照明电路
3.7单片机系统电源设计
+5V电压源主要为元器件和工作电路提供稳压源。
电源(VCC)是整个系统正常工作的根本。
过大的电源电压会更大程度的缩短芯片的寿命,甚至会损坏芯片和其它元器件;过小的电源又不能驱动电路工作。
所以设定电源电压合适的值非常重要的。
本电路主要芯片工作的电压都在+5V左右,因此在整个电路板中采用W7800三端稳压芯片将+12V的电压整形为+5V直流电压。
用W7800设计的+5V稳压电源电路图如图7所示:
图7供电直流电源
4软件设计
4.1主程序流程框图
本设计采用C语言,在主程序中,主要实现程序初始化,按键处理,时间的动态显示。
当有键按下时,进入按键处理程序。
Y
N
4.2延时子程序设计
延时程序主要对数码管的显示和按键的扫描进行延时操作。
延时的时间可选5ms~10ms,具体程序如下:
voidDelay(uintnum)
{
while(--num);
}
4.3时间读取和显示子程序设计
用DS1302时钟芯片来读取时间,然后依次显示在四位数码管上。
时间的读取和显示流程图,如图8和图9所示。
Y
Y
N
N
图8DS1302读取时间流程图
图9LED显示时间流程图
4.3.1显示数据子程序
数码管显示初始化程序如下
Voidinitlcm(void)//初始化
{
Delay_xMs(10);//功能设置:
一次送8位数据。
sendCMD(0x04);//点设定:
显示字符/光标从左到右移动
sendCMD(0x0f);显示设定:
开显示,显示光标和当前显示位并闪动
sendCMD(0x01);//清DDRAM
sendCMD(0x02);//DDRAM地址归位
sendCMD(off_cursor);//关光标
4.4DS1302驱动程序
//寄存器宏定义
#defineWRITE_SECOND0x80
#defineWRITE_MINUTE0x82
#defineWRITE_HOUR0x84
#defineREAD_SECOND0x81
#defineREAD_MINUTE0x83
#defineREAD_HOUR0x85
#defineWRITE_PROTECT0x8E
//初始化DS1302
voidInitial(void)
{
Write1302(WRITE_PROTECT,0X00);//禁止写保护
Write1302(WRITE_SECOND,0x56);//秒位初始化
Write1302(WRITE_MINUTE,0x34);//分钟初始化
Write1302(WRITE_HOUR,0x12);//小时初始化
Write1302(WRITE_PROTECT,0x80);//允许写保护
}
//位寻址寄存器定义
SBITACC_7=ACC^7;
//管脚定义
SBITSCLK=P3^5;//DS1302时钟信号7脚
SBITDIO=P3^6;//DS1302数据信号6脚
SBITCE=P3^7;//DS1302片选5脚
//地址、数据发送子程序
voidWrite1302(unsignedcharaddr,dat)
{
unsignedchari,temp;
CE=0;//CE引脚为低,数据传送中止
SCLK=0;//清零时钟总线
CE=1;//CE引脚为高,逻辑控制有效
//发送地址
for(i=8;i>0;i--)//循环8次移位
{
SCLK=0;
temp=addr;
DIO=(bit)(temp&0x01);//每次传输低字节
addr>>=1;//右移一位
SCLK=1;
}
//发送数据
for(i=8;i>0;i--)
{
SCLK=0;
temp=dat;
DIO=(bit)(temp&0x01);
dat>>=1;
SCLK=1;
}
CE=0;
}
//数据读取子程序
unsignedcharRead1302(unsignedcharaddr)
{
unsignedchari,temp,dat1,dat2;
CE=0;
SCLK=0;
CE=1;
//发送地址
for(i=8;i>0;i--)//循环8次移位
{
SCLK=0;
temp=addr;
DIO=(bit)(temp&0x01);//每次传输低字节
addr>>=1;//右移一位
SCLK=1;
}
//读取数据
for(i=8;i>0;i--)
{
ACC_7=DIO;
SCLK=1;
ACC>>=1;
SCLK=0;
}
CE=0;
dat1=ACC;
dat2=dat1/16;//数据进制转换
dat1=dat1%16;//十六进制转十进制
dat1=dat1+dat2*10;
return(dat1);
}
4.5扫描键盘子程序设计
键盘的操作,无论是按键或键盘都是利用机械点的合、断作用。
由于机械触点的弹性作用,CPU可能对键的一次闭合,做出两次键输入处理,此时必须消除抖动的影响来防止这种错误发生。
去除抖动有硬、软件两种方法。
如果按键较多,最好不要采用硬件去抖。
而软件去抖动可以节省硬件花费,实用性和有效性高,所以常采用软件的方法进行消抖。
进行初始化后,实际键值参数变为1FH(连接的是P2口的0,1,2,3,4,初始化即为此值),由于抖动的原因,为确保是有键按下,则必须进行两次比较。
第一次扫描,P2、1FH相等则说明没有按下键,不相等则用软件消除抖动,延迟10毫秒后进行第二次。
若相等则说明之前的现象并不是按键所引发的,如果不相等则表明确实有按键这个动作发生。
具体代码为:
voidkey()
{
staticucharkey_new;
key_can=20;
P2|=0xf0;
if((P2&0xf0)!
=0xf0)//按键按下(第一次)
{
Delay(10);
if(((P2&0xf0)!
=0xf0)&&(key_new==1))
{//确认是按键按下(第二次)
key_new=0;
switch(P2&0xf0)
{
case0xe0:
key_can=1;break;
case0xd0:
key_can=2;break;
case0xb0:
key_can=3;break;
case0x70:
key_can=4;break;
}
}
else
key_new=1;
}
}
键盘主要有独立式和矩阵式两种,独立式按键电路配置灵活,弊端是I/O口浪费较大,适用于键盘较少的电路。
键盘程序作为主程序的一部分,通过查询方式读取键盘动作,根据读取的值,键盘进行相应操作处理程序。
键盘扫描子程序流程图如图10所示。
N
Y
N
Y
图10键盘扫描子程序流程图
4.6时钟子程序
#include
#defineucharunsignedchar
#defineuintunsignedint
uchardispcode[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71,0x00};//定义0到F的段选码
uchardispbitcode[]={0xfe,0xfd,0xfb,0xf7,
0xef,0xdf,0xbf,0x7f};//数码管的位选码
uchardispbuf[8]={0,0,16,0,0,16,0,0};//定义一个缓冲区
uchardispbitcnt;
ucharsecond;
ucharminite;
ucharhour;
uinttcnt;
ucharmstcnt;
uchari,j;
voidmain(void)
{
TMOD=0x02;//定时器0工作方式2
TH0=0x06;//每250us中断一次
TL0=0x06;
TR0=1;//启动定时器0
ET0=1;//定时器0中断允许
EA=1;//CPU开中断
while
(1)
{
if(P0_0==0)
{for(i=5;i>0;i--)
for(j=248;j>0;j--);//延时检查是否是P0_0被按下
if(P0_0==0)//如果被按下
{
second++;//秒就加1
if(second==60)
{
second=0;
}
dispbuf[0]=second%10;//存放秒的个位
dispbuf[1]=second/10;//存放秒的十位
while(P0_0==0);//等待P0_0变高
}
}
if(P0_1==0)
{for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_1==0)
{
minite++;
if(minite==60)
{
minite=0;
}
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
while(P0_1==0);
}}
if(P0_2==0)
{
for(i=5;i>0;i--)
for(j=248;j>0;j--);
if(P0_2==0)
{
hour++;
if(hour==24)
{
hour=0;
}
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
while(P0_2==0);
}}}}
voidt0(void)interrupt1using0//定时器0中断服务程序
{
P1=dispcode[dispbuf[dispbitcnt]];//为位选码
P3=dispbitcode[dispbitcnt];//为段选码
dispbitcnt++;
if(dispbitcnt==8)
{
dispbitcnt=0;
}
tcnt++;
if(tcnt==4000)//此时有一秒钟了(4000*250us)
{
tcnt=0;
second++;
if(second==60)
{
second=0;
minite++;
if(minite==60)
{
minite=0;
hour++;
if(hour==24)
{
hour=0;
}
}
}
dispbuf[0]=second%10;
dispbuf[1]=second/10;
dispbuf[3]=minite%10;
dispbuf[4]=minite/10;
dispbuf[6]=hour%10;
dispbuf[7]=hour/10;
}
}
5原理图绘制和仿真
本次论文设计的原理图绘制所采用的软件是protel99se,而原理图仿真采用的是proteus软
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 控制 照明 电路设计