lstcspring 发表于 2012-12-7 22:28
晕,这样说谁知道问题在哪儿
我就是看有人回复没有,还是有好心人回复我就上程序给看看
/*************************************************
发射脉冲的端口:P10
接收脉冲的端口:P11
让定时器t0处于计时状态
--------------------
*****************************************************/
#include
#include // 声明了void _nop_(void);
***it Trig=P1^0;
***it Echo=P1^1;
bit temp;
unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf};
unsigned int dat=0;//全局变量,保持测得的距离
void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4);
//=========延时函数============================
void delay()
{unsigned int n;
for(n=0;n<200;n++);
}
void main()
{unsigned char k;
TMOD=0x01;//计数器0工作于方式1
TH0=0x00;
TL0=0x00;
while(1)
{ET0=1;
EA=1;
Echo=1;//将其作为输入引脚
Trig=1; // 启动一次模块
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
Trig=0;
while(!Echo);//等待发送信号
TR0=1;//开启计时器
while(Echo);//为高电平,处于计时状态,为0时表明接收到回波
TR0=0;//关闭计时器,按方式1,最大为65536us,大约能到达9m
dat=TH0*256+TL0;
//为使得计算范围始终在int类型内
dat=dat*0.18;//计算出距离,单位:cm
TH0=0x00;
TL0=0x00;//值清零
for(k=20;k>0;k--)
disp(dat/1000,dat%1000/100,dat%100/10,dat%100%10);
}
}
//====定时器溢出中断====
void intT0_int() interrupt 1
{
disp(10,10,10,10);//超出距离,定时器溢出指示
}
/*******四位数码管的显示函数
段选:P0
位选:P20-P23*******/
void disp(unsigned char x1,unsigned char x2,unsigned char x3,unsigned char x4)
{
P2=0x08;//高半字节保持不变,设定为选信号
P0=tab[x1];
delay();
P2=0x04;
P0=tab[x2];
delay();
P2=0x02;
P0=tab[x3]+0x80;
delay();
P2=0x01;
P0=tab[x4];
delay();
}
|