余超 发表于 2018-12-15 14:56:16

【实验室培训_201810期】 余超 第五周任务

本帖最后由 余超 于 2018-12-16 13:52 编辑

一、任务要求:
用超声波测距模块测量物体距离,并通过蓝牙模块将距离信息发送给手机。
二、工作环境:
开发环境:keil C51使用芯片:STC89C52   外设:超声波测距模块、蓝牙模块。
三、实现步骤:
编写一个超声波测距函数,通过定时器0来实现脉冲宽度的测量,在main函数循环体
中每隔一秒钟读取一次测距结果,并通过蓝牙将距离信息发送到手机上。

源码:
   
#include<reg52.h>
#include<intrins.h>
#include<stdio.h>
sbit TrigPin = P1^1;//发送引脚
sbit EchoPin = P1^2;//接收引脚
typedef unsigned int uint;
typedef unsigned char uchar;
uint num=0;
void delay(unsigned int ms)
{
        unsigned int x;
        for(;ms>0;ms--)
        for(x=114;x>0;x--)
        ;
}
void delayMicroseconds()//延迟12微秒
{
        _nop_();       
        _nop_();       
        _nop_();       
        _nop_();       
        _nop_();       
        _nop_();       
        _nop_();       
        _nop_();       
}
void UART_INIT()
{
        SM0 = 0;
        SM1 = 1;//串口工作方式1
        REN = 0;//允许串口接收
        EA = 1;//开总中断
        ET0=1;//开启定时器0中断
        TMOD = 0x29;//定时器1_8位自动重装模式,定时器0_16位定时器,开启门控
        TH1 = 0xfd;
        TL1 = 0xfd;//9600波特率
        TR1 = 1;//启动定时器1
        TR0=1;//启动定时器0
}

float sr04_read(void)
{
float distance;
        num=0;
        TH0=0x4c;//定时器复位
        TL0=0x02;
    TrigPin=0;//拉低发送端
        _nop_();//延迟3微秒
        _nop_();
        _nop_();
    TrigPin=1;//拉高发送端
        delayMicroseconds();//延迟十二微秒
        TrigPin=0;//拉低发送端
        while(!EchoPin);//等待接收端电平变高
        while(EchoPin);//等待接收端电平变低
        distance=num*50+((TH0-0X4c)*256+(TL0-0x02))*1.085/1000;//正脉冲时间(毫秒)
distance = distance*340/2000;//距离(M)
distance = distance*100;//距离(CM)
return distance;
}
void main()
{
        float distance;
        UART_INIT();//串口初始化
        while(1)
        {
                distance = sr04_read();//读出距离
                TI=1;
    printf("distance:%.2f CM\n",distance);//串口发送距离
                TI=0;
    delay(1000);//延迟1秒
        }
}
void timer0() interrupt 1//定时器0中断服务程序
{
    TH0=0x4c;
        TL0=0x02;
        num++;
        if(num==20)
        {
                num=0;
        }
}
}



四、实现效果及问题:
初期通过51单片机通过了测试,不过当我用stm32开发板做的时候,发现超声波模块发送端引脚似乎出现了问题,
不知道是不是被烧坏了,连最初成功的51开发板也测试失败了。然而其他引脚都OK,讲道理在百分之99以上时间里,
发送端的电平都应该是低电平,然而我通过杜邦线将超声波发送端与单片机定义的发送端(连接有外设LED灯,低电平点亮)
连在一起后,之前成功的时候本来是比较亮的,结果灯变得特别暗(两端压差太小?),不言而喻,功能实现不了,
不知道是什么原因,姑且认为模块坏了吧。。。
成功的结果:


失败的结果:(右边的灯特别暗,因此被识别为常高电平,而不能驱动接收端产生正脉冲?)功能无法实现




余超 发表于 2018-12-15 14:58:07

最后一张图片发错了:'(,那是上次的任务

李维强-15级 发表于 2018-12-16 02:58:49

余超 发表于 2018-12-15 14:58
最后一张图片发错了,那是上次的任务

可以编辑帖子,修改内容

鲁亮 发表于 2018-12-18 15:44:01

自学了51和32,可以嘛,一会培训完来我这里领奖

余超 发表于 2018-12-19 15:00:05

鲁亮 发表于 2018-12-18 15:44
自学了51和32,可以嘛,一会培训完来我这里领奖

忘了看帖子了:'(,下次培训可不可以领取小东西:lol

鲁亮 发表于 2018-12-20 18:50:19

余超 发表于 2018-12-19 15:00
忘了看帖子了,下次培训可不可以领取小东西

页: [1]
查看完整版本: 【实验室培训_201810期】 余超 第五周任务