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;
	}
}
相关推荐
XINVRY-FPGA11 小时前
XC7Z030-2SBG485I Xilinx Zynq-7000 系列 SoC FPGA
嵌入式硬件·fpga开发·硬件工程·fpga
czhaii12 小时前
并口LCD1602用DMA刷屏
单片机·嵌入式硬件·硬件工程
硅农深芯13 小时前
MCU的启动流程你了解么?
单片机·嵌入式硬件·硬件工程
飓风_数字IC验证14 小时前
【业务领域】最新LPDDR新闻汇总
硬件工程
Trunktren14 小时前
PCB软硬结合板全流程设计
笔记·硬件工程·pcb设计·pcb工艺·allegro
wangduqiang7471 天前
用手机查看串口数据, SerialTest手机端
硬件工程
Saniffer_SH2 天前
【每日一题】PCIe答疑 - 接大量 GPU 时主板不认设备或无法启动和MMIO的可能关系?
运维·服务器·网络·人工智能·驱动开发·fpga开发·硬件工程
Saniffer_SH2 天前
【每日一题】讲讲PCIe链路训练和枚举的前后关系
运维·服务器·网络·数据库·驱动开发·fpga开发·硬件工程
2501_918126912 天前
nes游戏语言是6502,有没有一种方法可以实现,开发另一种更高效的汇编语言,替代6052,并本土化,弯道超过nes的底层语言?
汇编·硬件工程·个人开发
shabby爱学习2 天前
pads入门
硬件工程