基于STC单片机的红外测距C程序
#include
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; sbit a=P1^6;
sbit gew=P2^0;
sbit shiw=P2^1;
sbit baiw=P2^2;
sbit qianw=P2^3;
uchar qian,bai,shi,ge,i,o,p,q;
unsigned long int temp,zhi,b,c,d;
void delay(uchar z)
{
uchar x,y;
for(x=z;x>0;x--)
for(y=27;y>0;y--);
}
void bo()
{
delay(1);
a=~a;
}
void init()
{
EA=1;
EX0=1;
TMOD=0X01;
TH0=0;
TL0=0;
IT0=1;
}
void display()
{
temp=zhi;
if (temp>999)q=1;else q=0;
if (temp>99) p=1;else p=0;
if (temp>9) o=1;else o=0;
qian=temp/1000;
bai=temp%1000/100;
shi=temp%1000%100/10;
ge=temp%10;
if(q==1)
{ qianw=0;
baiw=1;
shiw=1; gew=1;
P0=table[qian]; delay(50);} if(p==1)
{ qianw=1; baiw=0; shiw=1; gew=1;
P0=table[bai]; delay(50);} if(o==1)
{ qianw=1; baiw=1; shiw=0; gew=1;
P0=table[shi]; delay(50);} qianw=1; baiw=1; shiw=1; gew=0;
P0=table[ge]; delay(50); gew=1; }
void main()
{
init();
while(1)
{
for(i=8;i>0;i--) bo();
i=0;
delay(5);
TR0=1;
if(TF0==1)
{
TR0=0;
TH0=0;
TL0=0;
}
display();
}
}
void zhong() interrupt 0 {
TR0=0;
d=TH0;
b=TL0;
c=d*256+b;
zhi=c*172/10000; TH0=0;
TL0=0;
}