#include<reg52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
uchar code shuzi[]={0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
unsigned long time;
bit flag;
sbit dula=P2^6;
sbit wela=P2^7;
sbit trig=P1^0;
sbit echo=P1^1;
// 延時函式毫秒
void delayms(xms)
{
uchar i,j;
for(i=xms;i>0;i--)
for(j=110;j>0;j--);
}
//延時微秒
void delayus(uchar xus)
{
uchar i;
for(i=xus;i>0;i--)
_nop_();
}
//數碼管顯示函式
void display(uint temp)
{
uchar qian,bai,shi,ge;
qian=temp/1000;
bai=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%1000%100%10;
dula=1;
P0=shuzi[qian];
dula=0;
P0=0xff;
wela=1;
P0=0xfe;
wela=0;
delayms(5);
dula=1;
P0=shuzi[bai];
dula=0;
P0=0xff;
wela=1;
P0=0xfd;
wela=0;
delayms(5);
dula=1;
P0=shuzi[shi];
dula=0;
P0=0xff;
wela=1;
P0=0xfb;
wela=0;
delayms(5);
dula=1;
P0=shuzi[ge];
dula=0;
P0=0xff;
wela=1;
P0=0xf7;
wela=0;
delayms(5);
}
void Init()
{
trig=0;
echo=0;
TMOD=0x01;
EA=1;
ET0=1;
TH0=0;
TL0=0;
flag=0;
}
void count()
{
uint distance;
time=TH0*256+TL0;
TH0=0;
TL0=0;
distance=time*0.01853;
if((distance>400)||flag==1)
{
flag=0;
display(100);
}
else
{
display(distance);
}
}
void main()
{
Init();
while(1)
{
trig=1;
delayus(20);
trig=0;
while(!echo);
TR0=1;
while(echo)
TR0=0;
count();
}
}
void time0() interrupt 1
{
flag=1;
TH0=0;
TL0=0;
}
uj5u.com熱心網友回復:
用硬體仿真找,這樣比只看代碼更快uj5u.com熱心網友回復:
這東西沒硬體圖紙看不太懂,先確定硬體有沒有毛病。轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/25626.html
標籤:單片機/工控
