单片机超声模块(HC-SR04)说明Word文件下载.doc
《单片机超声模块(HC-SR04)说明Word文件下载.doc》由会员分享,可在线阅读,更多相关《单片机超声模块(HC-SR04)说明Word文件下载.doc(6页珍藏版)》请在冰豆网上搜索。
板子:
郭天祥老师的52单片机板?
设计者:
蒋
时间:
2012-4-29
学校:
南昌航空大学
******************************************/
#include<
reg52.h>
sbitdula=P2^6;
//数码管段选,锁存器控制信号
sbitwela=P2^7;
//数码管位选,锁存器控制信号
sbita=P2^3;
#defineucharunsignedchar
#defineuintunsignedint
inttime;
intsucceed_flag;
uchartimeL;
uchartimeH;
sbitTrig=P1^0;
sbitEcho=P3^2;
ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
voiddelay(uintz)
{
uintx,y;
for(x=z;
x>
0;
x--)
for(y=110;
y>
y--);
}
voiddelay_20us()
{
uchara;
for(a=0;
a<
100;
a++);
}
//显示数据转换程序
voiddisplay(uinttemp)
ucharge,shi,bai;
bai=temp/100;
shi=(temp%100)/10;
ge=temp%10;
dula=0;
P0=table[ge];
//送数字8到段码端口
dula=1;
dula=0;
wela=0;
P0=0x7b;
//数码管位选
wela=1;
delay(5);
P0=table[shi];
P0=0x7d;
P0=table[bai];
//送数字8到段码端口
P0=0x7e;
if(temp>
150)
a=0;
else
a=1;
voidmain()
{
uintdistance;
Trig=0;
//首先拉低脉冲输入引脚
EA=1;
//打开总中断0
TMOD=0x10;
//定时器1,16位工作方式
while
(1)
{
EA=0;
//关总中断
Trig=1;
//超声波输入端
delay_20us();
//延时20us
Trig=0;
//产生一个20us的脉冲
while(Echo==0);
//等待Echo回波引脚变高电平
succeed_flag=0;
//清测量成功标志
EA=1;
EX0=1;
//打开外部中断0
TH1=0;
//定时器1清零
TL1=0;
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;
//没有回波则清零
}
display(distance);
}
//外部中断0,用做判断回波电平
voidexter()interrupt0//外部中断0是0号
{
EX0=0;
//关闭外部中断
timeH=TH1;
//取出定时器的值
timeL=TL1;
succeed_flag=1;
//至成功测量的标志
//定时器1中断,用做超声波测距计时
voidtimer1()interrupt3//
TH1=0;
TL1=0;
}
一遍可能看的有点糊涂!
多看几遍就可以看懂!
不明白问me+739141300
技术付出的是金钱和汗水,收获的是一份自信!