振动传感警报装置.docx

上传人:b****3 文档编号:2284559 上传时间:2022-10-28 格式:DOCX 页数:14 大小:736.36KB
下载 相关 举报
振动传感警报装置.docx_第1页
第1页 / 共14页
振动传感警报装置.docx_第2页
第2页 / 共14页
振动传感警报装置.docx_第3页
第3页 / 共14页
振动传感警报装置.docx_第4页
第4页 / 共14页
振动传感警报装置.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

振动传感警报装置.docx

《振动传感警报装置.docx》由会员分享,可在线阅读,更多相关《振动传感警报装置.docx(14页珍藏版)》请在冰豆网上搜索。

振动传感警报装置.docx

振动传感警报装置

湖南大学

 

课设题目:

振动传感警报装置

学生姓名:

邹雄

专业班级:

信息安全一班

学号:

201208060128

学院:

信息科学与工程学院

 

“振动传感警报装置”设计报告说明

(1):

设计思路和方法

“警报器”是利用流水灯、振动传感器、无源蜂鸣器组成的一种装置,当振动传感器受到振动时,流水灯和蜂鸣器会同时工作,以此来提醒客户;而客户可通过按钮Key1能够停止其工作或等待歌曲播放完为止,而按下复位键后再次振动其又会工作。

(2):

“警报器”电路原理图

(3):

电路工作原理

振动传感器是一种简单的器件,管内有一跟固定的导线,在这根导线的周围有另一根较细的导线以螺旋状环绕它。

可以想象为一个弹簧中间有一跟导线。

在不震动时,两根导线不会相碰,一旦振动发生,两根导线就会短接。

所以我们只需判断导线是否短接了,就可以知道振动是否发生。

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

#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,

0x16,0x05,0x17,0x05,

0x21,0x15,0x17,0x05,

0x21,0x10,0x23,0x10,

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,

0x21,0x05,0x17,0x05,

0x16,0x10,0x17,0x10,

0x15,0x10,0x16,0x20,

0xff,

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,

0x16,0x05,0x17,0x05,

0x21,0x10,0x17,0x05,

0x21,0x05,0x22,0x10,

0x21,0x15,0x15,0x05,

0x15,0x20,0x24,0x10,

0x23,0x10,0x22,0x10,

0x21,0x10,0x23,0x30,

0x16,0x05,0x17,0x05,

0x21,0x15,0x17,0x05,

0x21,0x10,0x23,0x10,

0x17,0x30,0x13,0x10,

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,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:

输入需要延时的毫秒值

出口参数:

备注:

***********************/

voiddelay(unsignedintxms)

{

uinti,j;

for(i=xms;i>0;i--)

for(j=124;j>0;j--);

}

/**********************

函数名称:

ucharquyin(uchartem)

功能描述:

在quzi数组中,找到music数组定义的简谱音符的重装值,并返回其在quzi数组中的位置

入口参数:

tem:

music数组中定义的简谱音符

出口参数:

返回的是tem音符在quzi数组中的位置值

备注:

***********************/

ucharquyin(uchartem)

{

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()

功能描述:

播放音乐

入口参数:

出口参数:

备注:

***********************/

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;

delay(100);

TR0=0;

}

else//正常情况下取音符和节拍

{

tem=quyin(music[i]);//取出当前音符在quzi数组中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 初中作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1