超声波测距12864显示程序带语音播报
超声波测距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字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




