第22章使用DS28B20温传感器测温#
第第 1111章使用章使用 DS18B20DS18B20 温度传感器测温温度传感器测温 11.111.1概述概述 现实生产生活中,小到测量体温的温度计,大到航天飞机的温控系统,处处都离不开 温度测量。工业生产中的三大指标 { uchar m。 RW0。 RS0。 P1。 form0。m。//延时 25us E1。 form0。m。//延时 25us E0。 } void wrdata1602uchar shuju { uchar m。 RW0。 RS1。 P1shuju。 8 / 17 form0。m。//延时 25us E1。 form0。m。//延时 25us E0。 } void init1602void { RW0。 E0。 wr16020 x38。 wr16020 x0c。 wr16020 x06。 wr16020 x01。 } void disp1602uchar x,uchar y,uchar ch { wr16020 x80x*0 x40y。 wrdata1602ch。 } /****************************************/ void init18b20void { uchar m。 DQ0。 form0。m。 //延时 732us DQ1。 form0。m。 //延时 532us } void wr18b20uchar 18b20 { bit sendbit。 uchar i,m。 fori1。i { sendbit18b200 x01。 18b2018b201。 ifsendbit0 { DQ0。 form0。m。//延时 12us DQ0。 form0。m。 //延时 66us DQ1。 form0。m。 9 / 17 //延时 12us } else { DQ0。 form0。m。//延时 9us DQ1。 form0。m。//延时 36us DQ1。 form0。m。//延时 9us } } } bit rdbit18b20void { uchar m。 bit onebit。 DQ0。 _nop_。 DQ1。 //单片机的 I/O口要输入,必须先写入1 form0。m。//延时 9us onebitDQ。 form0。m。//延时 36us returnonebit。 } uchar rdbyte18b20void { uchar i,j。 uint wenduzhi0。 fori1。i { jrdbit18b20。 wenduzhij1。 } returnwenduzhi。 } void stconv18b20void { uchar m,n。 init18b20。 form0。m。//延时 9us wr18b200 xCC。 form0。m。//延时 9us wr18b200 x44。 forn0。n 10 / 17 form0。m。 forn0。n form0。m。 //延时 760ms } uint rdwenduvoid { init18b20。 wr18b200 xCC。 wr18b200 xBE。 wdLrdbyte18b20。 wdHrdbyte18b20。 tempwdH。 temptemptemp*0.0625*100.5。 returntemp。 } void rd18b20romvoid { uchar j。 init18b20。 wr18b200 x33。 forj0。j { sn[j]rdbyte18b20。 _nop_。 } } /**************************************************/ main { uint t,k。 init1602。 rd18b20rom。 fork0。k { disp16021,2*k,b2hex[sn[k]0 xf04]。 disp16021,2*k1,b2hex[sn[k]0 x0f]。 } while1 { stconv18b20。 trdwendu。 disp16020,0,t/1000。 11 / 17 disp16020,1,t/10100。 disp16020,2,.。 disp16020,3,t100。 disp16020,5,39。 disp16020,6,C。 disp16020,14,b2hex[wdL0 xf04]。 disp16020,15,b2hex[wdL0 x0f]。 disp16020,12,b2hex[wdH0 xf04]。 disp16020,13,b2hex[wdH0 x0f]。 } } 11.4 DS18B2011.4 DS18B20温度传感器测温实例温度传感器测温实例 2 2 功能要求功能要求 单片机与四片DS18B20 连接,在1602 液晶屏第一行起始位置显示 “1”,紧接着显示第一片 DS18B20 所测温度值,在 1602 液晶屏第一行中间位置 起显示“2”紧接着显示第二片 DS18B20 所测温度值,在 1602 液晶屏第二行起始 位置显示“3”,紧接着显示第三片 DS18B20 所测温度值,在 1602 液晶屏第二行 中间位置起显示“4”紧接着显示第四片DS18B20所测温度值。 include include define uchar unsigned char define uint unsigned int 12 / 17 sbit RSP20。 sbit RWP21。 sbit EP22。 sbit DQP23。 uint temp。 uchar wdL,wdH。 uchar code sn[][8]{ {0 x28,0 x0D,0 x3F,0 x2C,0 x03,0 x00,0 x00,0 x39}, {0 x28,0 xE7,0 x50,0 x2C,0 x03,0 x00,0 x00,0 xA1}, {0 x28,0 xB2,0 x40,0 x2C,0 x03,0 x00,0 x00,0 x18}, {0 x28,0 xD1,0 x45,0 x2C,0 x03,0 x00,0 x00,0 x50} }。 uchar code b2hex[]“0123456789ABCDEF“。 //***************************************** void wr1602uchar { uchar m。 RW0。 RS0。 P1。 form0。m。//延时 25us E1。 form0。m。//延时 25us E0。 } void wrdata1602uchar shuju { uchar m。 RW0。 RS1。 P1shuju。