当前位置:首页 > (完整版)基于单片机控制超声波测距仪毕业设计论文
{ unsigned int i; tem_in=0; i=103; while(i>0)i--; tem_in=1; i=4; while(i>0)i--;
}
uchar readbyte(void) { uchar i,k; i=8; k=0; while(i--) {
tem_in=1; delay_us(1); tem_in=0; k=k>>1; tem_in=1; NOP;
if(tem_in)k |= 0x80; delay_us(4);
}
直接读一字节程序 tem_in为1时,则该位也为1
}
return(k);
void tmpwrite(unsigned char dat) 函数功能:向B20写一字节 { unsigned int i; unsigned char j; bit testb; for(j=1;j<=8;j++) { testb=dat&0x01; dat=dat>>1; if(testb) { tem_in=0;i++;i++; tem_in=1; i=8;while(i>0)i--;
} else { tem_in=0; i=8;while(i>0)i--; tem_in=1;i++;i++; }
}
}
void tmpchange(void)
{
dsreset();
复位
}
delay(1); tmpwrite(0xcc); tmpwrite(0x44);
跳过序列号命令 转换命令
void tmp(void) 温度采集及转换 {
int m,n=0;
float temnum1=0;
dsreset();
delay(1); tmpwrite(0xcc); tmpwrite(0xbe); temp_l=readbyte(); temp_=flag1;
temp_==0xf8)tembuf[3]=10;
低位在前
temnum=temnum1; }
void dis(void) 温度显示 {
uchar i;
uchar j=0xfe;
for(i=0;i<4;i++) {
输送显示数据
P0=0xff;
P0=ledcode[tembuf[i]];
}
}
if(i==1)P0=ledcode[tembuf[i]]+0x80; 小数点显示 P2=j; delay(15); j=(j<<1)+0x01;
void distance(void) 计算测量得到的距离 {
double radical,dist; if(b!=0) {
radical=sqrt(1+(temnum+273)273); dist=165.7*t*radical;
dist=dist+0.005; 四舍五入并留两位小数
if(dist>0&&dist<10) { }
dispbuf[3]=11; dispbuf[2]=(uchar)dist;
dispbuf[1]=(uchar)(dist*10); dispbuf[0]=(uchar)(dist*100);
if(dist>=10&&dist<=0) 测量距离大于10米或小于0显示\
也有出错的意思
{
dispbuf[3]=10;
dispbuf[2]=10;
共分享92篇相关文档