基于Atmega128L單片機(jī)控制的聲音監(jiān)測(cè)與無(wú)線定位系統(tǒng)
圖7
7.程序設(shè)計(jì)及其流程圖
采用同平面內(nèi)三點(diǎn)定位方法即可得到準(zhǔn)確的定位,統(tǒng)一軌道平面內(nèi)有A、B、C三個(gè)定位監(jiān)測(cè)點(diǎn),到目標(biāo)聲源距離分別為Da、Db 、Dc。當(dāng)某一個(gè)發(fā)生物體一旦發(fā)聲,聲音通過(guò)介質(zhì)空氣傳播,被監(jiān)測(cè)點(diǎn)的三個(gè)傳感器所接受。設(shè)聲源分別經(jīng)過(guò)時(shí)間Ta、Tb、Tc被A、B、C監(jiān)測(cè)點(diǎn)識(shí)別到。通過(guò)ATmega128處理,可計(jì)算出兩個(gè)時(shí)間差t1、t2。已知聲音在某介質(zhì)中傳播速度為v。通過(guò)幾何定律可計(jì)算出聲源0的準(zhǔn)確坐標(biāo)值(x,y)。這樣就能簡(jiǎn)單、準(zhǔn)確、高效、無(wú)誤的達(dá)到對(duì)聲音信號(hào)監(jiān)測(cè)定位的目的。如圖8所示。
圖8
#includeiom128v.h>
#includemacros.h>
#include"define.h"
extern char Reverse_Display;//是否反相顯示(白底黑字/黑底白字)
void wr_com(unsigned char value)//寫(xiě)指令,寫(xiě)指令時(shí)必須為RS=0;RW=0;
{
E_clear;
RS_clear;
RW_clear;
delay_ms(1);
LCD_DB_PORT=value;
E_set;
delay_ms(2); //如果沒(méi)有延時(shí)就必須要加查忙指令
E_clear;
}
void wr_data(unsigned char sj)//寫(xiě)數(shù)據(jù),寫(xiě)數(shù)據(jù)時(shí)必須為 RS=1;RW=0;
{
E_clear;
RS_set;
RW_clear;
delay_ms(1);
//if(!Reverse_Display)
LCD_DB_PORT=sj;
//else
//PORTA=~sj;
E_set;
delay_ms(1);//如果沒(méi)有延時(shí)就必須要加查忙指令
E_clear;
}
void LCD12864_Initialization (void)
{
LCD_DB_PORT=0x00;
LCD_DB_DDR=0xff;
COM_PORT=0x00;
COM_DDR=0xff;
wr_com(0x01); //清屏
wr_com(0x08); //關(guān)顯示
wr_com(0x03); //歸位
wr_com(0x30); //功能設(shè)置
//wr_com(0x0D); //開(kāi)顯示 有光標(biāo)
wr_com(0x0C);//開(kāi)顯示 無(wú)光標(biāo)
wr_com(0x01); //清屏
}
//****************
//outChinese 為函數(shù)名
//place 為顯示地址的首地址
//unit 字符長(zhǎng)度
//charcode[] 要顯示數(shù)據(jù)的內(nèi)容
void outChinese(unsigned char place,unsigned char unit,unsigned char *point)
{
unsigned char i,progdata;
wr_com(place);
for(i=0;iunit*2;i++)//一個(gè)漢字為兩個(gè)字符
{
progdata=*(point+i);
wr_data(progdata);
}
}
void outchar(unsigned char place,unsigned char unit,unsigned char *point)
{
unsigned char i,progdata;
wr_com(place);
for(i=0;iunit;i++)
{
progdata=*(point+i);
wr_data(progdata);
}
}
#includeiom128v.h>
#includemacros.h>
#include"define.h"
#pragma interrupt_handler INT_0:2
const uchar Place_show[]="聲源坐標(biāo)為:";
const uchar Digits[]="0123456789";
uchar soures[7]={0,};
void main()
{
init();
//outChinese(0x80,1,Place_show+0*2);
EICRA=0X03;//上升沿觸發(fā)0-2中斷
EIMSK=0X01;//使能0-2中斷
while(1)
{
display();
delay_ms(1000);
EIMSK=0X01;//使能0-2中斷
SEI();
}
}
void init()
{
LCD12864_Initialization ();
}
void INT_0()
{
soures[0]=soures[0]+1;
if(soures[0]==50) soures[0]=0;
EIMSK=0X00;//使能0-2中斷
CLI();
}
void delay_us(uint us) //在8M時(shí)鐘情況下的US延時(shí)
{
uint i;
us = us*5/4; //5/4是在8MHz晶振下,通過(guò)軟件仿真反復(fù)實(shí)驗(yàn)得到的數(shù)值
for(i=0; ius; i++);
}
void delay_ms(uint ms)
{
uint i,j;
for(i=0;ims;i++)
{
for(j=0;j1141;j++);
}
關(guān)鍵詞:
Atmega128L
單片機(jī)控制的聲音監(jiān)測(cè)
無(wú)線定位系統(tǒng)
相關(guān)推薦
技術(shù)專區(qū)
- FPGA
- DSP
- MCU
- 示波器
- 步進(jìn)電機(jī)
- Zigbee
- LabVIEW
- Arduino
- RFID
- NFC
- STM32
- Protel
- GPS
- MSP430
- Multisim
- 濾波器
- CAN總線
- 開(kāi)關(guān)電源
- 單片機(jī)
- PCB
- USB
- ARM
- CPLD
- 連接器
- MEMS
- CMOS
- MIPS
- EMC
- EDA
- ROM
- 陀螺儀
- VHDL
- 比較器
- Verilog
- 穩(wěn)壓電源
- RAM
- AVR
- 傳感器
- 可控硅
- IGBT
- 嵌入式開(kāi)發(fā)
- 逆變器
- Quartus
- RS-232
- Cyclone
- 電位器
- 電機(jī)控制
- 藍(lán)牙
- PLC
- PWM
- 汽車電子
- 轉(zhuǎn)換器
- 電源管理
- 信號(hào)放大器
評(píng)論