常驻嘉宾
- 积分
- 3743
- 威望
- 1374
- 贡献
- 973
- 兑换币
- 642
- 注册时间
- 2012-12-4
- 在线时间
- 698 小时
|
我用的是板子上自带的超声波模块。
程序如下:
#include<regx52.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
sbit HC138_C=P2^7;
sbit HC138_B=P2^6;
sbit HC138_A=P2^5;
sbit Trig=P1^0;
uchar weima[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
uchar duanma[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x090};
uchar k[]={0,0,0,0};
uchar p;
uint Distance;
void HC138(uchar C1,uchar B1,uchar A1)
{
HC138_C=C1;
HC138_B=B1;
HC138_A=A1;
}
void Delay_MS(uint x)
{
uchar i;
while(x--)
for(i=120;i>0;i--);
}
void Delay_us(void)
{
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();
_nop_();
}
void Display(void)
{
HC138(1,1,0);
P0=weima[p];
HC138(1,1,1);
P0=duanma[k[p++]];
if(p>3)
p=0;
Delay_MS(1);
P0=0XFF;
}
void Sys_Init(void)
{
HC138(1,0,1);
P0=0X00;
HC138(1,0,0);
P0=0XFF;
EA=1;
ET0=1;
TR0=1;
TMOD|=0X01;
TH0=(65536-1500)/256;
TL0=(65536-1500)%256;
}
void Timer0_ISR() interrupt 1
{
Display();
TH0=(65536-1500)/256;
TL0=(65536-1500)%256;
}
void Timer2_Init(void)
{
T2CON=0X0D;
TH2=TL2=0;
}
void Send(void)
{
uchar i;
for(i=0;i<10;i++)
{
Trig=~Trig;
Delay_us();
}
}
uint Receive(void)
{
Timer2_Init();
Send();
while((!TF2)&&(!EXF2));
if(TF2==1)
{
TF2=0;
return 9999;
}
else
{
EXF2=0;
return (RCAP2H*256+RCAP2L)*0.017;
}
}
void To_Display(void)
{
Distance=Receive();
k[0]=Distance/1000;
k[1]=(Distance/100)%10;
k[2]=(Distance/10)%10;
k[3]=(Distance)%10;
}
void main(void)
{
Sys_Init();
while(1)
{
To_Display();
}
}
希望对你有所帮助,需要图的话,找我就行!
|
|