帮我看一下我的用51单片机控制HY-SRF-05超声波模块测距的C语言程序那里错了,我实在检查不出来了。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了帮我看一下我的用51单片机控制HY-SRF-05超声波模块测距的C语言程序那里错了,我实在检查不出来了。相关的知识,希望对你有一定的参考价值。
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit Trig=P2^1;
sbit Echo=P3^2;
sbit rs=P2^4;
sbit rw=P2^5;
sbit e=P2^6;
uchar xianshi1[]=" ch sh bo bi zh ";
uchar num[]="0123456789";
uint n=0,dist;
void delay_ms(uint t)
uint i;
for(;t>0;t--)
for(i=125;i>0;i--);
void delay20us()
uchar a;
for(a=0;a<100;a++);
void writecom(uint com)
e=0;
rs=0;
rw=0;
P0=com;
delay_ms(5);
e=1;
delay_ms(10);
e=0;
void writedate(uint date)
e=0;
rs=1;
rw=0;
P0=date;
delay_ms(5);
e=1;
delay_ms(10);
e=0;
void chushihua(void) //初始化
delay_ms(15);
writecom(0x38);
delay_ms(5);
writecom(0x38);
delay_ms(5);
writecom(0x38);
writecom(0x38);
writecom(0x08);
writecom(0x01);
writecom(0x06);
writecom(0x0c);
void lcdxianshi(uint d)
uint j;
chushihua();
writecom(0x80);
for(j=0;j<16;j++)
writedate(xianshi1[j]);
writecom(0xc0);
writedate(num[dist]);
writedate(' ');
writedate(' ');
writedate('s');
writedate(' ');
writedate('=');
writedate(' ');
writedate(num[d/100]);
writedate(num[d/10%10]);
writedate(num[d%10]);
writedate(' ');
writedate('c');
writedate('m');
// writedate(' ');
writedate(num[TR0]);
writedate(num[n/10]);
writedate(num[n%10]);
void main()
Trig=0;
uint j,b=10;
uint time;
EA=0;
chushihua();
TMOD=0x01;
while(1)
Trig=0;
Trig=1;
delay20us();
Trig=0;
while(Echo==0);
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
EA=1;
ET0=1;
TF0=0;
TR0=1;
while(TR0==0);
if(n<20)
dist=n*17;
else
dist=400;
lcdxianshi(dist);
n=0;
void int0() interrupt 0
TR0=0;
void timer0() interrupt 1
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
n++;
IT0=1;EX0=1;
if(n>=36)
TR0=0;
while(TR0==0); //你这里有等待的效果嘛?
if(n<20)
dist=n*17;
else
dist=400;追问
while(TR0==0);//这里我写错了但即使while(TR0==1);也是错的
追答出来的现象是什么现象呢?
参考技术B 不会 参考技术C echo =1的时候才可以啊!!谁能帮我看一下这些代码的意思
public static byte[] b(byte paramByte1, byte paramByte2, byte paramByte3)
byte[] arrayOfByte = new byte[5];
arrayOfByte[0] = -1;
arrayOfByte[1] = paramByte1;
arrayOfByte[2] = paramByte2;
arrayOfByte[3] = paramByte3;
arrayOfByte[4] = -1;
return arrayOfByte;
public static byte[] b(String paramString)
try
byte[] arrayOfByte1 = new BigInteger(paramString, 16).toByteArray();
return arrayOfByte1;
catch (Exception e)
e.printStackTrace();
return null;
@SuppressWarnings("unused")
private void sendMsg (byte [] result)
// TODO Auto-generated method stub
// 发送数据
try
//InputStream socketReader = c.getInputStream();
OutputStream socketWriter = socket.getOutputStream();
socketWriter.write(result);
socketWriter.flush();
//PrintWriter out = new PrintWriter(socket.getOutputStream());
//out.println(data);
//out.flush();
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();
public static byte[] b(byte paramByte1, byte paramByte2, byte paramByte3)
byte[] arrayOfByte = new byte[5];//声明一个byte[ ]数组,长度是5
//下面给这个数组的5个元素赋值
arrayOfByte[0] = -1;
arrayOfByte[1] = paramByte1;
arrayOfByte[2] = paramByte2;
arrayOfByte[3] = paramByte3;
arrayOfByte[4] = -1;
return arrayOfByte;//最后返回这个数组
//下面是一个静态的方法b,它的返回类型是byte[ ],有1个String类型的参数
public static byte[] b(String paramString)
try //声明一个byte[ ],用BigInteger的构造方法将String类型的参数传进去,构建了对象后再.toByteArray();转为byte[ ] 数组..try是为了捕获类型转换异常
byte[] arrayOfByte1 = new BigInteger(paramString, 16).toByteArray();
return arrayOfByte1;//无异常,则返回arrayOfByte1
catch (Exception e)//如果捕获异常,执行以下 内代码
e.printStackTrace();
return null;//假如捕获异常,则返回null
@SuppressWarnings("unused")//忽略警告的一个注解
private void sendMsg (byte [] result) //一个无返回值的方法,用来发送消息,1个byte[ ]类型参数
// TODO Auto-generated method stub
// 发送数据
try
//InputStream socketReader = c.getInputStream();
OutputStream socketWriter = socket.getOutputStream(); //socket是一种"套接字"的通讯机制,OutputStream对象要从socket.getOutputStream()的方法获得,用于socket输出流;
socketWriter.write(result);//将参数写入
socketWriter.flush();//释放
//PrintWriter out = new PrintWriter(socket.getOutputStream());
//out.println(data);
//out.flush();
catch (IOException e) //捕获异常后执行 内代码
// TODO Auto-generated catch block
e.printStackTrace();
基本每行都写注释了,你看的懂就看吧,基础不好的话,从基础学起,先不要看太复杂的 参考技术A 公共静态字节(字节[ ]乙parambyte1,parambyte2 parambyte3字节,字节)
字节[ ] arrayofbyte =新字节[ 5 ];
arrayofbyte [ 0 ] = - 1;
arrayofbyte [ 1 ] = parambyte1;
arrayofbyte [ 2 ] = parambyte2;
arrayofbyte [ 3 ] = parambyte3;
arrayofbyte [ 4 ] = - 1;
返回arrayofbyte;
公共静态字节[ ]乙(字符串paramstring)
试试看
字节[ ] arrayofbyte1 =新(paramstring为此分数,16)。tobytearray();
返回arrayofbyte1;
捕获(异常欧)
E . printstacktrace();
返回空;
“suppresswarnings(“闲置”)
私人无效发送短消息(字节[ ]结果)
/ /做的自动生成方法存根
/ /发送数据
试试看
/ /输入流socketreader = C getinputstream();
将socketwriter = getoutputstream()插座;
socketwriter写(结果);
socketwriter flush();
/ / printwriter =新printwriter(getoutputstream()插座。);
/ /输出(数据);
/ / flush()出来;
抓住(类电子)
/ /待办事项自动生成块
E . printstacktrace();
追问
什么意思啊?翻译的啊
追答这是编的程序吧 其他的我就不知道了 该翻译的 我全翻译了........
参考技术B 我看啊,前两个方法就是转换格式的,第三个适用于网络发送数据的。貌似是个自定义协议的发送静态工具类。
说简单点儿,就是用既定的数据,全都转化成byte[],然后发送出去。
以上是关于帮我看一下我的用51单片机控制HY-SRF-05超声波模块测距的C语言程序那里错了,我实在检查不出来了。的主要内容,如果未能解决你的问题,请参考以下文章
这个单片机控制舵机的程序 舵机会抖动 哪位大侠帮我改一下c程序?
hy-srf05管脚该如何接在stc12c5a60s2单片机上
使用超声波传感器HY-SRF05时,VCC端接在STM32F103C8T6单片机的5V引脚?
求教哪位高手帮我看一下这篇文章究竟说了啥啊???详细一点~~~ www.arl.wustl.edu/~pcrowley/p51-kum