您的位置:首页 > 职场人生

超声波模块液晶显示程序

2011-09-03 23:15 399 查看

超声波模块液晶显示程序

硬件使用最常用的超声波探头4引脚,2个电源,一个输入信号,一个输出信号,输入信号为触发信号,输出高电平的宽度代表测量距离,本例主要描述如何测量该高电平的宽度。

http://shop34791330.taobao.com/ dofly店铺近期推出该超声波探头,敬请关注。

main程序 #include <reg52.h>

#include <stdio.h>

#include <math.h>

#include "1602.h"

#include "delay.h"

sbit TRIG = P1^0 ;

sbit ECHO = P1^1 ;

unsigned char DisTempData[16];

/*------------------------------------------------

定时器0初始化

------------------------------------------------*/

void TIM0init(void)

{

TMOD|= 0x01;//定时器0工作方式1

TH0=0x00;

TL0=0x00;

}

/*------------------------------------------------

主函数

------------------------------------------------*/

main()

{

float S; //距离变量

TIM0init(); //初始化定时器0

LCD_Init(); //初始化LCD

LCD_Write_String(0,1,"LY-UR04 demo");

while(1)

{

TRIG=1; //触发信号是高电平脉冲,宽度大于10us

DelayUs2x(10);

TRIG=0;

while(!ECHO); //等待高电平

TR0=1;

while(ECHO); //等待低电平

TR0=0;

S=TH0*256+TL0;//取出定时器值高8位和低8位合并

S=S/58; //为什么除以58等于厘米, Y米=(X秒*344)/2

// X秒=( 2*Y米)/344 -> X秒=0.0058*Y米 -> 厘米=微秒/58

TH0=0;

TL0=0; //清除定时器0寄存器中的值

sprintf(DisTempData,"S=%6.2f CM ",S);//打印输出结果

LCD_Write_String(0,0,DisTempData); //在液晶屏上显示

DelayMs(200); //延时决定采样速度

}

}

液晶1602部分程序/*-----------------------------------------------

名称:LCD1602

引脚定义如下:1-VSS 2-VDD 3-V0 4-RS 5-R/W 6-E 7-14 DB0-DB7 15-BLA 16-BLK

------------------------------------------------*/

#include "1602.h"

#include "delay.h"

#define CHECK_BUSY//是否使用判断忙语句条件,后面使用条件编译

sbit RS = P2^4; //定义端口

sbit RW = P2^5;

sbit EN = P2^6;

#define RS_CLR RS=0

#define RS_SET RS=1

#define RW_CLR RW=0

#define RW_SET RW=1

#define EN_CLR EN=0

#define EN_SET EN=1

#define DataPort P0

/*------------------------------------------------

判忙函数

------------------------------------------------*/

bit LCD_Check_Busy(void)

{

#ifdef CHECK_BUSY

DataPort= 0xFF;

RS_CLR;

RW_SET;

EN_CLR;

_nop_();

EN_SET;

return (bit)(DataPort & 0x80);

#else

return 0;

#endif

}

/*------------------------------------------------

写入命令函数

------------------------------------------------*/

void LCD_Write_Com(unsigned char com)

{

while(LCD_Check_Busy()); //忙则等待

RS_CLR;

RW_CLR;

EN_SET;

DataPort= com;

_nop_();

EN_CLR;

}

/*------------------------------------------------

写入数据函数

------------------------------------------------*/

void LCD_Write_Data(unsigned char Data)

{

while(LCD_Check_Busy()); //忙则等待

RS_SET;

RW_CLR;

EN_SET;

DataPort= Data;

_nop_();

EN_CLR;

}

/*------------------------------------------------

清屏函数

------------------------------------------------*/

/*void LCD_Clear(void)

{

LCD_Write_Com(0x01);

DelayMs(5);

}*/

/*------------------------------------------------

写入字符串函数

------------------------------------------------*/

void LCD_Write_String(unsigned char x,unsigned char y,unsigned char *s)

{

while (*s)

{

LCD_Write_Char(x,y,*s);

s ++; x++;

}

}

/*------------------------------------------------

写入字符函数

------------------------------------------------*/

void LCD_Write_Char(unsigned char x,unsigned char y,unsigned char Data)

{

if (y == 0)

{

LCD_Write_Com(0x80 + x);

}

else

{

LCD_Write_Com(0xC0 + x);

}

LCD_Write_Data( Data);

}

/*------------------------------------------------

初始化函数

------------------------------------------------*/

void LCD_Init(void)

{

LCD_Write_Com(0x38); /*显示模式设置*/

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

DelayMs(5);

LCD_Write_Com(0x38);

LCD_Write_Com(0x08); /*显示关闭*/

LCD_Write_Com(0x01); /*显示清屏*/

LCD_Write_Com(0x06); /*显示光标移动设置*/

DelayMs(5);

LCD_Write_Com(0x0C); /*显示开及光标设置*/

}

延时程序#include "delay.h"

/*------------------------------------------------

uS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编,大致延时

长度如下 T=tx2+5 uS

------------------------------------------------*/

void DelayUs2x(unsigned char t)

{

while(--t);

}

/*------------------------------------------------

mS延时函数,含有输入参数 unsigned char t,无返回值

unsigned char 是定义无符号字符变量,其值的范围是

0~255 这里使用晶振12M,精确延时请使用汇编

------------------------------------------------*/

void DelayMs(unsigned char t)

{

while(t--)

{

//大致延时1mS

DelayUs2x(245);

DelayUs2x(245);

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐