文件如下:
超声波PCBourdev_548882.rar(文件大小:21K) (原文件名:超声波PCB.rar)
超声波原理图ourdev_548883.rar(文件大小:3K) (原文件名:CX20106.rar)
文本语音合成软件(联网才能用!!)ourdev_548924.rar(文件大小:508K) (原文件名:KDVoiceV2.20文本语音合成.rar)
语音单片机使用资料ourdev_548925.rar(文件大小:2.41M) (原文件名:WT588D语音单片机使用资料.rar)
原理图中并接在超声波接收头两端的瓷片电容不用的话可以增强信号,但是抗干扰性不强。我的做法是牺牲抗干扰性,提高距离,呵呵,没办法只能这样了。另外还有要说明的是发送与接收探头的距离是8个cm!!这样才能保证测量距离,我做好的测距距离是接近6米。发送与接收探头的距离可能还可以小一点,但不能小于4cm(网上说的),我做过间距为2cm的时候测距距离为3米左右。
主程序:
#include<reg51.h>
#include"12864.h"
#include<INTRINS.H>
#define uc unsigned char
#define ui unsigned int
#define nop _nop_()
/*********************************
变量定义
**********************************/
uc ID1=0,ID2=0;
float distance;
ui count=0,dis1;
uc high_time,low_time,flag=0;
//uc i=0;
/**********************************
常量定义
************************************/
#define circle 0xf2//循环播放
#define stop_play 0xfe//停止播放
#define vo_0 0xe0//音量1
#define vo_1 0xe1//音量2
#define vo_2 0xe2//音量3
#define vo_3 0xe3//音量4
#define vo_4 0xe4//音量5
#define vo_5 0xe5//音量6
#define vo_6 0xe6//音量7
#define vo_7 0xe7//音量8
#define ID1_count 22//k1计数值
#define ID2_count 100//k2计数值
/*************************************
语音单片机WT588D位定义
*************************************/
sbit RST=P0^3;//复位端
sbit CS1=P0^1;//片选端
sbit CLK=P0^0;//时钟
sbit DAT=P0^2;//数据位
sbit busy=P0^4;//忙信号
sbit csb=P3^6;
/*********************************
函数声明
*********************************/
void delay_nms(ui ms);//延时nms
void delay100us();//延时100us
void send_com(uc add);//发送语音地址,指定播放某段语音
void init();//语音单片机WT588D
float Distance_count();//距离计算转换
void sound(uc soud);//播放
void tran();//送超声波信号进行测距
/************************************
主函数
************************************/
void main()
{
uc i,j,k;
ui tp=0;
init();
LcmInit();//lcd初始化
LcmClearTXT();//lcd清除显示
PutStr(1,0,DIS2);//显示距离
while(1)
{
for(i=0;i<10;i++)//测量10次
{
tran();//发送超声波信号测距
tp=tp+dis1;//10次相加,下面求平均值
}
dis1=tp/10;//取平均值
tp=0;//清零,为下次测量做准备
sound(dis1);//语音播报
i=dis1/100;//数据转换给lcd显示
j=dis1%100/10;
k=dis1%100%10;
LCDXY(1,3);//设定显示位置
Write_number(i);//显示数字
LCDXY(1,5);
Write_number(j);
Write_number(k);
}
}
/**************************************************************
初始化
**************************************************************/
void init()
{
TMOD=0x01;//定时器0方式1用于计时,定时器1用于产生38K方波
TH0=0;
TL0=0; /* 设定T0的工作模式为2*/
EA=1;
IT1=1;//下降沿有效,左传感器
}
/**********************************************
左发送超声波函数,实测为38KHz信号,8个这样的方波
***********************************************/
void tran()
{
uc i;
TH0=0;
TL0=0;//清定时0
TR0=1;//开定时0
for(i=8;i>0;i--)
{
csb=!csb;
//nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
nop;
}
csb=1;
delay_nms(1);//延时1ms左右后再开中断,避免直接回来的回波
EX1=1;
delay_nms(50);
if(flag==1)
{
distance=Distance_count();
dis1=(unsigned int)distance;
flag=0;
}
else dis1=0;
}
/************************************************
延时n个ms函数
***********************************************/
void delay_nms(ui ms) //delay ms function
{
uc i;
while(ms--)
{
for(i = 0; i < 123; i++);
}
}
/************************************************
延时100us函数
***********************************************/
void delay100us()
{
uc j;
for(j=50;j>0;j--);
}
/****************************************
发码播放函数;add为语音地址
*****************************************/
void send_com(uc add)
{
uc i;
RST=1;
RST=0;
delay_nms(3);
RST=1;
delay_nms(20);
CS1=0;
delay_nms(5);
for(i=0;i<8;i++)
{
CLK=0;
if(add&1) DAT=1;
else DAT=0;
delay100us();
CLK=1;
delay100us();
add=add>>1;
}
CS1=1;
}
/******************************************
*****************************************/
void sound(ui soud)
{
ui i,j,k;
if(soud==0)
{
send_com(13);//播放“超出测量范围,请重新测量”
delay_nms(50);
while(!busy);
}
else
{
i=soud/100;
j=soud%100/10;
k=soud%100%10;
//send_com(10);//播放"障碍物距离"
//delay_nms(50);
//while(!busy);
send_com(i);
delay_nms(50);
while(!busy);
send_com(11);//播放点
delay_nms(50);
while(!busy);
send_com(j);
delay_nms(50);
while(!busy);
send_com(k);
delay_nms(50);
while(!busy);
send_com(12);//播放米
delay_nms(50);
while(!busy);
}
}
/****************************************
距离计算函数
****************************************/
float Distance_count()
{
float temp;
temp=high_time*256+low_time;
//temp-2000;
temp=(temp/1000)/2;
temp*=344;
temp=temp/10;
return temp;
}
/**************************************
外部中断服务函数
**************************************/
void TT() interrupt 2
{
ui tmp;
TR0=0;//关定时器0
ET1=0;//关外部中断
flag=1;//外部中断标志位
tmp=TH0*256+TL0;
if((tmp>0)&&(tmp<60000))
{
high_time=TH0;
low_time=TL0;
}
else
{
high_time=0;
low_time=0;
}
}
12864液晶显示函数(三线串口驱动):
/*****************************************************************
ChaoShengbo.rar_chaoshengbo_chaoshengbo.rar_signal jamming_测距_超声
版权申诉
45 浏览量
2022-09-19
15:19:52
上传
评论
收藏 5KB RAR 举报
寒泊
- 粉丝: 75
- 资源: 1万+