android 超声波测距,干货!!超声波测距实验--蓝桥杯备战

[C] 纯文本查看 复制代码#include

#include

#define uchar unsigned char

#define uint unsigned int

#define somenop {_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}

sbit TX=P1^0;//发射引脚

sbit RX=P1^1;//接收引脚

uchar intr=0;

bit csbf=0;

uint t=0;

uint distance;//定义距离

void Timer0Init(void) //2毫秒@11.0592MHz

{

AUXR |= 0x80; //定时器时钟1T模式

TMOD &= 0xF0; //设置定时器模式

TL0 = 0x9A; //设置定时初值

TH0 = 0xA9; //设置定时初值

TF0 = 0; //清除TF0标志

TR0 = 1; //定时器0开始计时

}

void time0(void) interrupt 1 //默认中断优先级 1

{

TL0 = 0x9A; //设置定时初值

TH0 = 0xA9; //设置定时初值

intr++;

if(intr==100)

{

csbf= 1;

intr=0;

}

}

void Timer1Init(void) //2毫秒@11.0592MHz

{

AUXR |= 0x40; //定时器时钟1T模式

TMOD &= 0x0F; //设置定时器模式

//TL1 = 0x9A; //设置定时初值

//TH1 = 0xA9; //设置定时初值

//TF1 = 0; //清除TF1标志

//TR1 = 1; //定时器1开始计时

}

//TX引脚发送40KHz方波信号驱动超声波发送探头

//使用软件延时注意RC振荡器频率

void send_wave(void)

{

unsigned char i = 8; //发送8个脉冲

for(i=8;i>0;i--)

{

TX=0;

TX=1;

somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;

TX=0;

}

}

void main()

{

allinit();//开发板初始化

Timer0Init();//定时器0初始化

Timer1Init();//定时器1初始化

EA=1; //打开总中断

ET0 = 1; //打开定时器0中断

while(1)

{

if(csbf==1) // 200毫秒更新一次数据

{

csbf=0;

send_wave(); //发送方波信号

TR1 = 1; //定时器1开始计时

while((RX==1)&&(TF1==0)); //等待收到脉冲

TR1 = 0; //关闭计时

if(TF1==1)//发生溢出

{

TF1=0;

distance=999; //无返回

}

else

{

t = TH1;// 计算时间

t <<= 8;

t |= TL1;

distance = (unsigned int)(t*0.017); //计算距离

distance = distance/12;

}

TH1 = 0;

TL1 = 0;

}

yi = distance/100;

er = distance%100/10;

san = distance%10;

keyscan16();

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值