[51]聲波測距

#include<reg52.h> 
#define uchar unsigned char
#define uint unsigned int
uint led[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e }; //p0端0到f,0x7f爲點
uint ledx[] = { 0x00,0x0e,0x0d,0x0b,0x07,0xff };             //p2端都亮,到都滅
sbit trig = P1 ^ 0;
sbit echo = P1 ^ 1;
float dis = 0;
void delay2(uint z)
{
    uint x, y;
    for (x = z; x > 0; x--)
        for (y = 110; y > 0; y--);
}
void init(void)
{
    TMOD = 0x02;
    TH1 = 0x00;
    TL1 = 0x00;
}
void cul()
{
    echo = 0;
    TH1 = 0X00;
    TL1 = 0X00;
    trig = 1;
    delay2(5);
    trig = 0;
    EX1 = 1;
    while (1)
        if (echo == 1)
        {
            TR1 = 1; break;
        }
    while (1)
        if (echo == 0)
        {
            TR1 = 0; break;
        }
    dis = ((TH1 * 256 + TL1) * 1.0851 * 340 * 100) / (1000000 * 2);
}
uint dist;
uint a, b, c, d,i=0;
void main()
{
    init();
    while (1)
    {
        cul();
        i=0;
        dis*=1.40;//強行改精確度你敢信
        a = dis / 1000;
        b = dis / 100 - a * 10;
        c = dis / 10 - a * 100 - b * 10;
        d = dis - a * 1000 - b * 100 - c * 10;
        while (1)
        {
            P0 = led[a];
            P2 = ledx[1];
            delay2(5);
            P0 = 0x7f;
            P2 = ledx[1];
            delay2(5);
            P0 = led[b];
            P2 = ledx[2];
            delay2(5);
            P0 = led[c];
            P2 = ledx[3];
            delay2(5);
            P0 = led[d];
            P2 = ledx[4];
            delay2(5);
            i++;
            if(i>10)break;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章