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