//晶振11.0592MHz
#include
#define uchar unsigned char
#define uint unsigned int
sbit trig = P0^2;
sbit echo = P3^3;
float dis = 0;
void delay_20us()
{
uchar bt ;
for(bt = 0;bt<10;bt++); //此处100太大改为10即可
}
void TIM1init(void)//定时器1初始化
{
TMOD=0x11;//定时器1工作方式2,TH1是重装值,TL1是初值
TH1=0x00; //重载值 溢出一次约50us
TL1=0x00; //初始化值
}
void test(void)
{
//因为超声波Z大测量4m当计时器计满时
//实际距离已经超过4m了所以此处不要用中断
TH1 = 0X00;
TL1 = 0X00;
trig = 1;
delay_20us();
trig = 0;
EX1 = 1;
while(!echo);
TR1 = 1;
//Z好不要用下降沿中断检测高电平时间,
//因为在进中断函数之前会产生很多压栈
//动作会产生比较大的误差
while(echo);
TR1 = 0;
//下面计算的是米,单位自己换算一下就行了
dis = (TH1 * 256 + TL1) * 0.17f; //(TH1 * 256 + TL1) * 340 / 2 / 1000
}
void main(void)
{
TIM1init();
while(1)
{
test();
//你没有给是什么显示此处计算出来dis单位为米
//要显示厘米需要自己换算
//display(dis);
}
}
/***********************************************************************************************
此处给你改了许多,不知道你是不是刚入门,源程序有好多问题,已经帮你修改好了
不过我没做具体测试,你需要要测试一下,好久没弄过超声波了,凭记忆帮你改的,
希望对你有帮助。
************************************************************************************************/