📄 ultrasonic2.c
字号:
#include<P89V51.H>
#include<LCD.C>
sbit P1_6 =P1^6;
sbit P1_7 =P1^7;
sbit P3_3 =P3^3;
unsigned char a,b;
unsigned int c;
void DisplayInt(Uchar X,Uchar Y,Uint f);
void DisplayOneChar(unsigned char X, unsigned char Y, unsigned char DData);
void Delay(unsigned char c,unsigned char d,unsigned char e)
{
unsigned char i,j,k;
for(i=0;i<=c;i++)
{
for(j=0;j<=d;j++)
for(k=0;k<=e;k++);
}
}
void RigourTimer(unsigned char m)
{
unsigned char i;
for(i=0;i<m;i++)
{
TMOD=0x00;
TH0=0xff30/256;
TL0=0xff30%256;
TR0=1;
EX1=1;
do{}
while(!TF0);
TF0=0;
}
TR0=0;
EX1=0;
}
void counter(void) interrupt 0 using 3 //测出往返时间
{
EX0=0;
P1_7=!P1_7;
EA=1;
TR1=0;
a=TL1;
b=TH1;
}
////////////////////////////////////////////////////////////
void timer1(void) interrupt 3 using 2
{
TR1=0;
}
/////////////////////////////////////////////////////////////
main()
{
PSB=1;
RST=0;
Delay(10,1,1);
RST=1;
Delay(1,10,1);
Delay(10,1,1);
LCMInit();
Delay(10,1,1);
EA=1;
EX0=0;
while(1)
{
//IE0=0;
EX0=0;
EA=1;
P1_6=1;
RigourTimer(2); //P1.6控制超声波的发射,发射250us
P1_6=0;
RigourTimer(20); //避开盲区,以检测回波
TMOD=0x10;
TH1=0;
TL1=0;
TR1=1; //开定时器
//开外部中断1,关闭定时器1,测量回波返回时间
EA=1;
IT0=1;
EX0=1;
//Delay(20,1,50); //延时
c=((unsigned int)b<<8)+a;
DisplayInt(0,0,c); //LCD输出定时器1寄存器的值
Delay(20,10,50);
WriteCommandLCM(0x02,1); //光标重新定位
Delay(1,10,50);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -