HC-SR04测距程序(调试通过)
#include<reg51.h>#include<string.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit shizhong=P0^1; //164 时钟线
sbit shuju=P0^0; //164 数据线
sbit chufa=P2^0; //触发信号输入端
unsigned int PWMBJ,i,m,j,k,juli,juli1,juli2;
unsigned char code szi[]={0XEE,0X82,0XDC,0XD6,0XB2,0X76,0X7E,0XC2,0XFE,0XF6};//控 制字 0~9
uint T;
void delay(uint z)//延时子程序 { uint x,y; for(x=10;x>0;x--) for(y=z;y>0;y--); }
void xianshi(uint x,uint y) //显示子程序
{ char aa; int c; m=y%10;//个位
k=y/10;//十位
j=x%10;//次高位
i=x/10;//最高位
for (c=0;c<4;c++)//送四个数
{ if(c==0) aa=szi;
else if(c==1) aa=szi;
else if(c==2)
aa=szi&0xFE;
else aa=szi;
for(i=0;i<8;i++) //每个数送八位
{ shizhong=0; //产生下降沿
shuju=aa&1;
aa=aa>>1; //右移一位
shizhong=1; }
}
delay(2000); }
void main()
{
TMOD=0x19;
EA=1; //开总中断
TR0=1;//启动定时器 0
EX0=1; //开外部中断 0
IT0=1; //下降沿中断
while(1)
{ chufa=1;
_nop_();
_nop_(); _
nop_();
_nop_(); _
nop_();
_nop_();
_nop_();
_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); chufa=0;
juli=0.17*T;//计算距离()
juli1=juli/100;//高二位
juli2=juli%100;//第二位
xianshi(juli1,juli2);//调用现实函数
}
}
void int0()interrupt 0 //回响输出端高电平宽度测量 (上升沿到来时候开始计时, 下降沿到来 进入外部中断,关闭计时器,停止计时) { T=(TH0*256+TL0);//计算定时器内的测量值 TH0=0; //定时器清 0 TL0=0; }
页:
[1]