附录(2).电路PCB图
30
附录(3).主要程序
温度检测:
#include
sbit DE_RE=P3^4;
sbit DQ=P2^3; //ds18b20与单片机连接口
uchar gao,di;
uchar bai,shi,ge; uchar tflag;
uchar recdata;
uint tvalue,tvalue1,tvalue2,TEMP; //温度值
/******************************************* 函数名称: delay_18B20 功 能: 为18b20温度转换器提供延时 参 数: 延时i微秒 返回值 : 无
********************************************/ void delay_18B20(unsigned int i) {
while(i--); }
/******************************************* 函数名称: ds1820rst() 功 能: 18b20温度转换器复位功能 参 数: 复位函数 返回值 : 无
********************************************/ void ds1820rst() {
unsigned char x=0;
DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低
delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); }
/*******************************************
31
函数名称: ds1820rd
功 能: 读出18b20温度转换器中数据 参 数: 无
返回值 : dat读出的数据
********************************************/ uchar ds1820rd() {
unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) {
DQ = 0; //给脉冲信号 dat>>=1;
DQ = 1; //给脉冲信号 if(DQ) dat|=0x80;
delay_18B20(10); }
return(dat); }
/******************************************* 函数名称: ds1820wr
功 能: 写入18b20温度转换器指令 参 数: wdata为写入的数据 返回值 : 无
********************************************/ void ds1820wr(uchar wdata)/**/ {
uchar i=0;
for (i=8; i>0; i--) {
DQ = 0;
DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } }
/******************************************* 函数名称: read_temp() 功 能: ds1820读取温度值并转换 参 数: 无
返回值 : tvalue为读出并经过转换的温度值
********************************************/ read_temp()
32
{
uchar a,b;
ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst();
ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8;
tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else {
tvalue=~tvalue+1; tflag=1; }
tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 一点代表0.625度 return(tvalue); }
uchar rxdata() //接受数据 {
uchar dataa;
while(!RI);
//等待数据接收完毕 dataa=SBUF; RI=0;
return(dataa); }
void txdata(unsigned char dataa) //发送数据子函数 {
DE_RE=1; SBUF=dataa; while(!TI);
//等待数据发送完毕 TI=0; DE_RE=0; }
main() {
SCON=0X50; //串口工作方式初始化
33
PCON=0X00;
TMOD=0X20; EA=1; TL1=0XFD;
TH1=0XFD; //波特率9600 TR1=1;
DE_RE=0; //接收数据模式 while(1) {
read_temp(); TEMP=tvalue; gao=TEMP/256; di=TEMP%6; if(RI) {
RI=0;
recdata=SBUF; if(recdata==0x66) {
delay(2); txdata(gao); //delay(1); }
if(recdata==0x77) {
delay(2); txdata(di); //delay(1); } }
} }
电阻检测:
#include
uchar table2[]={'0','1','2','3','4','5','6','7','8','9'}; uchar num,l,f,i,h,flag=1; long r; /*上为测电阻声明*/
34