#include <stc15f2k60s2.h>
#include <intrins.h>
#define uchar unsigned char
#define somenop{_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}
sbit TX=P1^0;
sbit RX=P1^1;
uchar tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,0XBF,0XFF,0Xc1,0X8C,0XC8};//22个数 tab[22]=U,tab[23]=P,tab[24]=N
uchar dis[9]={0,0,0,0,0,0,0,0,0};
uchar discode[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
int t,tt;
bit flag_supersonic;
int t_supersonic;
int Distance;
void delayms(int ms);
void display();
void allinit();
void Timer0Init(void);
void Timer1Init(void);
void sendwave();
int distance_calculate();
void main()
{
allinit();
Timer0Init();
Timer1Init();
while(1)
{
if(flag_supersonic==1)
{
flag_supersonic=0;
Distance=distance_calculate();
}
dis[1]=Distance/100;
dis[2]=Distance/10%10;
dis[3]=Distance%10;
display();
}
}
void delayms(int ms)
{
int i,j;
for(i=0;i<ms;i++)
for(j=125;j>0;j--);
}
void allinit()
{
P2=0X80;P0=0XFF;
P2=0XA0;P0=0X00;
P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
}
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P2=0xc0;
P0=discode[i];
P2=0XE0;
P0=tab[dis[i+1]];
delayms(1);
P2=0XC0;P0=0XFF;P2=0XE0;P0=0XFF;
}
}
void Timer0Init(void) //2毫秒@12.000MHz
{
AUXR |= 0x80; //定时器时钟1T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x40; //设置定时初值
TH0 = 0xA2; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
EA=1;ET0=1;
}
void Time0() interrupt 1
{
t++;
if(t==100)//200ms 测量一次距离 刷新一次数据
{
flag_supersonic=1;
t=0;
}
}
void Timer1Init(void) //2毫秒@12.000MHz
{
AUXR |= 0x40; //定时器时钟1T模式
TMOD &= 0x0F; //设置定时器模式
TMOD |= 0x10; //设置定时器模式
TF1 = 0; //清除TF1标志
}
void sendwave()
{
uchar i;
for(i=0;i<8;i++)
{
TX=1;
somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;
TX=0;
somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;somenop;
}
}
int distance_calculate()
{
int distance;
sendwave();TR1=1;
while((RX==1)&&(TF1==0));
TR1=0;
if(TF1==1)
{
distance=999;
TF1=0;
}
else if(RX==0)
{
t_supersonic=TH1<<8|TL1;
distance=t_supersonic*0.017;
distance=distance/12;
}
TH1=0;TL1=0;
return distance;
}
10-11
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交