在显示超声波是,我是想1s测一次,使用定时器0定时,结果一直没办法测距,显示一直是0,中断是进去了的,因为这个不行,所以我改为了延时1s,延时中也使用了显示函数,但最后也为0,想问一下这是为什么,如果一直让测距的话,数据都重合了,感觉不太能看清。
想问一下有人可以解决吗?
void Display()
{
SelectHC573(7);
SelectHC573(0);
SMG_Bit(SMG[d%10],7);
SMG_Delay(300);
SMG_Bit(SMG[(d/10)%10],6);
SMG_Delay(300);
SMG_Bit(SMG[(d/100)%10],5);
SMG_Delay(300);
SMG_Bit(SMG[(d/1000)%10],4);
SMG_Delay(300);
SMG_Bit(SMG[d/10000],3);
SMG_Delay(300);
SMG_Bit(0xff,8);
SMG_Delay(300);
}
void Delay1000ms(void) //@12.000MHz
{
unsigned char data i, j, k;
_nop_();
_nop_();
i = 46;
j = 153;
k = 245;
do
{
do
{
while (--k) Display();
} while (--j) ;
} while (--i) ;
}
int main()
{
Close();
while(1)
{
d=distance();//每一秒测一次,超声波,不属于NE555,需要定时1s
Display();
Delay1000ms();
}
}
超声波模块
#include "sonic.h"
void delay12()
{
unsigned int i = 33;
_nop_();
_nop_();
while(--i);
}
void send_wave()
{
unsigned char i ;
for(i = 0;i < 8;i ++)
{
TX = 1;
delay12();
TX = 0;
delay12();
}
}
unsigned char distance()
{
unsigned int time = 0;
TMOD &= 0x0f;
TL1 = 0x00;
TH1 = 0x00;
send_wave();
TR1 = 1;
while((RX == 1)&&(TF1 == 0));
TR1 = 0;
if (TF1 == 0)
{
time = TH1;
time <<= 8;
time = time | TL1;
return (time*0.017); //单位cm
}
else
{
TF1 = 0;
return 9999;
}
}