标题:
基于单片机超声波测距资料
[打印本页]
作者:
18313855332
时间:
2016-10-31 21:09
标题:
基于单片机超声波测距资料
自己动手下载吧:
超声波测距 main.rar
(1.11 KB, 下载次数: 22)
2016-10-31 21:09 上传
点击文件名下载附件
下载积分: 黑币 -5
/*
超声波测距
8-29 HC-SR04模块用有-2cm的误差,
但是US-015模块是正确的
编程思路
测距动作
开20us的Trig
等待Echo上升
一旦上升开定时器
Echo下降时关定时器
输出定时器的值
主程序
循环测距动作
间隔1s
定时器中断
复位
准确性
与计算公式有关
与被测物体的表面积大小有关
与角度有关
*/
#include <stdio.h>
#include <intrins.h>
#include <math.h>
#include <STC12C5A60S2.H>
sbit hcsr04_trig = P2^0;//发
sbit hcsr04_echo = P3^2;//收 INT0
sbit hcsr04_test = P2^1;//测试
unsigned char data hcsr04_tl = 0;
unsigned char data hcsr04_th = 0;
unsigned int data hcsr04_s = 0;
void Delay20us() //@11.0592MHz
{
unsigned char i;
_nop_();
i = 52;
while (--i);
}
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 43;
j = 6;
k = 203;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void UART_init()
{
PCON = 0x00;
SCON = 0x50;//0101 0000
TMOD |= 0x20 ;
TH1 = 0xFD;//9600bps
TL1 = 0xFD;
ET1 = 0;
ES = 0;//1时开串口中断
TR1 = 1;
TI = 1;
puts("HC-SR04 \t--------");
Delay20us();
puts("UART_init \t-");
Delay20us();
}
void t0_init()
{
TMOD |= 0x01;//T0工作方式1------16位
TH0 = 0x00;
TL0 = 0x00;
ET0 = 1;//T0中断
EA = 1;
puts("t0_init \t-");
Delay20us();
}
void t0ser() interrupt 1
{
TH0 = 0;
TL0 = 0;
}
/*
HC-SR04 模块工作原理
1.Trig触发测距 >=10us 高电平
2.模块自动发送8个40kHz方波
自动检测是否有信号返回
3.当有信号返回时,
*/
void hcsr04()
{
TR0 = 0;
TH0 = 0;
TL0 = 0;
hcsr04_trig = 1;
Delay20us();
hcsr04_trig = 0;
Delay20us();
while(!hcsr04_echo);
TR0 = 1;
while(hcsr04_echo);
TR0 = 0;
// hcsr04_s = (TH0*256+TL0)/58;
hcsr04_s =(TH0*256+TL0+59)*0.0172;
}
void main(void)
{
UART_init();
t0_init();
while(1)
{
hcsr04();
printf("MAIN \thcsr04_s = %d\n",
hcsr04_s);
Delay1000ms();
}
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1