普中开发板C51超声波

#include <reg51.h>
#include <intrins.h>
#include <math.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP = P2^5;
sbit Trig = P1^0;
sbit Echo = P1^1;

sbit P24 = P2^4;
sbit P23 = P2^3;
sbit P22 = P2^2;

char tab1[] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};

int a, b, c,o=30;

void delay(unsigned int xms) {
    unsigned int i, j;
    for (i = xms; i > 0; i--)
        for (j = 112; j > 0; j--);
}

void init() {
    TMOD = 0x21;  // T0工作在定时器方式一模式
    TH0 = 0x00;  // 赋初值
    TL0 = 0x00;  // 赋初值
        TH1 = 0xfd;  // 赋初值
    TL1 = 0xfd;  // 赋初值
        PCON=0x00;
        SCON=0xd0;
    TR0 = 0;     // 初始化不启动
        TR1 = 1;
}

float GetDistance(unsigned int time) {
    double distance;
    distance = (int)time * 0.017;  // cm 距离=高电平时间×声速/2 0.017cm/us
    return distance;  // 将距离返回主函数
}

unsigned int RunOnce() {
    unsigned int time;
    Trig = 0;
    Trig = 1;
    init();
    Trig = 0;
    while (!Echo);  // 未收到返程波形,继续计时
    TR0 = 1;
    while (Echo);  // 收到返程波形echo=0,停止计时
    TR0 = 0;
    time = (TH0 * 256 + TL0) * 1.2;
    TH0 = 0;  // 清零
    TL0 = 0;
    return time;
}

void main() {
    unsigned int time = 0;
    double distance;
    P0 = 0xff;
    while (1) {
        time = RunOnce();  // 传感器接收到高电平的时间
        distance = GetDistance(time);
                    if(distance<=0x10)
                    {
                        SBUF=distance;
                        while(TI==0);TI=0;
                        delay(500);
                
                    }
                else
                {
                    
                while(o--)
                    {
                BEEP = !BEEP;//产生一定频率的脉冲信号
                delay(1);//延时1ms
                    }
                
                }
            
                }

}
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值