基于51单片机的超声波测距设计

单片机课程设计自己做的,main.c是自己写的,LCD模块是用的商家的,买LCD显示屏送的。因为板子焊的太好被老师说买的,只给了及格分。下面是main.c文件的内容,注释一般都有说明,在此用作学习交流,有刚接触的同学如果有问题请私聊;如果对各位有帮助可以点赞收藏加关注。
下面都是程序了,注释算比较详细,有看不明白的可以直接提问。

#include<reg51.h>
#include"lcd.h"

#define uchar unsigned char
#define uint unsigned int 

uchar code ASCII[13] = {'0','1','2','3','4','5','6','7','8','9','.','-','M'};
uchar disbuff[4]={ 0,0,0,0,};
uint time=0;
uint t;
uint S=0;
bit flag =0;

sbit  TX = P2^0;
sbit  K1 = P2^2;
sbit  K2 = P2^3;

void Conut(void);
void  StartModule();
void delayms(uint ms);


void main()
{
	LCD1602_Init();
	while(1)
	{
		TMOD=0x09;		   //设T0为方式1,GATE=1;
		TH0=0X00;							  
		TL0=0X00;
		TR0=1;          
		IT0=1;//外部中断0下降沿触发中断
		EX0=1;
		ET0=1;             //允许T0中断
		EA=1;			   //开启总中断	
		while(1)
		{
			if(!K1)
			{
				delayms(10);
				if(!K1)
				{
					StartModule();
					TH0=0X00;							  
					TL0=0X00;
				}
				while(!K1);
			}
			if(!K2)
			{
				delayms(10);
				if(!K2)
				{
					S=0;
					TH0=0X00;							  
					TL0=0X00;
				}
				while(!K2);
			}
			LCD1602_WriteCom(0x80);		//当RX为零时等待
//			TR0=RX;			    //开启计数
			Conut();			//计算
			delayms(10);		//10MS
		}	
	}
}

void Conut(void)
{
	time=TH0*256+TL0;
	S=(time*1.7)/100;     //算出来是CM
	if(flag==1) //超出测量范围显示“-”(S>=700)||
	{	 
		flag=0;
 		LCD1602_WriteData(ASCII[11]);
		LCD1602_WriteData(ASCII[10]);//显示小数点
		LCD1602_WriteData(ASCII[11]);
		LCD1602_WriteData(ASCII[11]);
		LCD1602_WriteData(ASCII[12]);//显示单位
	}
	else
	{
		disbuff[0]=(S/100)%10;
		disbuff[1]=(S/10)%10;
		disbuff[2]=S%10;
		LCD1602_WriteData(ASCII[disbuff[0]]);
		LCD1602_WriteData(ASCII[10]);	//显示点
		LCD1602_WriteData(ASCII[disbuff[1]]);
		LCD1602_WriteData(ASCII[disbuff[2]]);
		LCD1602_WriteData(ASCII[12]);	//显示M
 	}
}

void  StartModule() 		         //启动模块
{
	TX=1;		                     //启动一次模块
	delayms(1);
	TX=0;
}

void delayms(uint ms)
{
	unsigned char i=100;
	for(;ms;ms--)
	{
		while(--i);
	}
}

void zd0() interrupt 1 		 //T0中断用来计数器溢出,超过测距范围
{
	flag=1;							 //中断溢出标志
	
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值