蓝桥杯备忘录——超声波
有关蓝桥杯的超声波代码
实测测距能达到两米多
以下是代码
void chao_init()
{
uchar i;
for(i=0;i<8;i++)
{
na1=1; //连续发送8个频率为40Khz的超声波信号
Delay12us();
na1=0;
Delay12us();
}
}
//////////////////////////////////////////////////
接下来是计算函数的定时器初始化
定时器初始化可以直接用软件生成,但需要把TH0和TL0的值清零
void Timer0_Init(void) //10微秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初始值
TH0 = 0x00; //设置定时初始值
}
//////////////////////////////////////////////////
计算函数
uint get_chao()
{
uint time=0; //计算变量,通过return返回出去
TMOD &= 0xf0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0x00; //设置定时初值
chao_init(); //发送八个40k的方波
TR0=1; //迅速开启定时器
while(nb1&&TF0==0); //当NB1等于0时或者TF标志位中断时推出while循环
TR0=0; //关闭定时器
if(TF0==0) //如果未溢出则判定值有效
{
time=TH0<<8|TL0; //将定时器值高八位和低八位赋值给time
return time*0.017; //测试发现无论定时器以1t还是12t的频率下都是乘与0.017
}
else
{
TF0=0; //如果中断标志位超出,则清空中断标志位
time=0;
return time;
}
}

浙公网安备 33010602011771号