-
//
超声波模块程序
//
超声波模块程序
//Trig = P2^0
//Echo =
P3^2
#include
#define uchar unsigned char
#define uint unsigned int
int time;
int succeed_flag;
uchar timeL;
uchar timeH;
sbit Trig=P1^0;
sbit
Echo=P3^2;
uchar code
table[
]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f};
uchar code
table1[]={0,1,2,3,4,5,6,7};
//
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
//
void
delay_20us()
{
uchar a
;
for(a=0;a<100;a++);
}
//*************************************
****************
**********
//
显示数据转换程序
void display(uint temp)
{
uchar ge,shi,bai;
bai=temp/100;
shi=(temp%100)/10;
ge=temp%10;
P2=table1[2];
P0=table[ge];
delay(1);
P2=table1[1];
P0=table[shi];
delay(1);
P2=table1[0];
P0=table[bai];
delay(1);
}
//************************************************
*****
**********
void main()
{
uint distance;
// test =0;
Trig=0;
//
首先拉低脉冲输入引脚
EA=1; //
打开总中断
0
TMOD=0x10; //
定时器
1
,
16
位工作方式
p>
while(1)
{
EA=0;
//
关总中断
Trig=1; //
超声波输入端
delay_20us();
//
延时
20us
Trig=0; //
产生一个
20us
p>
的脉冲
while(Echo==0); //
等待
Echo
回波引脚变高电平
succeed_flag=0; //
清测量成功标志
EA=1;
EX0=1; //
打开外部中断
0
TH1=0; //
定时
器
1
清零
TL1=0; //
定时器
1
清零
TF1=0;
//
计数溢出标志
TR1=1; //
启动定时器
1
delay(20);
//
等待测量的结果
TR1=0; //
关闭定时器
1
EX0=0;
//
关闭外部中断
0
if(succeed_flag==1)
{
time=timeH*256+timeL;
distance=time*0.0172;
//
厘米
}
if(succeed_flag==0)
{
distance=0;
//
没有回波则清
零
// test = !test;
//
测试灯变化
}
display(distance);
}
}
//*******
**********************************************
**********
//
外部中断
0
,用做判断回波电平
void exter() interrupt 0 //
< br>外部中断
0
是
0
号
{
EX0=0; //
关闭外部中断
timeH =TH1;
//
取出定时器的值
timeL =TL1; //
取出定时器的值
succeed_flag=1;//
至成功测量的标志
}
//***********************
******************************
*********
**
//
定时器
1
< br>中断
,
用做超声波测距计时
void timer1() interrupt 3 //
{
TH1=0;
TL1=0;
}
1602
液晶显示
的超声波模块程序
接口程序里边都有、、
-
-
-
-
-
-
-
-
-
上一篇:2016sql数据库期末考试题及答案
下一篇:KBR的煤制合成氨新工艺(NH3)