51单片机超声波测距代码

超声波测距代码:

cpp 复制代码
#include<reg52.h>

sbit echo=P2^0 ; //回声接收端口
sbit trig=P2^1  ;//超声波触发端口

sbit wei1=P2^4;
sbit wei2=P2^5;
sbit wei3=P2^6;
sbit wei4=P2^7;

sbit in=P2^2;

#define dula P0
#define uchar unsigned char
#define uint unsigned int

long int distance=0;
uchar count;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
unsigned char code table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0x71};

void delay(uint xms)
{
	uint i,j;
	for(i=xms;i>0;i--)
		for(j=112;j>0;j--);
}

void display(long int num)
{
	uchar qian,bai,shi,ge;
	if((num>5000)||(num==0))
	{
		 qian=15;
		 bai=15;
		 shi=10;
		 ge=15;
	}
	else
	{
		   qian=num/1000;
		   bai=(num/100)%10;
		   shi=(num/10)%10;
		   ge=num%10;
		   if(bai>0)
		   {
		   	   in=0;
		   }
		   else if(bai==0)
		   {
		   	   in=1;
		   }
	}

	wei1=1;
	wei2=0;
	wei3=0;
	wei4=0;
	P0=table[qian];
	delay(2);

	wei1=0;
	wei2=1;
	wei3=0;
	wei4=0;
	P0=table[bai];
	delay(2);

	wei1=0;
	wei2=0;
	wei3=1;
	wei4=0;
	P0=table1[shi];
	delay(2);

	wei1=0;
	wei2=0;
	wei3=0;
	wei4=1;
	P0=table[ge];
	delay(2);
}

void Init_timer0(void)
{
	 TMOD=0x01;
	 TL0=0x66;
	 TH0=0xfc;
	 ET0=1;
	 EA=1;
}

void Init_parameter(void)
{
 	 echo=0;
 	 trig=0;
 	 count=0;
 	 distance=0;
}

void Trig_SuperSonic(void) //发出声波
{
	 trig=1;
	 delay(1);
	 trig=0;
}

void Measure_Distance(void)
{
	uchar l;
	uint h,y;
	TR0=1;
	while(echo)
	{
		  ;
	}
	TR0=0;
	l=TL0;
	h=TH0;
	y=(h<<8)+1;
	y=y-0xfc66;
	distance=y+1000*count;
	TL0=0x66;
	TH0=0xfc;
	delay(30);
	distance=0.17*distance;
}

void main(void)
{
	uchar a;
	Init_timer0();
	Init_parameter();
	while(1)
	{
		 Trig_SuperSonic();
		 while(echo==0)
		 {
		 		;
		 }
		 Measure_Distance();
		 for(a=100;a>0;a--)
		 {
		 	 display(distance);
		 }
		  Init_parameter();
	}
}

void timer0(void)interrupt 1
{
	TF0=0;
	TL0=0x66;
	TH0=0xfc;
	count++;
	if(count==18)
	{
		 TR0=0;
		 TL0=0x66;
		 TH0=0xfc;
		 count=0;
	}
}
相关推荐
控电PLC1 天前
19. S7-200系列PLC的内部资源
硬件工程
XINVRY-FPGA1 天前
XCVP1802-2MSILSVC4072 AMD Xilinx Versal Premium Adaptive SoC FPGA
人工智能·嵌入式硬件·fpga开发·数据挖掘·云计算·硬件工程·fpga
一名机电研究生3 天前
电路分析与设计自学笔记(一)——复杂电路的分析方法与规律
硬件工程
XINVRY-FPGA4 天前
XCVU9P-2FLGC2104I Xilinx AMD Virtex UltraScale+ FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
恒锐丰小吕4 天前
无锡黑锋 HF1308 2A高效率升压DC-DC电压调整器技术解析
嵌入式硬件·硬件工程
逼子格5 天前
硬件工程师成长之路——知识汇总(持续更新)
嵌入式硬件·proteus·硬件工程·ad·keil·电路仿真·硬件工程师面试
贝塔实验室6 天前
Altium Designer 6.0 初学教程-如何从原理图及PCB 中生成网表并且实现网表的加载
fpga开发·硬件架构·硬件工程·学习方法·射频工程·基带工程·pcb工艺
九鼎创展科技6 天前
九鼎创展发布X3588SCV4核心板,集成LPDDR5内存,提升RK3588S平台性能边界
android·人工智能·嵌入式硬件·硬件工程
恒锐丰小吕7 天前
晶准 RB302B 内置MOSFET锂电池保护芯片技术解析
嵌入式硬件·硬件工程
贝塔实验室8 天前
Altium Designer 6.0 初学教程-在Altium Designer 中对PCB 进行板层设置及内电层进行分割
嵌入式硬件·fpga开发·编辑器·硬件工程·信息与通信·信号处理·pcb工艺