基于单片机的声光控制灯
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于单片机的声光控制模拟路灯
(程序部分)
前言:单片机是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。本次我们采用at89c51单片机设计一种基于单片机控制的声光控制模拟路灯。该灯有声控,光控,声光同时控制楼道灯三种模式,经过调查,现在绝大多数小区的楼道灯都是纯电路形式实现声光控制的,这较之智能控制缺乏功能多样性,稳定性,而未来肯定是智能化的天下,所以我们用单片机模拟这一个多功能灯的系统。
关键字:单片机,at89c51,智能社区,楼道灯
目录:
一、设计目的 (2)
二、总体设计 (2)
方案选择: (2)
三、硬件设计 (3)
原理说明: (3)
四、软件设计 (3)
主要程序清单: (3)
程序框图: (5)
五、实验结果 (6)
六、总结 (6)
通过此次设计,主要是为了巩固我们的单片机相关知识及对单片机的相关应用,培养电子系统设计与实践的能力,学会设计使用简易的声、光传感器,并能用这些传感器设计一个声光控制的路灯(楼道灯)。
完成功能:
1)、声控灯模式。当传感器接收到声音信号时,单片机控制灯亮,并在5秒后灯自动熄灭。
2)、光控等模式。当光电传感器接收到为暗光时,灯自动点亮,接收到为亮光时,等自动熄灭。
3)、楼道灯模式。声光控制结合,即模拟当天暗并且楼道里有人走过的时候灯自动点亮5秒后熄灭。
二、总体设计
此次设计的声光控制灯包括三个基本模块,即声音处理模块、光处理模块、单片机小系统。总体设计框图如下:
图1、总体设计框图
方案选择:
1)、单片机部分。由于此次设计对单片机的要求较低,所以我们选择最为常用的at89c51单片机作控制部分。
2)、声控部分
一:选择专用的声音传感器模块来完成,能得到正确的波形、电压、频率等参数,且设计电路简单省事,但成本较高。
二:用驻极体话筒通过相应的信号处理电路对声音信号进行处理,成本较低,但电路设计麻烦。
综上所述:我们选择方案二,因为此次设计对声音信号的波形等参数要求较小,只要单片机接收到并能判断为高电平即可。
3)、光控部分
一:用光敏二极管作光电元件,光敏二极管对光转换为相应的电流。
二:用光敏电阻作光电元件,光敏电阻对光转换为相应的电阻。
综上所述:我们选用光敏电阻作光控部分的核心元件,因为光敏二极管转换成的是电流,而我们需要判断的是电压信号,将电流转换为电压信号的电路较复杂。
总电路图如下所示:
图2、总电路图
原理说明:
1)、声控部分。声控主要是用一个驻极体话筒用于接收声音信号,然后经过一级放大将声音信号放大,然后再通过带通滤波器提取我们需要的频率的声音,最后经过过零比较器将信号整流成方波信号用于单片机接收判断高低电平。
2)、光控部分。光控主要是用光敏电阻作同向放大器的反馈电阻来控制放大器的放大倍数来控制其输出电压,当光亮时,光敏电阻阻值较小,放大倍数小,输出电压小,三极管截止,集电极连单片机脚为高电平,灯灭;当光暗时,光敏电阻阻值较大,放大倍数大,输出电压大,三极管导通,集电极连单片机脚为低电平,灯亮。
四、软件设计
软件设计主要是通过判断声控部分,光控部分与单片机I/O口相连的电平的高低来判断并执行灯的亮灭过程。一下是程序清单和程序框图:
主要程序清单:
void main(void)
{
TMOD=0x11;//定时器工作于方式1
TH0=(65536-50000)/256;//定时器50mS初值
TL0=(65536-50000)%256;
ET0=1;
EX0=1;//开外部INTO中断(时间调整)
IT0=0; //INT0负跳变触发
EA=1; //CPU开中断总允许
TR0=0;//启动定时
led=0;sound=0;light=1;
while(1)
{
if(key==0)
{
delay(30);
if(key==0)
{
way++;
if(way>2)
way=0;
}
}
switch(way)
{
case 0: //声控灯模式
P1=seg[1];
if(sound==1)
{
led=1; TR0=1;
}
if(t>100)
{
led=0; TR0=0;
t=0;
}
break;
case 1: //光控路灯模式
P1=seg[2];
if(light==0)
led=1;
else
led=0;
break;
case 2: //声光控制楼道灯模式
P1=seg[3];
if(light==0&&sound==1)
{
led=1; TR0=1;
}
if(t>100)
{
led=0; TR0=0;
t=0;
}
break;
}
}
}
void time0(void) interrupt 1 //定义T0中断,计时