基于单片机的超声波测距仪的设计 - 图文

loading 分享 2026-9-1 下载文档

}

/****************转换成2进制***************/ void HEXtoBCD() {

float tp;

unsigned long int tmp; fuhao=0;

//温度符号位

if(temp<0x8000) tp=temp*0.0625; else {

BUMA(); tp=temp*0.0625; fuhao=1; }

tp*=10; tmp=tp;

num[12]=tmp/100; if(fuhao)

num[12]=num[12]|0x80; num[13]=tmp/10-(tmp/100)*10; tmp=distance; num[25]=tmp/1000; tmp%=1000; num[26]=tmp/100; tmp%=100; num[27]=tmp/10; tmp%=10; num[28]=tmp/1; }

/**************温度转换函数***************************/ void TESTTEMP() {

Init_18B20(); if(flag)

//初始化18B20

//最高位加上符号位

//数据转换后放到显示数组里面

//温度为负,则求补码得到原码

24

{ 匹配 }

/***********读取温度函数**************/ uint GET_WD(void) {

uint a = 0, b = 0, t = 0; }

/***************18B20复位函数***********************/ void Init_18B20() {

DQ = 1; Delay(10);

DQ = 0; Delay(80); DQ = 1; if(DQ) flag=0; else flag=1; Delay(20); }

//单片机将DQ拉低 //480us //拉高总线

//DQ复位

Init_18B20();

//初始化18B20

//跳过读序号列号的操作 //发送读温度命令

//读取一个字节(读出高8位和低8位)

B20_WDAT(0xCC); B20_WDAT(0xBE); a = B20_RDAT(); b = B20_RDAT(); t = b; t <<= 8; t = t | a;

//字节合并 //返回结果给调用

B20_WDAT(0x44);

// 发送温度转化命令

}

B20_WDAT(0xCC);

// 跳过读序号列号的操作,忽略ROM

return (t);

Delay(10); //稍做延时后 如果x=0则初始化成功,x=1则初始化失败

25

/*******************读数据******************************/ uchar B20_RDAT(void) {

uchar i = 0; uchar dat = 0;

for (i = 8; i > 0; i--) {

DQ = 0; dat >>= 1;

DQ = 1; if(DQ)

dat |= 0x80;

//拼装处理

// 拉高数据线,停止读数据

// 拉低数据线,开始读数据

//读取一个字节

Delay(15); }

return (dat); }

/*********************写数据****************************/ void B20_WDAT(uchar dat) {

uchar i = 0;

for (i = 8; i > 0; i--) {

}

/*******************数据转换函数**************************/ void BUMA() {

temp=~temp; temp+=1; }

//按位取反

DQ = 0;

//拉低数据线至少15us以作为起始信号

//取出低位的一位数据 //将数据线拉高以作为停止信号 //稍作延时

//移位,为写入下一位数据做准备

DQ = dat&0x01; Delay(5); DQ = 1;

dat>>=1;

//注意读取的为补码

}

26

/**************************LCD显示函数*******************/ void LCD_DISP() {

uchar a,b,d; Init_LCD();

Write_Comm(0x01); //清显示 Write_Comm(0x80); //写首地址 for(a=0;a<16;a++) {

d=dispBUF[a];

if((a>11)&&(a<14)) {

d=numcode[num[a]]; //待显示的结果 }

if(14==a) { }

//写入要显示的数据

//换行,换到第二行

d=0xdf;

//如果是结果位到num[]里面读取

Write_Data(d); }

Write_Comm(0xc0); for(b=16;b<33;b++) {

d=dispBUF[b]; if((b>24)&&(b<29)) {

d=numcode[num[b]]; }

Write_Data(d); } }

/*********检查LCD忙状态***********/ bit LCD_BUSY() {

//lcd_busy为1时,忙,等待。

lcd-busy为0时,闲,可写指令与数据

//写入要显示的数据(数据传输)

27


基于单片机的超声波测距仪的设计 - 图文.doc 将本文的Word文档下载到电脑
搜索更多关于: 基于单片机的超声波测距仪的设计 - 图文 的文档
相关推荐
相关阅读