教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 文秘资料 >

超声波测距12864显示程序带语音播报

来源:网络收集 时间:2026-07-23
导读: 超声波测距12864显示程序带语音播报 #include string.h #include stdio.h #define uchar unsigned char #define uint unsigned int #define LCD_DATA P2 //数据口 sbit RS=P3^7; sbit RW=P3^6; // 实验板上RW已经接地,在此定义RW是为了移植的方便 sbit E=P3

超声波测距12864显示程序带语音播报

#include <string.h>
#include "stdio.h"
#define uchar unsigned char
#define uint unsigned int
#define LCD_DATA P2 //数据口
sbit RS=P3^7;
sbit RW=P3^6; // 实验板上RW已经接地,在此定义RW是为了移植的方便
sbit E=P3^5;
sbit PLAYL=P1^1; //当PLA YE 出现下降时, ISD1420开始放音
sbit PLAYE=P1^2; //当PLA YL 出现低电平时,ISD1420开始放音
sbit P14=P1^4;
sbit P15=P1^5;
sbit P16=P1^6;
uchar disbuf[6]={0,0,0,0,0,0};
unsigned char flag=0;//flag接受成功标志
unsigned long time=0;
unsigned int i;
unsigned char code string1[]="保持距离";
unsigned char code string2[]="安全距离";
unsigned char code string3[]="危险距离";
unsigned char code AC_TABLE[]={
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, //第一行汉字位置
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, //第二行汉字位置
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, //第三行汉字位置
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, //第四行汉字位置
};
void send();
void Speak();
void display(unsigned long dat1,unsigned char Dotdispoint);
code uchar VoiceAdd[]={0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60 ,0x68,0x70};
// 0 1 2 3 4 5 6 7 8 9 she bai qie cm dangqianjuli

//************************** ISD1420语音延时程序 **************************
void DelayMs(uint z)
{
uint x,y;
for(x=z;x!=0;x--)
for(y=255;y!=0;y--);
}
//延时函数
void delay(unsigned int MS)
{
unsigned char us,usn;
while(MS!=0) //for 12M
{ usn = 2;
while(usn!=0)
{
us=0xf5;
while (us!=0){us--;};
usn--;
}
MS--;
}
}
//液晶忙检测
void Checkbusy(void)
{
unsigned char b;
LCD_DATA=0xff;
RS=0;RW=1;E=1;
while(b&0x80){b=LCD_DATA;}
}
//写指令函数
Wricom(unsigned char com)
{
//Checkbusy(); //不进行忙检测
LCD_DATA=com;
RS=0;RW=0;E=1;
delay(1);
E=0;
delay(1);
LCD_DATA=0xff;
}
//写数据函数
Wridat(unsigned char dat)
{
//Checkbusy(); //不进行忙检测
LCD_DATA=dat;
RS=1;RW=0;E=1;
delay(1);
E=0;
delay(1);
LCD_DATA=0xff;
}
//液晶初始化
void LcdInit(void)
{
Wricom(0x30); //8BitMCU,基本指令集合
Wricom(0x03); //AC归0,不改变DDRAM内容
Wricom(0x0c); //显示ON,游标OFF,游标位反白OFF
Wricom
(0x01); //清屏,AC归0
Wricom(0x06); //写入时,游标右移动
}

//清除液晶上的的文本
void Clear_txt( void )
{
unsigned char i;
Wricom(0x30);

超声波测距12864显示程序带语音播报

//基本指令集动作,八位总线
Wricom(0x80); //设定DDRAM(00H)地址到地址计数器AC,并设定DDRAM中的每一位都为20H,相当于写0x01;
for(i=0;i<64;i++)
Wridat(0x20);
}
//显示汉字或者字符,显示字符时字符的个数应该为偶数,非偶数请补一个空格
//由在DDRAM中写入的编码选择,在0000H,0002H,0004H,0006H编码中将自动结合下一个位元,组成两个位元组的编码达成中文字型的编码,
//row=(0~3)液晶上可以显示四行汉字; col=(0~7)一行可以显示8个汉字
void Dis_string(unsigned char row,unsigned char col,unsigned char *puts) //显示汉字也可以用命令0X01来清0;但是图像就不行
{
Wricom(0x30); //8BitMCU,基本指令集合
Wricom(AC_TABLE[8*row+col]); //起始位置
while(*puts != '\0') //判断字符串是否显示完毕
{
if(col==8) //判断换行
{ //若不判断,则自动从第一行到第三行
col=0;
row++;
}
if(row==4) row=0; //一屏显示完,回到屏左上角
Wricom(AC_TABLE[8*row+col]);
Wridat(*puts); //一个汉字要写两次
puts++;
Wridat(*puts);
puts++;
col++;
}
}

// 显示光标定位
void LocateXY( char posx,char posy)
{
unsigned char t;
if(posy==0) t=0x80;
else if(posy==1) t=0x90;
else if(posy==2) t=0x88;
else if(posy==3) t=0x98;
t|=(posx&0xf);
Wricom(t);
}
void write_onechar(unsigned char row,unsigned char col,unsigned char dat)
{

LocateXY(col,row);
Wridat(dat); //一个汉字要写两次
}

void main()
{
flag=0;
P0=0XFF;
P14=0;
P15=0;
P16=0;
LcdInit(); //液晶初始化
Clear_txt();//清除液晶上的的文本
Dis_string(0,2,"欢迎使用");
Dis_string(2,0,"超声波测距离系统");
delay(2500);
Clear_txt();
TMOD=0X11;
IE=0X80; //INT0中断,定时器0中断
while(1){
send();
ET0=1;
EX0=1;
while(!flag);
time=TH0;
time=(time<<8)|TL0;
time*=172;
time/=10000;
disbuf[0]=0; //十米
disbuf[1]=0; //米
disbuf[2]=(time%1000)/100; //分米
disbuf[3]=(time%100)/10;
disbuf[4]=time%10;
if((flag==1)&&(time>=
1)&&(time<200)){
Dis_string(1,0,"距离");
Dis_string(1,7,"米");
display(time,4);
Dis_string(2,2,string1);
flag=0

超声波测距12864显示程序带语音播报

;
time=0;
P16=1;
}
if((flag==1)&&(time>=200)&&(time<=500)){
Dis_string(1,0,"距离");
Dis_string(1,7,"米");
display(time,4);
Dis_string(2,2,string2);
flag=0;
time=0;
P15=1;
}
if((flag==1)&&(time>500)){
Dis_string(1,0,"距离");
Dis_string(1,7,"米");
display(time,4);
Dis_string(2,2,string3);
flag=0;
time=0;
P14=1;
}
Speak();
}
}
/**************** …… 此处隐藏:3737字,全部文档内容请下载后查看。喜欢就下载吧 ……

超声波测距12864显示程序带语音播报.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/1995556.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)