以下是本屌的利用超声波测距的小程序,求大神指导怎样利用中断进行完善,使其超出63MS时数码管不灭还可进行下一次测量?
#include <reg52.h>
#include<intrins.h>
unsigned char code dis_code[11]={0xc0,0xf9,0xa4,0xb0, // 0, 1, 2, 3
0x99,0x92,0x82,0xf8,0x80,0x90,0x7f};//
sbit TX=P3^2;
sbit RX=P3^3;
unsigned char s,flag;
unsigned int time;
/*延时函数*/
void delay(unsigned char n)
{
unsigned int i;
for(i=0;i<n;i++)
{
_nop_();
_nop_();
}
}
/*让超声波模块启动函数*/
void Csb_Start()
{
TX=1;
delay(15);
TX=0;
}
/*超声波计算加显示函数*/
void Count()
{
time=TH0*256+TL0;//字节转换成十进制数
TH0=0;
TL0=0;
s=time/58;
P2=0xdf;
P0=dis_code[s/100];
delay(50);
P2=0xff;
P2=0xbf;
P0=dis_code[(s%100)/10];
delay(50);
P2=0xff;
//delay(5);
P2=0x7f;
P0=dis_code[(s%100)%10];
delay(50);
P2=0xff;
P2=0xdf;
P0=dis_code[10];
delay(50);
P2=0xff;
delay(50);
}
void main()
{
TMOD=0x01;
TH0=0;
TL0=0;
while(1)
{
Csb_Start();
while(!RX);
TR0=1;
while(RX);
TR0=0;
Count();
delay(20);
}
}
|