杰出人士
- 积分
- 13941
- 威望
- 10902
- 贡献
- 2497
- 兑换币
- 716
- 注册时间
- 2011-9-24
- 在线时间
- 271 小时
|
用普通51是可以的,但换上加强型的就不行了trig=1;// delay20us(); trig=0; 这一句,我用while语句循环,输出波形是预料中的,但是衔接起来就不行了,时间被拉得很长,软件就测不到超声波模块的echo的信号了(因为回复信号在trig还没有降到低电平前就完了)困惑我好几天了#include<reg51.h>
#include<intrins.h>
#include "6x8.h"
#include "LQ12864.h"
#define uint unsigned int
#define uchar unsigned char
sbit trig=P1^7;
sbit echo=P3^2; uint succeed;
float t,d;
uint distance,timeh,timel;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void delay20us()
{
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
} void init_time1()
{
TMOD=0x11; //两个定时器都工作为16位定时器
TH1=0; //清零
TL1=0; //
}
void T1_time() interrupt 3
{
TH1=0;
TL1=0;
succeed=0;
EA=0;
}
void ex0()interrupt 0
{
timeh=TH1;
timel=TL1;
t=(timeh*256+timel)*1.09;
d=t*0.17;
distance=(int)d;
succeed=1;
TH1=0;
TL1=0;
EA=0;
}void main()
{
LCD_Init();
LCD_6x8(60,0,"start");
init_time1();
while(1)
{
trig=0;
echo=0;
succeed=0;
trig=1;
delay20us();
trig=0;
while(echo==0);
EA=1;
EX0=1;
ET1=1; //定时器1中断允许
TR1=1;
delay(60);
switch(succeed)
{
case 1:
LCD_Cler_6x8(0,0,4);
display();
break;
case 0:
LCD_Cler_6x8(0,2,6);
displayerror();
break;
}
// delay(1000);
}
}
程序就死在红色字体那边
|
|