超声波测距程序.docx

上传人:b****3 文档编号:11269739 上传时间:2023-05-30 格式:DOCX 页数:9 大小:15.56KB
下载 相关 举报
超声波测距程序.docx_第1页
第1页 / 共9页
超声波测距程序.docx_第2页
第2页 / 共9页
超声波测距程序.docx_第3页
第3页 / 共9页
超声波测距程序.docx_第4页
第4页 / 共9页
超声波测距程序.docx_第5页
第5页 / 共9页
超声波测距程序.docx_第6页
第6页 / 共9页
超声波测距程序.docx_第7页
第7页 / 共9页
超声波测距程序.docx_第8页
第8页 / 共9页
超声波测距程序.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

超声波测距程序.docx

《超声波测距程序.docx》由会员分享,可在线阅读,更多相关《超声波测距程序.docx(9页珍藏版)》请在冰点文库上搜索。

超声波测距程序.docx

超声波测距程序

//超声波测距程序

#include

#include

#defineuintunsignedint

#defineucharunsignedchar

sbitrs=P2^6;//1602的数据/指令选择控制线

sbitrw=P2^5;//1602的读写控制线

sbiten=P2^7;//1602的使能控制线

sbittrig=P2^0;//超声波测距模块Trig

sbitecho=P2^1;//超声波测距模块Echo

bitflag1;//触发信号标志位//

ucharcount;//中断累加变量

longintdistance;//测量所得距离

unsignedcharcodetable[]={"0123456789"};

ucharcodetable1[]="distance:

";//定义字符数组显示数字

voiddelay(uintn)

{

uintx,y;

for(x=n;x>0;x--)

for(y=110;y>0;y--);

}

 

voiddelayt(uintx)

{

ucharj;

while(x-->0)

{

for(j=0;j<125;j++)

{

;

}

}

}

 

voidlcd_wcom(ucharcom)

{

rs=0;//选择指令寄存器

rw=0;//选择写

P0=com;//把命令字送入P0

delay(5);//延时一小会儿,让1602准备接收数据

en=1;//使能线电平变化,命令送入1602的8位数据口,这点非常重要

en=0;

}

 

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

1602写数据函数

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

voidlcd_wdat(uchardat)

{

rs=1;//选择数据寄存器

rw=0;//选择写

P0=dat;//把要显示的数据送入P0

delay(5);//延时一小会儿,让1602准备接收数据,也就是检测忙信号,这点非常重要。

en=1;//使能线电平变化,数据送入1602的8位数据口

en=0;

}

 

voidlcd_init()

{

lcd_wcom(0x38);//8位数据,双列,5*7字形,用到功能设定指令

lcd_wcom(0x0c);//开启显示屏,关光标,光标不闪烁,用到显示开关控制指令

lcd_wcom(0x06);//显示地址递增,即写一个数据后,显示位置右移一位,用到了写入模式设置指令

lcd_wcom(0x01);//清屏,用到了清屏指令

}

 

voidlcd_xianshi()

{

uchari;

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初始化,用于计算响应信号时间

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

voidinit_t0()

{

TMOD=0x01;

TL0=0x66;

TH0=0xfc;//1ms

ET0=1;

EA=1;

}

 

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

超声波模块触发信号

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

voidtrigger()

{

trig=0;

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

_nop_();

trig=1;

}

 

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

超声波模块相应端口初始化函数

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

voidinit_measuring()

{

trig=1;

echo=1;

count=0;

}

 

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

超声波模块距离测试函数

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

voidmeasuring()

{

ucharl;

uinth,y;

TR0=1;

while(echo==1)

{

;

}

TR0=0;

l=TL0;

h=TH0;

y=(h<<8)+l;

y=y-0xfc66;//us部分

distance=y+1000*count;//计算总时间,单位是微秒

TL0=0x66;

TH0=0xfc;

delayt(30);

distance=3453*distance/20000;//原始为:

(0.34毫米/us)*时间/2//

}

 

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

超声波模块测量结果显示函数

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

voiddisplay(uintx)

{

ucharqian,bai,shi,ge;

qian=x/1000;

bai=(x/100)%10;

shi=(x/10)%10;

ge=x%10;

lcd_wcom(0x80+0x49);//单位是厘米//

lcd_wdat(table[qian]);

lcd_wdat(table[bai]);

lcd_wdat(table[shi]);

lcd_wcom(0x80+0x4d);

lcd_wdat(table[ge]);

}

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

主函数

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

voidmain()

{lcd_init();//液晶初始化

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

init_measuring();//超声波相应端口初始化

 

while

(1)

{

lcd_xianshi();//液晶显示特定字符

trigger();//触发超声波启动

while(echo==0)//等待回声

{

;

}

measuring();//进行距离测量

display(distance);//对测量结果进行显示

init_measuring();//超声波相应端口初始化

delayt(600);//每次测量间隔60ms

}

}

 

//……………………………………………中断服务函数…………………………………………………//

voidT_0()interrupt1

{

TF0=0;

TL0=0x66;

TH0=0xfc;

count++;

if(count==18)

{

TR0=0;

TL0=0x66;

TH0=0xfc;

count=0;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2