51单片机配合超声波测距以及用1602液晶进行显示

自己写的一个小程序,给51入门的朋友们用一下,实测还行,没什么问题,但几米以上就不怎么准,主要是模块比较廉价,当练手用。注释也都比较清楚。

/*超声波测距程序,利用51单片机的外部中断,如果有时候发现不好使,建议直接使用杜邦线连接引脚*/
#include
#include 

typedef unsigned char uchar;
typedef unsigned int uint;
/*超声波模块为HC-SR04,触发信号给一个至少10us的高电平,之后模块会自动发送8个40kHz的方波信号,
一旦模块收到回响信号,Echo引脚便输出高电平,直到接收不到。这里有个问题是关于时间计算的问题,说明书上说的是
按Echo引脚的高电平持续时间计算,但是声波的路程,不应该是从声波发出的时候就已经开始了吗?这个程序使按照
第二种计算的,如果要改动 ,请改动定时器0的启动时间。*/
sbit Echo=P3^2;//超声波模块的回响信号输出,P3^2也是51单片机外部中断0的输入端,利用下降沿来触发中断
sbit Trig=P1^4;//触发信号脚


sbit lcdrs=P1^0;//数据命令选择端,为0时写指令,为1时写数据
sbit lcdrw=P1^1;//读、写命令选择端,为0时写数据,为1时读数据,读状态时置1,其他时间都是0;
sbit lcden=P2^5;//使能端
sbit dula=P2^6;//在这段程序里没有用处
sbit wela=P2^7;
sbit STA7=P0^7;//D0~D7数据口对应P0^0~P0^7,当读液晶的数据时,STA7对应P0^7,STA7为1时表示液晶忙,无法接收数据

float dis;//距离的缓存
uchar flag;//中断标志位
char code table[]="distance:";//在规定位置显示字符
char code table1[]="cm";

void delayms(uchar x)
{
	uint i,j;
	for(i=0;i


你可能感兴趣的:(51)