1602和HC-SR04超声波模块测距C语言程序
#define uchar unsigned char
#define uint unsigned int
/**************************
Trig超声波传感器控制端,
Echo超声波传感器接收端。
***************************/
sbit Trig=P2^4;
sbit Echo=P3^2;
/**************************
lcd_rs为1602液晶数据命令选择,
lcd_en为1602液晶使能端,lcd_rw
为1602液晶读写控制端。
***************************/
sbit lcd_rs=P2^5;
sbit lcd_rw=P2^6;
sbit lcd_en=P2^7;
#include
#include
#include"ZNCCSB1.h"
void init(); //函数初始化
void LCD_init(); //LCD的初始化
void LCD_write_date(uchar date); //lcd的写数据函数
void LCD_write_com(uchar com); //lcd的写指令函数
void delay(uint); //延时函数
void dev_delay(); //读写延时函数
void distance_display(); //lcd的显示函数
uchar code num[] ={'0','1','2','3','4','5','6','7','8','9','m'};
uchar code warning[]={"Measurement error!"};
uchar T0_cout,display_flag;
uint T0_time;
void main()
{
delay(1500);
init();
while(1)
{
Trig=1;
delay(20);
Trig=0;
while(Echo==0);
TR0=1;
while(Echo==1);
//TR0=0;
while(display_flag==0);
while(display_flag==1)
{
display_flag=0;
LCD_init();
distance_display();
delay(1500);
}
}
}
void dev_delay()
{
_nop_();
_nop_();
_nop_();
_nop_();
}
void delay(uint time)
{
uchar x;
uint y;
for(y=time;y>0;y--)
for(x=220;x>0;x--);
}
void LCD_write_com(uchar com)
{
lcd_en=0;
lcd_rs=0;
lcd_rw=0;
P0=com;
dev_delay();
lcd_en=1;
delay(1);
lcd_en=0;
dev_delay();
}
void LCD_write_date(uchar date)
{
lcd_rs=1;
lcd_rw=0;
lcd_en=0;
P0=date;
dev_delay();
lcd_en=1;
delay(1);
lcd_en=0;
dev_delay();
}
void LCD_init()
{
LCD_write_com(0x38);
LCD_write_com(0x0c);
LCD_write_com(0x06);
LCD_write_com(0x01);
}
void init()
{
LCD_init();
TMOD=0x01;
TH0=0