[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;
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.