新聞中心

EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 語(yǔ)音播報(bào)超聲波測(cè)距程序

語(yǔ)音播報(bào)超聲波測(cè)距程序

作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
距程序,語(yǔ)音集成電路用ISD4004 SS接P1.2 MOSI接P1.0 MISO接P1.1 SCLK接P1.3。超聲波模塊用市面上常用的模塊。由于超聲波屬于聲波范圍,其速度與溫度有關(guān),不同溫度下超聲波在空氣中傳播速度隨溫度變化關(guān)系:V=331.4+0.61T。所以要是測(cè)量結(jié)果更加精確需另加溫度補(bǔ)償模塊(本實(shí)驗(yàn)中采用開發(fā)板上的DS18B20溫度傳感器完成溫度補(bǔ)償)。外圍可添加LCD顯示(本實(shí)驗(yàn)采用開發(fā)板1602LCD)和語(yǔ)音播報(bào)模塊(本實(shí)驗(yàn)采用ISD4004語(yǔ)音模塊)。

本文引用地址:http://m.butianyuan.cn/article/201611/321450.htm

// *********************單片機(jī)實(shí)驗(yàn)室******************************/
// *功能 : 距程序(測(cè)量范圍:4~80cm)
// *引腳連接 : ISD4004 SS接P1.2 MOSI接P1.0 MISO接P1.1 SCLK接P1.3
// * 超聲波模塊 TX接P3.1 RX接P3.2 J7接上插冒
// *當(dāng)前版本 :1.0
// *作者 : 劉松
// ****************************************************************/
#include
#include
#include"lcd.h" // 液晶顯示
#include"ds18b20.h" //溫度傳感器
sbit P3_1=P3^1;
sbit key1=P2^1; //定義按鍵
sbit SS=P1^2; //以下四行定義ISD4004引腳
sbit MOSI=P1^0;
sbit MISO=P1^1;
sbit SCLK=P1^3;
uchar addr; //語(yǔ)音地址全局變量
uchar s; //語(yǔ)音所對(duì)應(yīng)數(shù)字
int VD; //擴(kuò)大十倍的聲速
int D; //測(cè)量的距離
int temp; //超聲波反射時(shí)間
void timer() //初始化計(jì)數(shù)器
{
TMOD=0x10;
TH1=0;
TL1=0;
EA=1;
EX0=1;
}

void delay25us_40KHz(unsigned char us) //產(chǎn)生方波用于超聲波發(fā)射
{

TR1=1;
while(us--)
{
P3_1= 0;
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
_nop_();
P3_1= 1;
_nop_();_nop_();
_nop_();_nop_();
}
P3_1= 1;
}

rec() interrupt 0 //計(jì)算超聲波反射時(shí)間
{
TR1=0;
EA=0;
temp=TH1*256+TL1;
}

void delayms(uchar ms) // 延時(shí)子程序用于語(yǔ)音播放上電等待
{
uchar j;
while(ms--)
{
for(j = 0; j < 120; j++);
}
}

void delay2(int m) //長(zhǎng)延時(shí)用于語(yǔ)音播放http://www.jiaoqb.com/
{
int l,j;
for(l=0;l<30001;l++)
for(j=0;j}

////////////////////////////液晶顯示子函數(shù)//////////////////////////////////
void display()
{
float V;//聲速
V=331.4+0.61*T; VD=V*10;
D=temp*V/2000-29;
displaystring(0,0,"Dis=");
displaychar(4,0,(D/100)+0x30);
displaychar(5,0,(D0/10)+0x30);
displaychar(6,0,.);
displaychar(7,0,(D)+0x30);
displaystring(8,0,"cm");
displaystring(0,1,"T=");
displaychar(5,1,(TD)+0x30);
displaychar(4,1,.);
displaychar(3,1,(TD0/10)+0x30);
displaychar(2,1,(TD/100)+0x30);
displaychar(6,1,0xdf);
displaychar(7,1,C);
displaystring(9,1,"V=");
displaychar(11,1,(VD/1000)+0X30);
displaychar(12,1,(VD00/100)+0X30);
displaychar(13,1,(VD0/10)+0X30);
displaychar(14,1,.);
displaychar(15,1,(VD)+0X30);
}
///////////////////////////////////////////////////////////////

////////////////放音部分子程序,放音地址由ADDR決定http://www.jiaoqb.com/
void play(addr)
{
uchar y;
SS=0;
MOSI=0;//發(fā)送開始
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0x20>>y)&0x01)MOSI=1; //上電命令
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//發(fā)送結(jié)束
SS=1;//上電結(jié)束
delayms(50);
SS=0;
MOSI=0;//發(fā)送地址
SCLK=0;
for(y=0;y<16;y++)
{
SCLK=0;
if((addr>>y)&0x01)MOSI=1;
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}//發(fā)送地址結(jié)束
MOSI=0;//放音
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xe0>>y)&0x01)MOSI=1; //指定地址放音命令電子小制作_我愛制作_電子DIY制作套件http://www.5imcu.net/
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
SS=0;
MOSI=0;
SCLK=0;
for(y=0;y<8;y++)
{
SCLK=0;
if((0xf0>>y)&0x01)MOSI=1; //忽略地址放音命令(連貫播放后續(xù)空間)
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
///////////////////////////////////////////////////////////////

///////////////////讀數(shù)字子函數(shù)///////////////////////////////
void speaknum()
{
if(s==1) play(0x01);
if(s==2) play(0x0a);
if(s==3) play(0x14);
if(s==4) play(0x1e);
if(s==5) play(0x28);
if(s==6) play(0x32);
if(s==7) play(0x3c);
if(s==8) play(0x46);
if(s==9) play(0x50);
if(s==0) play(0x6e);
}
////////////////////////////////////////////////////////////////

上一頁(yè) 1 2 下一頁(yè)

評(píng)論


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

關(guān)閉