花钱买会员?买完之后代码不对?来找我!
开源代码:
#include <intrins.h>
#include <stdio.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit TRIG = P2^1;
sbit ECHO = P2^0;
void Delay(uint us)
{
uint j;
for(j=0;j<us;j++){
uchar data i;
_nop_();
i=2;
while(--i);}
}
void UART_Init()
{
PCON |=0x50; //这里可以解决串口助手接收乱码的问题
SCON =0x50;
TMOD =0x21;
TH1 =0xfd; //这里决定串口波特率
TL1 =0xfd; //9600bps@11.0592mhz
TR1 =1;
ET1 =0;
}
float time,distance;
void UART_SendByte(void)
{
SBUF =0x01;
TRIG =0;
TMOD =0x21;
TL0 =0;
TH0 =0;
TR0 =0;
ET0 =1;
EA =1;
TRIG=1;
Delay(2);
TRIG =0;
while(ECHO ==0);
TH0= 0;
TL0= 0;
TR0 =1;
while(ECHO==1);
TR0 =0;
time=TH0*256 + TL0;
distance=(time/2.0)*0.034;
printf("%3f",distance);
while(TI==0);
TI==0;
}
void main()
{
UART_Init();
while(1)
{
UART_SendByte();
Delay(100000);
}
}
硬件分享:
常见问题:
1.串口空白?
答:串口错了,记得修改成单片机对应串口
2.乱码?
答:波特率错了,或修改PCON|=? , 修改PCON |=0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80
总之,那个现象正常就用哪个,常用的是0x50和0x80.
3.测量有误差?
答:问题不大,不用管
4.测量距离与实际不符?
答:若测量距离过小(0cm-3cm),大概在这个区间的误差可以忽略,若不想忽略可修改代码中UART_Init()部分,直至达到最优条件即可。
(该博文会持续完善,若仍有问题可私信我,将继续更新...)