乐山师范学院毕业论文(设计)
void fun() { if(P3_2==0) { while(!P3_2); k++;
if(k==4) k=0;
}
} Ppm.c:
#include\#include\sbit CLK=P1^5; sbit DO=P1^6;
sbit DI=P1^6; sbit CS=P1^7;
//=========================AD转换
uchar ADC0832() { uchar i;
uchar DOUT=0; //只需255,故使用uchar 0~255
CS=0;
DI=1;//第一个上升沿前为高,确认开始 CLK=0;
CLK=1;
_nop_(); //启动信号
31
乐山师范学院毕业论文(设计)
DI=1; //第二个上升沿前为1 CLK=0; CLK=1; _nop_(); //
DI=0; //第三个上升沿前为0 CLK=0; CLK=1; _nop_(); // CLK=1;
CLK=0; //开始采样
_nop_(); _nop_();
DO=1;//写全一,保证下面的读引脚正常
for(i=8;i>0;i--) {
CLK=1;
CLK=0; //下降沿采样
_nop_();
DOUT=DOUT<<1;
DOUT=DOUT|DO; //按位或,ADC_DO是转换后的输出,其实就是把ADC_DO传送到dig的低位
//因为ADC_DO是一位,这样左移位后获得的空位放置的就是ADC_DO
//第二个时钟下降沿获得就是最高位
} CS=1;
//转换结束
return(DOUT);
32
乐山师范学院毕业论文(设计)
} Temp.c: #include\
#define jump_ROM 0xCC #define start 0x44
#define read_EEROM 0xBE
sbit DQ = P1^2; //DS18B20数据口 unsigned char TMPH,TMPL; void delay(uint e) { while(e--);
}
//==========================================温度传感器模块uchar Reset(void) { uchar deceive_ready; DQ = 0; delay(29); DQ = 1; delay(3);
deceive_ready = DQ; delay(25);
return(deceive_ready);
}
uchar read_bit(void) {
33
乐山师范学院毕业论文(设计)
uchar i; DQ = 0; DQ = 1;
for(i=0; i<3; i++); return(DQ);
}
void write_bit(uchar bitval) { DQ=0;if(bitval==1) DQ=1; delay(5); DQ=1;
}
uchar read_byte(void) { uchar i,m,receive_data; m = 1;
receive_data = 0; for(i=0; i<8; i++) { if(read_bit()) { receive_data = receive_data + (m << i);
} delay(6);
}
34
乐山师范学院毕业论文(设计)
return(receive_data);
}
void write_byte(uchar val) { uchar i,temp; for(i=0; i<8; i++) { temp = val >> i; temp = temp & 0x01; write_bit(temp); delay(5);
}
}
//===============================取得温度temp1 void gett() { Reset();
write_byte(jump_ROM); write_byte(start); Reset();
write_byte(jump_ROM); write_byte(read_EEROM); TMPL = read_byte(); TMPH = read_byte();
temp1 = TMPL / 16 + TMPH * 16; }//================================================温度传感器模块结束
35
乐山师范学院毕业论文(设计)
36