基于89C51的超声波测距程序逐句注释.txt
- 文档编号:2490813
- 上传时间:2022-10-30
- 格式:TXT
- 页数:4
- 大小:4.56KB
基于89C51的超声波测距程序逐句注释.txt
《基于89C51的超声波测距程序逐句注释.txt》由会员分享,可在线阅读,更多相关《基于89C51的超声波测距程序逐句注释.txt(4页珍藏版)》请在冰豆网上搜索。
/*�٣��ó����ǿ���ʹ�õij�����������û��ʹ���ⲿ�жϣ�
����T1�ж���ʹ��һ��ʱ�䣬�ᵼ�����Ľ��S����
��������ǰ�main�����е�while��TX)�����ⲿ�ж�0�С�
�����������ʾ�����������Բ�ʹ��*//
//hc-sr04���������ģ��DEMO����
//���ߣ�ģ��TRIG��P1.2ECH0��P1.1
#include
#include
unsignedinttime=0;
unsignedinttimer=0;
unsignedlongS=0;//������ʾ������õ��ľ���
bitflag=0;//�ж��Ƿ����
sbitdula=P2^6;
sbitwela=P2^7;//�����������ʾ
sbitRX=P1^1;//echo
sbitTX=P1^2;//trig
sbitD5=P1^4;//���Բ�Ҫ��echo�ߵ�ƽʱ����D5��
unsignedlongx;//�����������ʾ
unsignedcharcodetable[]={//���������
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
voidDisplay(unsignedlongnum);
voidDelay(unsignedintz);//z=1�����1ms
voidConut(void)///////////�������
{
time=TH0*256+TL0;//��������㵽��ʱ�䣬����ʱ�䣬��Ӧ���ٳ���
//12/11.0593M��һ���������ڣ�ʱ��Ӧ����time*12/11.0592
TH0=0;//��ʱ��0�ij�ʼֵΪ0
TL0=0;
S=(time*1.845)/100;//�������CM
// S=(time*1.845)/10;//�������mm
//time*12*170/(11.0592*1000)mm=time*1845/10000mm
if(S>=500)//������5m����500cm
S=888888;
if(flag==1)//�ж��Ƿ����
{S=888888;
flag=0;
TH0=0;
TL0=0;
}
}
/********************************************************/
voidzd0()interrupt1 //T0�ж��������������,������Χ
{
flag=1; //�ж������־
}//��������Ҫ�ļ�ʱ0�жϣ�TH0��TL0��ʼֵΪ0
/********************************************************/
voidzd3()interrupt3 //T1�ж�����ɨ������ܺͼ�800MS���ģ��
{//���Ǽ�ʱ��1�ж�
TH1=0xf8;//����ֵ��Ӧ����2ms��
TL1=0x30;
timer++;
if(timer>=400)
{
timer=0;
TX=1; //800MS���һ��ģ��
Delay(30);//һ�γ������ź�ʱ��30ms
TX=0;
}
}
/*********************************************************/
voidmain(void)
{
TMOD=0x11; //��T0Ϊ��ʽ1��GATE=1
TH0=0;//Ŀ�Ķ������ж�T0��T1
TL0=0;//�ж�0��ʼ��
TH1=0xf8; //2MS��ʱ
TL1=0x30;
ET0=1;//����T0�ж�
ET1=1; //����T1�ж�
TR1=1; //�����ʱ��
EA=1; //�������ж�
while
(1)
{
while(!
RX); //��RXΪ��ʱ�ȴ�����echoΪ�͵�ƽ
TR0=1; //�������
D5=0;//���Բ�Ҫָʾ��
while(RX); //��RXΪ1�������ȴ�
TR0=0; //�رռ���
D5=1;//���Բ�Ҫָʾ��
Conut(); //����
Display(S);//�������ʾ
}
}
voidDisplay(unsignedlongnum)//�����Ӻ�����������ʾ��λ��
{
//�����Ӻ���ǰ����Ҫ��main����ǰ������λѡ�Ͷ�ѡ
/*����
sbitdula=P2^6;
sbitwela=P2^7;
*/
unsignedinttemp;//�����ӳ�for����
unsignedcharshiwanwei,wanwei,qianwei,baiwei,shiwei,gewei;
//���������λ����ʮ��λ����λ
shiwanwei=num/100000;
wanwei=num%100000/10000;
qianwei=num%10000/1000;
baiwei=num%1000/100;
shiwei=num%100/10;
gewei=num%10;
wela=1;
P0=0xdf;//11111011//λѡ��λ
wela=0;
dula=1;
P0=table[gewei];
dula=0;
for(temp=100;temp>0;temp--);
if(shiwanwei!
=0||wanwei!
=0||qianwei!
=0||baiwei!
=0||shiwei!
=0)
{//�жϸ�λ�Ƿ�Ϊ0��Ϊ0�Ļ�����ʾ��λ��0
wela=1;
P0=0x6f;//11110110//λѡʮλ
wela=0;
P0=0xff;
dula=1;
P0=table[shiwei];
dula=0;
for(temp=50;temp>0;temp--);
}
if(shiwanwei!
=0||wanwei!
=0||qianwei!
=0||baiwei!
=0)
{
wela=1;
P0=0x77;//11101110//λѡ��λ
wela=0;
P0=0xff;
dula=1;
P0=table[baiwei];
dula=0;
for(temp=50;temp>0;temp--);
}
if(shiwanwei!
=0||wanwei!
=0||qianwei!
=0)
{
wela=1;
P0=0x7b;//11011110//λѡǧλ
wela=0;
P0=0xff;
dula=1;
P0=table[qianwei];
dula=0;
for(temp=50;temp>0;temp--);
}
if(shiwanwei!
=0||wanwei!
=0)
{
wela=1;
P0=0x7d;//10111110//λѡ��λ
wela=0;
P0=0xff;
dula=1;
P0=table[wanwei];
dula=0;
for(temp=50;temp>0;temp--);
}
if(shiwanwei!
=0)
{
wela=1;
P0=0x7e;//01111110//λѡ��λ
wela=0;
P0=0xff;
dula=1;
P0=table[shiwanwei];
dula=0;
for(temp=50;temp>0;temp--);
}
}
voidDelay(unsignedintz)//��������z��ֵΪ1�Ͷ�Ӧ1ms
{
unsignedinta,b;
for(a=z;a>0;a--)
for(b=110;b>0;b--);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 C51 超声波 测距 程序 逐句 注释