微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 一款串口输出超声波测距模块使用范例

一款串口输出超声波测距模块使用范例

时间:11-30 来源:互联网 点击:

for(;n>

for(i=1142;i>

for(;n>

for(i=10;i>

LED=buffer[2]; //显示百位数值,百数位数的段码送显示端口
LED1=0; //百位数位码,低电平有效,进行显示
delay(1); //显示延时,加大该值,显示亮度提高
LED1=1; //关闭显示百位数显示
delay(20); //关闭显示延时,减小该值时显示亮度提高
}

void offmsd() //百位数为0判断处理模块
{
if (buffer[2]==0xA0) //如果值为零时百位不显示
buffer[2] = 0xff; //数码管百位数的段码全部为1,即高电平,百位不显示
}

void serial() interrupt 4 using 3 //串口中断接收程序
{
if(RI) //串口接收到数据时串口中断标志位为1
{
RI=0; //串口中断标志位置0
pd=SBUF; //接收到的数据送中间变变量pd储存
if(pd==0x20) //判断接收到的数据是否为0x20(这是ASCII码的空格的代码)
{
jsh=0; //接收位数计数器jsh置0
pd=0; //中间变变量pd清0
}
if(jsh==1) //当jsh值为1时,代表串口接收到模块发送回的百位数值
{
ml[0]=SBUF; //串口接收到模块发送回的百位数值存入ml[0]单元
}
else if(jsh==2) //当jsh值为2时,代表串口接收到模块发送回的十位数值
{
ml[1]=SBUF; //串口接收到模块发送回的十位数值存入ml[1]单元
}
else if(jsh==3) //当jsh值为3时,代表串口接收到模块发送回的个位数值
{
ml[2]=SBUF; //串口接收到模块发送回的个位数值存入ml[2]单元
s=ml[0]*100+ml[1]*10+ml[2]; //计算测量得到的距离值s,单位为厘米
}
jsh++; //接收位数计数器值加1
}
}

void timeToBuffer() //转换段码功能模块
{
xm0=ml[0]-48; //接到的值为标准的ASCII码,进行十进制转换,百位数的值
xm1=ml[1]-48; //接到的值为标准的ASCII码,进行十进制转换,十位数值
xm2=ml[2]-48; //接到的值为标准的ASCII码,进行十进制转换,个位数值
buffer[0]=convert[xm2]; //转换成对应的显示码段
buffer[1]=convert[xm1]; //转换成对应的显示码段
buffer[2]=convert[xm0]; //转换成对应的显示码段
if ((ml[0]==67)&&(ml[1]==67)) //判断接收到的ASCII码数值为"C",表示模块接收不到回波,这时的显示用"C C C"表示
{
buffer[0]=0xE2; //显示"C"的段码是0xE2
buffer[1]=0xE2; //显示"C"的段码是0xE2
buffer[2]=0xE2; //显示"C"的段码是0xE2
}
else if ((ml[0]==45)&&(ml[1]==45)) //判断接收到的ASCII码数值为"-",表示模块的测量范围在盲区范围内这时的显示用"- - -"表示
{
buffer[0]=0x7F; //显示"-"的段码是0x7F
buffer[1]=0x7F; //显示"-"的段码是0x7F
buffer[2]=0x7F; //显示"-"的段码是0x7F
}
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top