DS=0; _nop_(); DS=1; delay1(8); }
command=_cror_(command,1); } }
//-------------------------------------------------
//DS18B20读温度程序 uint readtemperature() {
uint temperature; EA=0;
reset(); //初始化 EA=1;
delay1(1); //转换需要一点时间,延时大一点,应该大于500us吧 EA=0;
write_byte(0xcc); //写SKIP ROM(跳过检查ROM序列,因为我们一般只有一个DS18B20!)
- 18 -
EA=1;
delay1(1); //转换需要一点时间,延时大一点,应该大于500us吧 EA=0;
write_byte(0x44); //写启动温度转换 EA=1;
delay1(12); //转换需要一点时间,延时大一点,应该大于500us吧 EA=0;
reset(); //初始化
write_byte(0xcc); //写SKIP ROM(跳过检查ROM序列,因为我们一般只有一个DS18B20!) EA=1;
delay1(1); //转换需要一点时间,延时大一点,应该大于500us吧 EA=0;
write_byte(0xbe); //读温度寄存器RAM(头两个值分别为温度的低位和高位) EA=1;
delay1(1); //转换需要一点时间,延时大一点,应该大于500us吧 EA=0;
tempL=read_byte(); //读出温度的低位LSB EA=1;
delay1(1); //转换需要一点时间,延时大一点,应该大于500us吧 EA=0;
- 19 -
tempH=read_byte(); //读出温度的高位MSB EA=1;
//温度转换,把高低位做相应的运算转化为实际温度
temperature=tempL+tempH*256;//将温度整理成16位变量 =((tempH*256)+tempL)*0.0625*10+0.5;//tempH*256的意思是tempH向左移8位
// delay_us(200);//两次间隔转换的间隔要延时一下 temperature=temperature*(0.625); return(temperature); }
/******************************************* 函数名称: wendu_read
功 能: 完成温度的读取与显示 参 数: 无 返回值 : 无
/********************************************/ void wendu_read(void) { uint t;
t=readtemperature(); wendu=(t/10)00; xiaoshu=t;
- 20 -
6.调试及仿真
我利用电脑中的 Proteus软件将设计好的电路图进行仿真,如下图所示:
其中温度上限设为38℃,下限设为5℃,并且可以由KEY1,KEY2按钮自由设置,非常方便。
- 21 -
6.电路的焊接及调试
我和曹群峰同学在电路调试和仿真成功的基础上,列出了这次电路焊接所需要的所有元件以及工具,出去进行购买,经过近两天的辛苦的搜罗寻找,我们终于集齐所有元件,清单如下
元件名称 单片机芯片 温度传感器 晶振 电源 三极管 电容 10uF 排阻 LED数码管 10K 03641B(共阳) 1K 电阻 6.8K 7.5K 万能板 IC插座 导线
型号 89C51 DS18B20 12MHz 5V 8550(PNP) 30pF 数量 1 1 1 1 4 2 1 2(并联) 1 4 1 1 1 若干 若干 - 22 -