-
#include
#include
#define uint unsigned int
#define uchar unsigned char
sbit rs=P2^6;
//1602
的数据
/
指令选择控制线
sbit rw=P2^5;
//1602
的读写控制线
sbit en=P2^7;
//1602
的使能控制线
sbit trig=P3^1;
//
超声波测距模块
Trig
sbit echo=P3^2;
//
超声波测距模块
Echo
bit flag1;
//
触发信号标志位
//
sbit r=P1^0;
uchar count;
//
中断累加变量
long int distance;
//
测量所得距离
unsigned char code table[
]={
定义字符数组显示数字
p>
/*---------------------------------------
---------
延时函数
------------
------------------------------------*/
void delay(uint n)
{
uint x,y;
for(x=n;x>0;x--)
for(y=110;y>0;y--);
}
<
/p>
/*--------------------------------------
----------
延时函数
------------
------------------------------------*/
void delayt(uint x)
{
uchar j;
while(x-- > 0)
{
for(j = 0;j < 125;j++)
{
;
}
}
}
/*-------------
-----------------------------------
1602
写命令函数
---------------------------
---------------------*/
void
lcd_wcom(uchar com)
{
rs=0;
//
选择指令寄存器
rw=0;
//
选择写
P0=com;
//
把命令字送入
P0
delay(5);
//<
/p>
延时一小会儿,让
1602
准备接收数据
en=1;
//<
/p>
使能线电平变化,命令送入
1602
的<
/p>
8
位数据口
,
这
点非常重要
en=0;
}
/*
------------------------------------------------
1602
写数据函数
p>
-----------------------------------------
-------*/
void lcd_wdat(uchar dat)
{
rs=1;
//
选择数据寄存器
rw=0;
//
选择写
P0=dat;
//
把要显示的数据送入
P0
delay(5);
p>
//
延时一小会儿,让
1602
准备接收数据
,
也就是检测忙信号,这点非常
p>
重要。
en=1;
p>
//
使能线电平变化,数据送入
1602<
/p>
的
8
位数据口
en=0;
}
/*-------------
-----------------------------------
1602
初始化函数
---------------
---------------------------------*/
void lcd_init()
{
lcd_wcom(0x38);
//8
位
数据,双列,
5*7
字形
,用到功能设定指令
lcd_wcom(0x0c);
p>
//
开启显示屏,关光标,光标不闪烁,用到显示开关控制指令
p>
lcd_wcom(0x06);
p>
//
显示地址递增,即写一个数据后,显示位置右移一位,用到了<
/p>
写入模式设置指令
lcd_wcom(0x01);
//
清屏,用到了清屏指令
}
/*
------------------------------------------------
1602
显示固定字符函数
---------------
---------------------------------*/
void lcd_xianshi()
{
lcd_wcom(0x80+0x40);
lcd_wdat('D');
lcd_wdat('i');
lcd_wdat('s');
lcd_wdat('t');
lcd_wdat('a');
lcd_wdat('n');
lcd_wdat('c');
lcd_wdat('e');
lcd_wdat(':');
lcd_wcom(0x80+0x4c);
lcd_wdat('.');
lcd_wcom(0x80+0
x4e);//
单位是厘米
//
lcd_wdat('c');
lcd_wdat('m');
}
<
/p>
/*--------------------------------------
----------
???
定时器
0
初始化,用于计算响应信号时间
-
-----------------------------------------------*/
void init_t0()
{
TMOD=0x01;
TL0=0x66;
TH0=0xfc;
//1ms
ET0=1;
EA=1;
}
/*
------------------------------------------------
???
超声波模块触发信号
---------------------------------------------
---*/
void trigger()
{
trig=0;
_nop_();