振动传感警报装置Word格式.docx
- 文档编号:15202132
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:14
- 大小:736.36KB
振动传感警报装置Word格式.docx
《振动传感警报装置Word格式.docx》由会员分享,可在线阅读,更多相关《振动传感警报装置Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
电路工作原理
振动传感器是一种简单的器件,管内有一跟固定的导线,在这根导线的周围有另一根较细的导线以螺旋状环绕它。
可以想象为一个弹簧中间有一跟导线。
在不震动时,两根导线不会相碰,一旦振动发生,两根导线就会短接。
所以我们只需判断导线是否短接了,就可以知道振动是否发生。
P0口的8位输出分别控制8个发光二极管L0~L7的阳极;
而P2.3经反相器U4C控制8个发光管阴极E3;
电阻R15~R22为限流电阻。
当振动传感器短接时,对应的二极管将会发光。
只需改变Beep端口的电平,产生一个周期性的方波即可使蜂鸣器发生声音,不同的频率发出的声音不同。
其中,ULN2003是一个功放,用于放大电流。
电阻R14和电容C21是用来保护电路的。
若人为将Beep端口的电平一直置为高电平,在没有保护电路的情况下,容易烧毁电路,但即使有保护电路也应该注意不要讲Beep端口长时间之余高电平,这对器件也是有一定损害的。
每一个音符的发声频率是不同的,我们需要用计时器来精确计时,用以产生方波,这样才能发出不用的音符声音。
C调各音符频率与计数值如下图所示,以下的简谱码是在晶振为12MHz的情况下计算的,换算为16进制的简谱码如程序中quzi[]数组所示。
本程序中,数组music[]即是要播放的音乐,格式为音符,节拍,音符,节拍,如此循环下去。
音符为要发出的音调,而节拍则是声音的持续时间。
如图,在数组music[]中,音符表示的格式为:
十位代表是低八度,中八度还是高八度,1代表高八度,2代表中八度,3代表高八度,个位代表简谱的音符,例如,0x15代表低八度的S0,如图即是低5S0,0x21代表中八度的DO,如图即是中1D0。
音符中,0x00代表结束符,表示整首歌曲演唱完毕,而0xff代表休止符,表示要休止100ms。
遇到这两种情况,都应该重新执行循环中的第一步。
其余情况则是正常播放。
程序烧入单片机后,需要振动传感器振动才会进行演奏。
(4):
程序总框图设计流程
(5):
相关寄存器及IO引脚的配置
1.P0(8位)和P2.3需要设置成推挽输出,以驱动电路正常发光。
涉及寄存器及配置值如下:
P2M1=0x00;
P2M0=0xff;
P0M1=0x00;
P0M0=0xff;
2.蜂鸣器引脚:
sbitbeep=P3^4;
//蜂鸣器
3.按键1引脚:
sbitkey1=P3^2;
//定义按键1
4.振动传感器引脚:
sbitvibrate=P2^4;
//振动传感器
(六):
详细设计参见后续工程代码
(七):
测试方法
1.用STCISP默认设置,打开工程中的HEX并下载;
2.敲动一下振动传感器,流水灯随着蜂鸣器的歌曲节奏从右至左依次闪动;
3.按下Key1键,蜂鸣器及流水灯均都停下工作。
源代码:
#include<
STC15F2K60S2.h>
#defineuintunsignedint
#defineucharunsignedchar
sbitbeep=P3^4;
sbitKey1=P3^2;
//Key1对应触发外部中断0
sbitvibrate=P2^4;
/**********************
引脚别名定义
***********************/
sbitLed_sel=P2^3;
变量定义
ucharG_value;
uchartimeh,timel,zanting=0;
//定义定时器的重装值
ucharcodemusic[]={//音乐代码,歌曲为《同一首歌》,格式为:
音符,节拍,音符,节拍,
0x16,0x05,0x17,0x05,
0x21,0x15,0x17,0x05,
0x21,0x10,0x23,0x10,
0x17,0x30,0x23,0x10,
0x16,0x15,0x15,0x05,
0x16,0x10,0x21,0x10,
0x15,0x30,0x13,0x10,
0x14,0x15,0x13,0x05,
0x14,0x05,0x21,0x05,
0x21,0x10,0x13,0x30,
0x21,0x10,0x17,0x10,
0x14,0x05,0x14,0x10,
0x17,0x10,0x17,0x20,
0xff,
0x17,0x30,0x13,0x05,
0x13,0x05,0x16,0x15,
0x15,0x05,0x16,0x10,
0x21,0x10,0x15,0x30,
0x13,0x10,0x14,0x10,
0x21,0x05,0x17,0x05,
0x17,0x10,0x21,0x10,
0x22,0x10,0x23,0x05,
0x21,0x20,0xff,
0x16,0x10,0x17,0x10,
0x15,0x10,0x16,0x20,
0x21,0x05,0x22,0x05,
0x23,0x15,0x22,0x10,
0x23,0x10,0x24,0x10,
0x25,0x05,0x22,0x30,
0x15,0x10,0x22,0x03,
0x21,0x03,0x17,0x03,
0x21,0x03,0x21,0x10,
0x21,0x05,0x22,0x10,
0x23,0x05,0x23,0x40,
0x21,0x10,0x17,0x05,
0x21,0x15,0x15,0x05,
0x15,0x20,0x24,0x10,
0x23,0x10,0x22,0x10,
0x21,0x10,0x23,0x30,
0x17,0x30,0x13,0x10,
0x14,0x10,0x21,0x05,
0x17,0x05,0x17,0x10,
0x21,0x10,0x22,0x10,
0x23,0x05,0x21,0x05,
0x21,0x20,0x21,0x05,
0x17,0x05,0x16,0x10,
0x17,0x10,0x15,0x10,
0x16,0x40,0x00,0x00
};
ucharcodequzi[]={//此数组数据为各个音符在定时器中的重装值,第一列是高位,第二列是低位
0xf8,0x8c,//低八度,低1
0xf9,0x5b,
0xfa,0x15,//低3
0xfa,0x67,
0xfb,0x04,//低5
0xfb,0x90,
0xfc,0x0c,//低7
0xfc,0x44,//中央C调
0xfc,0xac,//中2
0xfd,0x09,
0xfd,0x34,//中4
0xfd,0x82,
0xfd,0xc8,//中6
0xfe,0x06,
0xfe,0x22,//高八度,高1
0xfe,0x56,
0xfe,0x6e,//高3
0xfe,0x9a,
0xfe,0xc1,//高5
0xfe,0xe4,
0xff,0x03//高7
函数名称:
voiddelay(unsignedintxms)
功能描述:
延时
入口参数:
xms:
输入需要延时的毫秒值
出口参数:
无
备注:
{
uinti,j;
for(i=xms;
i>
0;
i--)
for(j=124;
j>
j--);
}
ucharquyin(uchartem)
在quzi数组中,找到music数组定义的简谱音符的重装值,并返回其在quzi数组中的位置
tem:
music数组中定义的简谱音符
返回的是tem音符在quzi数组中的位置值
ucharqudiao,jp,weizhi;
//定义曲调,音符和位置
qudiao=tem/16;
//高4位是曲调值
jp=tem%16;
//低4位是音符
if(qudiao==1)//当曲调值为1时,即是低八度,低八度在quzi数组中基址为0
qudiao=0;
elseif(qudiao==2)//当曲调值为2时,即是中八度,中八度在quzi数组中基址为14
qudiao=14;
elseif(qudiao==3)//当曲调值为3时,即是高八度,高八度在quzi数组中,基址为28
qudiao=28;
weizhi=qudiao+(jp-1)*2;
//通过基址加上音符作为偏移量,即可定位此音符在quzi数组中的位置
returnweizhi;
//返回这一个位置值
voidplaymusic()
播放音乐
ucharp,m,tem;
//m为节拍
uchari=0;
while
(1)
{
while(zanting)
beep=0;
p=music[i];
//如果碰到结束符,延时1秒,回到开始再来一遍
if(p==0x00)
{
i=0;
delay(100);
break;
}
elseif(p==0xff)//若碰到休止符,延时100ms,继续取下一音符
i=i+1;
TR0=0;
}
else//正常情况下取音符和节拍
tem=quyin(music[i]);
//取出当前音符在quzi数组中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 振动 传感 警报 装置