一款串口输出超声波测距模块使用范例
for(;n> for(i=1142;i> for(;n> for(i=10;i> LED=buffer[2]; //显示百位数值,百数位数的段码送显示端口 void offmsd() //百位数为0判断处理模块 void serial() interrupt 4 using 3 //串口中断接收程序 void timeToBuffer() //转换段码功能模块
LED1=0; //百位数位码,低电平有效,进行显示
delay(1); //显示延时,加大该值,显示亮度提高
LED1=1; //关闭显示百位数显示
delay(20); //关闭显示延时,减小该值时显示亮度提高
}
{
if (buffer[2]==0xA0) //如果值为零时百位不显示
buffer[2] = 0xff; //数码管百位数的段码全部为1,即高电平,百位不显示
}
{
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
}
}
{
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
}
}
串口输出超声波测距模 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)