语音播报超声波测距程序,语音集成电路用ISD4004 SS接P1.2
// *********************单片机试验室******************************/
// *功用 : 语音播报超声波测距程序 (丈量规模:4~80cm)
// *引脚衔接 : ISD4004 SS接P1.2 MOSI接P1.0 MISO接P1.1 SCLK接P1.3
// * 超声波模块 TX接P3.1 RX接P3.2 J7接上插冒
// *当时版别 :1.0
// *作者 : 刘松
// ****************************************************************/
#include
#include
#include”lcd.h” // 液晶显现
#include”ds18b20.h” //温度传感器
// *功用
// *引脚衔接 : ISD4004 SS接P1.2
// *
// *当时版别 :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;
sbit key1=P2^1;
sbit SS=P1^2;
sbit MOSI=P1^0;
sbit MISO=P1^1;
sbit SCLK=P1^3;
uchar addr; //语音地址全局变量
uchar s; //语音所对应数字
int VD; //扩展十倍的声速
int D; //丈量的间隔
int temp; //超声波反射时刻
uchar s;
int VD;
int D;
int temp;
void timer() //初始化计数器
{
TMOD=0x10;
TH1=0;
TL1=0;
EA=1;
EX0=1;
}
{
}
void delay25us_40KHz(unsigned char us) //发生方波用于超声波发射
{
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 //核算超声波反射时刻
{
TR1=0;
EA=0;
temp=TH1*256+TL1;
}
{
}
void delayms(uchar ms) // 延时子程序用于语音播映上电等候
{
uchar j;
while(ms–)
{
for(j = 0; j < 120; j++);
}
}
{
}
void delay2(int m) //长延时用于语音播映http://www.jiaoqb.com/
{
int l,j;
for(l=0;l<30001;l++)
for(j=0;j }
{
////////////////////////////液晶显现子函数//////////////////////////////////
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);
void display()
{
}
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
////////////////放音部分子程序,放音地址由ADDR决议http://www.jiaoqb.com/
void play(addr)
{
uchar y;
SS=0;
MOSI=0;//发送开端
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_();
}//发送完毕
SS=1;//上电完毕
delayms(50);
SS=0;
MOSI=0;//发送地址
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_();
}//发送地址完毕
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; //疏忽地址放音指令(连接播映后续空间)
else MOSI=0;
_nop_();
_nop_();
_nop_();
SCLK=1;
_nop_();
_nop_();
_nop_();
}
SS=1;
}
///////////////////////////////////////////////////////////////
{
}
///////////////////////////////////////////////////////////////
///////////////////读数字子函数///////////////////////////////
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);
}
////////////////////////////////////////////////////////////////
void speaknum()
{
}
////////////////////////////////////////////////////////////////
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/changshang/fabu/259542.html