uint time; Trig1=0;
TMOD=0x01; //设置T0为计时器工作方式1
EA=0; //关中断 Trig1=1; //发出声波 delay12us(); Trig1=0; succeed_flag=0;
EA=1; // TH0=0; TL0=0;
while(Echo1 == 0); // EX0=1;
TR0=1; // delay(14); // TR0=0; EX0=0;
if(succeed_flag == 1){ // time=timeH*256+timeL; distance1=time*speed; }
if(succeed_flag == 0){ // distance1=30;
}
}
void measure2() //{
开中断, 等待回波电平 计时开始 等待电平跳变 测距成功,计算距离 测距不成功,赋值 测距2,同上 30
uint time;
Trig2=0; TMOD=0x10; EA=0; Trig2=1; delay12us(); Trig2=0; succeed_flag=0; EA=1;
TH1=0; TL1=0; while(Echo2 == 0); EX1=1;
TR1=1; delay(14); TR1=0; EX1=0;
if(succeed_flag == 1){ time=timeH*256+timeL; distance2=time*speed; } if(succeed_flag == 0){ distance2=30; }
}
void timerstop1() interrupt 0 // {
外中断0,对应T0 31
EX0=0; timeH =TH0; timeL =TL0; succeed_flag=1; }
void timerstop2() interrupt 2 //外中断1,对应T1 { EX1=0;
timeH =TH1; timeL =TL1; succeed_flag=1; }
//************lcd显示部分*************
void write_com(uchar com){ }
void write_dat(uchar com){
lcdrs=0; //写入指令 P0=com;
delay(5); //短暂延时 lcden=1; delay(5); lcden=0;
lcdrs=1; //写入数据
32
P0=com; delay(5); lcden=1; delay(5); lcden=0;
}
void lcd_init(){ lcden=0;
write_com(0x38); // write_com(0x0c); // write_com(0x06); // write_com(0x01); //}
void displaynum(uchar temp){ write_com(0x80+0x40); // write_dat(temp/10+0x30); // write_dat(0x2e);
write_dat(temp+0x30);
}
void displaynum2(uchar temp){ write_com(0x80+0x44); write_dat(temp/10+0x30); write_dat(0x2e);
write_dat(temp+0x30);
设置16*2显示,5*7点阵,8位数据接口开显示,不现实光标 写一个字符后地址加一 显示清零,指针清零
显示位置第二行 数字变换为ASCII码 33
}
void displaynum3(uchar temp){ }
void displayword(uchar *temp){ }
//***************DS18B20**************
write_com(0x80); //显示位置第一行 while(*temp != 0){ write_dat(*temp); temp++; }
write_com(0x80+0x48); write_dat(temp/10+0x30); write_dat(temp+0x30);
void dswrite(uchar dat) {
uint i; uchar j; bit testb; for(j=1;j<=8;j++) {
testb=dat&0x01; dat=dat>>1; if(testb)
34