新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Atmega128L單片機(jī)控制的聲音監(jiān)測與無線定位系統(tǒng)

基于Atmega128L單片機(jī)控制的聲音監(jiān)測與無線定位系統(tǒng)

作者: 時間:2013-11-12 來源:網(wǎng)絡(luò) 收藏
基于Atmega128L單片機(jī)控制的聲音監(jiān)測與無線定位系統(tǒng)
圖7
7.程序設(shè)計及其流程圖
采用同平面內(nèi)三點(diǎn)定位方法即可得到準(zhǔn)確的定位,統(tǒng)一軌道平面內(nèi)有A、B、C三個定位監(jiān)測點(diǎn),到目標(biāo)聲源距離分別為Da、Db 、Dc。當(dāng)某一個發(fā)生物體一旦發(fā)聲,聲音通過介質(zhì)空氣傳播,被監(jiān)測點(diǎn)的三個傳感器所接受。設(shè)聲源分別經(jīng)過時間Ta、Tb、Tc被A、B、C監(jiān)測點(diǎn)識別到。通過ATmega128處理,可計算出兩個時間差t1、t2。已知聲音在某介質(zhì)中傳播速度為v。通過幾何定律可計算出聲源0的準(zhǔn)確坐標(biāo)值(x,y)。這樣就能簡單、準(zhǔn)確、高效、無誤的達(dá)到對聲音信號監(jiān)測定位的目的。如圖8所示。
基于Atmega128L單片機(jī)控制的聲音監(jiān)測與無線定位系統(tǒng)
圖8
#includeiom128v.h>
#includemacros.h>
#include"define.h"
extern char Reverse_Display;//是否反相顯示(白底黑字/黑底白字)
void wr_com(unsigned char value)//寫指令,寫指令時必須為RS=0;RW=0;
{
E_clear;
RS_clear;
RW_clear;
delay_ms(1);
LCD_DB_PORT=value;
E_set;
delay_ms(2); //如果沒有延時就必須要加查忙指令
E_clear;
}
void wr_data(unsigned char sj)//寫數(shù)據(jù),寫數(shù)據(jù)時必須為 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);//如果沒有延時就必須要加查忙指令
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); //開顯示 有光標(biāo)
wr_com(0x0C);//開顯示 無光標(biāo)
wr_com(0x01); //清屏
}
//****************
//outChinese 為函數(shù)名
//place 為顯示地址的首地址
//unit 字符長度
//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++)//一個漢字為兩個字符
{
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時鐘情況下的US延時
{
uint i;
us = us*5/4; //5/4是在8MHz晶振下,通過軟件仿真反復(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)推薦

技術(shù)專區(qū)

關(guān)閉