STC学习:振动声光报警器

程序设计目标及程序运行效果说明
程序设计目标:通过振动实验板来控制无源蜂鸣器的发声和灯光的闪烁来达到报警的功能;报警产生后,通过按下key1来控制报警器的关闭。
程序运行效果说明:振动实验板,报警器的蜂鸣器开始发声和流水灯灯光开始闪烁,按下按键key1,报警器停止报警。

程序相关电路及原理说明
1.原理说明
本实验利用振动传感器和蜂鸣器以及流水灯三个模块实现报警器的功能。

本实验板采用的是振动传感器,先把检测振动传感器的引脚P2.4定义为vibrate,并把此引脚定义为输入端口,即将P2.4引脚置1,并不断检测此引脚状态。当振动发生时,由于振动传感器内部被短接,因此检测到P2.4引脚的电平为0,所以,当P2.4引脚为低电平时,我们判断此时发生了振动,并点亮流水灯LED和蜂鸣器鸣叫表示探测到振动。

本实验板采用的是无源蜂鸣器,相比与有源蜂鸣器,无源蜂鸣器的优点在于价格便宜,可以通过控制其振动频率来改变发出的声音,因此,无源蜂鸣器可以用于音乐的播放。而有源蜂鸣器的优点在于使用简单,不需要编写“乐谱”。本实验板使用的无源蜂鸣器是电磁式蜂鸣器,电磁式蜂鸣器由振荡器、电磁线圈、磁铁、振动膜片及外壳等组成。接通电源后,接收到的音频信号电流通过电磁线圈,使电磁线圈产生磁场。振动膜片在电磁线圈和磁铁的相互作用下,周期性地振动发声。

无源蜂鸣器的电路原理图如2.2节程序相关电路中图1所示,只需改变Beep端口的电平,产生一个周期性的方波即可使蜂鸣器发生声音,不同的频率发出的声音不同。其中,ULN2003是一个功放,用于放大电流。电阻R14和电容C21是用来保护电路的。若人为将Beep端口的电平一直置为高电平,在没有保护电路的情况下,容易烧毁电路,但即使有保护电路也应该注意不要将Beep端口长时间置于高电平,这对器件也是有一定损害的。

振动传感器的电路原理图如2.2节程序相关电路中图2所示,振动传感器是一种简单的器件,管内有一跟固定的导线,在这根导线的周围有另一根较细的导线以螺旋状环绕它。可以想象为一个弹簧中间有一跟导线。在不震动时,两根导线不会相碰,一旦振动发生,两根导线就会短接。所以我们只需判断导线是否短接了,就可以知道振动是否发生。

程序烧入单片机后,振动实验板可以看到蜂鸣器鸣叫和流水灯LED闪烁。

2.程序相关电路
(1)无源蜂鸣器电路原理图
在这里插入图片描述
(2)按键控制电路
在这里插入图片描述
芯片相关引脚:Beep——P3^4;

代码如下:

#include <STC15F2K60S2.H>			  //包含头文件
#define uint unsigned int			  //宏定义
#define uchar unsigned char
sbit vibrate=P2^4;		    //振动传感器
sbit led_sel=P2^3;			//数码管与LED灯切换引脚
sbit beep = P3^4;			//蜂鸣器引脚
sbit key1 = P3^2;			//key1开关引脚
uchar flag;				  //振动标志位
uchar code table[]={0x00,0x01,0x03,0x07,0x0f,0x1f,0x3f,0x7f,0xff};		//流水灯报警闪烁数组
void delay(unsigned int xms)
{
	uint i,j;						   
	 for(i=xms;i>0;i--)
	 	for(j=100;j>0;j--);
}
//系统初始化,功能是配置IO口
void init_sys()			  
{
	P0M0=0xff;								//设置推挽模式
	P0M1=0x00;
	P2M0=0x08;
	P2M1=0x00;
	P3M0=0x10;
	P3M1=0x00;
	TMOD=0x00;							    //定时器0,定时方式0,16位自动重装
	TH0=0xff;								//赋初值
	TL0=0x03;
	EA=1;									//开总中断
	ET0=1;									//开定时器0中断
	TR0=1;									//开启定时器0
	led_sel=1;								//选通LED灯
	P0=0x00;								//关闭P0口
	beep=0;									//beep端口置0,起保护蜂鸣器作用
	flag=0;									//振动标志位
	vibrate=1;								//振动传感器引脚置1
}
void main()
{
	uchar i;					//定义局部变量i,用作流水灯闪烁
	init_sys();					//系统初始化
	while(1)
	{
		if(vibrate==0)		   //若检测到低电平说明振动发生
			flag=1;
		if(flag==1)			   //振动发生flag会置低电平,点亮LED流水灯闪烁
		{
			i=0;
			while(i<9)
			{
				
				P0=table[i]; 
				delay(300);			
				i++;
			}	   
		}
		if(key1==0)				   //按下key1会关掉蜂鸣器的鸣叫和灯光闪烁
		{
			while(!key1);
			flag=0;					//振动标志位置0
			P0=0x00;				//把流水灯端口置0
		}
	}
}
//定时器0的中断服务程序
void timer0() interrupt 1 
{
	if(flag)
		beep=~beep;		   //中断服务程序使得beep翻转产生方波
	else
		beep=0;			  //使beep端口置0,起保护蜂鸣器作用
}

用途
振动声光报警器在目前被用于生活、工业生产的很多方面,最常见的是我们的汽车、摩托车等的防盗报警系统。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

布布要成为最负责的男人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值