求超声波测距仪程序,使用74LS04芯片做发射端,接收使用CX20106芯片,测量距离大概在1米到5米即可,没有

2024-12-26 05:20:12
推荐回答(3个)
回答1:

#include // 头文件
#include
unsigned char codetable[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x8e};
// 数码管段选代码
unsigned char codetable1[4]={0xfb,0xfd,0xfe,0xf7};
// 数码管位选代码
unsigned long S; // 所测距离,单位为mm
unsigned int time=0;
sbit TX=P3^2; // 发射超声波接口
sbit RX=P3^3; // 接收超声波接口
void delay_ms(unsigned int x) // 延时函数
{
unsignedint i,j;
for(i=0;i for(j=0;j<114;j++);
}
void display(int x,int y) // 数码管显示函数
{
P0=table[y];
P2=table1[x];
}
void fs() // 超声波发射函数
{
TX=1;
_ nop_();
// 运行一个机器周期,一个机器周期为12个振荡周期,即12个晶振频率的倒数
_nop_(); // 此处,一个机器周期为1us
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
_nop_(); // 发送10us以上高电平
TX=0;
}
void Conut() // 距离计算
{

time=TH0*256+TL0; // 得出发射到接收的时间
TH0=0;
TL0=0;
S=((time)*1.7)/10; // 算出来是mm
}

void main() // 主函数
{
TMOD=0x01;
TH0=0;
TL0=0;
ET0=1; // 允许T0中断
EA=1; // 开启总中断
while(1)
{
fs();
while(!RX); // 当RX为零时等待
TR0=1; // 开启计数
while(RX); // 当RX为1计数并等待
TR0=0; // 关闭计数
Conut(); // 计算
if(S>3000)
{
while(1)
{
display(0,0);
delay_ms(4);
display(1,10);
delay_ms(4);
display(2,10);
delay_ms(4);
}
}
while(1)
{
display(0,S/1000);
display(1,S%1000/100);
display(2,S%100/10);
display(3,S%10);
}
}
}

回答2:

先把硬件调好,然后再考虑程序怎么写。软硬结合,才是王道。

回答3:

11111111111