基于51单片机的US100超声波模块1602显示程序Word文档下载推荐.docx
- 文档编号:6472884
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:12
- 大小:16.54KB
基于51单片机的US100超声波模块1602显示程序Word文档下载推荐.docx
《基于51单片机的US100超声波模块1602显示程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于51单片机的US100超声波模块1602显示程序Word文档下载推荐.docx(12页珍藏版)》请在冰点文库上搜索。
//寄存器选择位
sbitRW=P2^1;
//读取选择位
sbitE=P2^2;
//使能信号位
sbitBF=P0^7;
//忙碌信号位
unsignedcharcodeTab[]={"
0123456789"
};
unsignedcharcodestring[]={"
range:
2cm--4.5m"
charpart,ge,shi,bai;
charidataGLengthLoh[2];
//接收缓冲区
bitsuccess_flag;
//定义测试成功标志位
/*********************************************************/
/*********函数名称:
delay1ms(void)******************/
/*********函数功能:
延时1毫秒******************/
/*********函数参数:
void******************/
voiddelay1ms(void)//误差-0.651041666667us
{
chara,b;
for(b=102;
b>
0;
b--)
for(a=3;
a>
a--);
}
delaynms(charn)******************/
延时n个1毫秒******************/
n******************/
voiddelaynms(charn)
chara;
for(a=0;
a>
n;
a--)
delay1ms();
BusyTest(void)******************/
判断液晶模块忙碌状态******************/
返回值:
result******************/
unsignedcharBusyTest()
bitresult;
RS=0;
RW=1;
//RS为低电平,RW为高电平时,可以读状态
E=1;
//使能为高电平时可读取信息
nops;
//延时40us,给硬件反应时间
result=BF;
//将忙碌标志位电平赋给result
E=0;
//使能1到0:
执行指令
returnresult;
WriteInstruction(chardictate)*******/
将模式设置指令或显示地址写入液晶模块**/
dictate******************/
voidWriteInstruction(chardictate)
while(BusyTest()==1);
//如果忙碌标志位忙碌则等待
RW=0;
//RS/RW位同时为低电平时可写入指令
//使能0到1:
写入指令
P0=dictate;
//将数据送入P0口,写入数据或地址
//使能0到1:
//使能1到0:
WriteAddress(charx)*******/
指定字符显示的实际地址***********/
x******************/
voidWriteAddress(charx)
WriteInstruction(x|0x80);
//80H+地址码
WriteData(chary)*******/
将数据(字符的标准ASCII码)写入液晶模块*/
y******************/
voidWriteData(chary)
//如果忙碌标志位忙碌则等待
RS=1;
//RS为高电平,RW为低电平时,可以写入数据
P0=y;
LCDInit(void)*******/
液晶模块初始化****************/
voidLCDInit(void)
delaynms(15);
//延时15毫秒,首次写入液晶指令应给反应时间
WriteInstruction(0x38);
//显示模式设置:
16×
2显示,5×
7点阵,8位数据接口
delaynms(5);
//延时5秒,反应时间
//延时5秒,反应时间
//连续三次,确保初始化成功
WriteInstruction(0x0c);
显示开,无光标,光标不闪烁
WriteInstruction(0x06);
显示光标右移,屏幕不移动
WriteInstruction(0x01);
//清屏
UART_Send(chardat)*******/
串口发送函数****************/
dat******************/
voidUART_Send(chardat)
TI=0;
//清发送标志
SBUF=dat;
//如果TI为0等待
while(!
TI);
//等待发送数据
UART_Init()***************/
串口初始化函数****************/
无******************/
voidUART_Init()
{
TH1=0xFD;
TL1=0xFD;
TMOD=0x21;
//设置定时器1为模式2;
定时器0为模式1
TH0=(65536-2500)/256;
//约2.50MS定时器初值
TL0=(65536-2500)%256;
ET0=1;
TR0=1;
//启动定时器
TR1=1;
//启动定时器SM0SM1
SM0=0;
//串口通信模式设置00=0
SM1=1;
//01=1
//10=2
//11=3
REN=1;
//串口允许接收数据
ES=1;
//开串中断
EA=1;
UART_ISR(void)***************/
串口中断函数****************/
voidUART_ISR(void)interrupt4
chartemp,k;
ES=0;
//关中断
if(RI)
{
RI=0;
//清接收标志
temp=SBUF;
GLengthLoh[k]=temp;
k++;
if(k==2)//k=数据长度
k=0;
}
//开中断
timer0()***************/
定时器函数****************/
timer0()interrupt1//定时器0中断是1号
//约2.50MS定时器初值TH0=0xef;
TL0=0x94;
//写入定时器0初始值
conversion(int8temp_data)*******/
数据转换****************/
temp_data******************/
voidconversion(inttemp_data)
charpart_data,ge_data,shi_data,bai_data;
bai_data=temp_data/1000;
shi_data=(temp_data%1000)/100;
ge_data=(temp_data%100)/10;
part_data=temp_data%10;
EA=0;
bai=bai_data;
shi=shi_data;
ge=ge_data;
part=part_data;
main(void)*******/
主函数****************/
voidmain(void)
intk;
longPreLength;
LCDInit();
//调用液晶初始化函数
delaynms(10);
UART_Init();
PreLength=0;
while
(1)
WriteAddress(0x01);
while(string[k]!
='
\0'
)
{
WriteData(string[k]);
k++;
}
UART_Send(0X55);
PreLength=GLengthLoh[0]*256+GLengthLoh[1]-5;
conversion(PreLength);
WriteAddress(0x41);
//从第2行第6列开始显示
WriteData('
J'
);
//将特定的字符常量写入LCD
U'
L'
I'
:
'
if(PreLength<
=4500&
&
PreLength>
=20)
WriteData(Tab[bai]);
//将百位数字的字符常量写入LCD
WriteData(Tab[shi]);
//将十位数字的字符常量写入LCD
WriteData(Tab[ge]);
//将个位数字的字符常量写入LCD
WriteData('
.'
WriteData(Tab[part]);
else
-'
'
c'
m'
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 US100 超声波 模块 1602 显示 程序