📄 temp.lst
字号:
220 ////////////////////////////////////////////////////////////
221 void tmstart (void) //发送ds1820 开始转换//
222 {
223 1 tmreset(); //复位//
224 1 dmsec(1); //延时//
225 1 tmwbyte(0xcc); //跳过序列号命令 //
226 1 tmwbyte(0x44); //发转换命令 44H, //
227 1 }
228 /////////////////////////////////////////////////////////
229
230 void WQJ(void) //汉字 无器件
231 {
232 1 lcd_clr();
233 1 hz_disp(26,3, WU);
234 1 hz_disp(58,3, QI );
235 1 hz_disp(90,3, JIAN);
236 1 }
237 void tmrtemp (void) //读取温度
238 {
239 1 unsigned char a,b;
240 1 tmreset (); //复位 //
241 1 dmsec (1); //延时 //
C51 COMPILER V7.06 TEMP 03/17/2006 15:30:26 PAGE 5
242 1 tmwbyte (0xcc); //跳过序列号命令 //
243 1 tmwbyte (0xbe); //发送读取命令 //
244 1 a = tmrbyte (); //读取低位温度 //
245 1 b = tmrbyte (); //读取高位温度 //
246 1 fg=b; //取温度为负标志
247 1 if(fg>0x7f) //最高位为1时温度是负
248 1 {a=~a+1; //去除补码
249 2 lcd_putchar8x8(22,6, -3+'0');//显示负号
250 2 }
251 1 sdata = a/16+b*16;
252 1 xiaoshu1 = (a&0x0f)*10/16;
253 1 xiaoshu2 = (a&0x0f)*100/16%10;
254 1 xiaoshu=xiaoshu1*10+xiaoshu2;
255 1 }
256 //////////////////////////////////////////////////////
257 void DS18B20PRO(void)
258 {
259 1 tmstart();
260 1 dmsec(100); //如果是不断地读取的话可以不延时 //
261 1 tmrtemp(); //读取温度,执行完毕温度将存于TMP中 //
262 1 }
263 ///////////////////////////////////////////////////////
264 void DISPLAY(void) //LCD显示函数.
265 {
266 1
267 1 bc=sdata/100;
268 1 lcd_putchar8x8(33,6, bc+'0');
269 1
270 1 bc=sdata%100/10;
271 1 lcd_putchar8x8(41,6, bc+'0');
272 1
273 1 bc=sdata%10;
274 1 lcd_putchar8x8(49,6, bc+'0');
275 1
276 1 bc=xiaoshu1;
277 1 lcd_putchar8x8(61,6, bc+'0');
278 1
279 1 bc=xiaoshu2%10;
280 1 lcd_putchar8x8(69,6, bc+'0');
281 1
282 1 if((sdata>200)|(sdata<-55))
283 1 {
284 2 WQJ();
285 2 dmsec(100);
286 2 dmsec(100);
287 2 }
288 1 }
289 //****************************************************
290 // 24c16读写
291 //****************************************************
292 #define uchar unsigned char
293 #define uint unsigned int
294 uchar mintem; //最低温度
295 uchar shuj;
296 sbit scl=P3^7; //24c02 SCL
297 sbit sda=P3^6; //24c02 SDA
298 sbit DOG=P1^7; //狗
299 uchar x24c02_read(uchar address); //从24c02的地址address中读取一个字节数据
300 void x24c02_write(uchar address,uchar info); //向24c02的address地址中写入一字节数据info
301 void x24c02_init(); //24c02初始化子程序
302 void delay1(uchar x);
303 void flash();
C51 COMPILER V7.06 TEMP 03/17/2006 15:30:26 PAGE 6
304 void x24c01_init();
305 void start();
306 void stop();
307 void writex(uchar j);
308 uchar readx();
309 void clock();
310 void delay1(uchar x)
311 {
312 1 uint i;
313 1 for(i=0;i<x;i++);
314 1 DOG=~DOG;
315 1 }
316 void flash()
317 {
318 1 //uchar u;
319 1 DOG=~DOG;
320 1 }
321 void x24c02_init()
322 {
323 1 scl=1; flash(); sda=1; flash();
324 1 }
325 void start()
326 {
327 1 sda=1; flash(); scl=1; flash(); sda=0; flash(); scl=0; flash();
328 1 }
329 void stop()
330 {
331 1 sda=0; flash(); scl=1; flash(); sda=1; flash();
332 1 }
333 void writex(uchar j)
334 {
335 1 uchar i,temp;
336 1 temp=j;
337 1 for (i=0;i<8;i++){
338 2 temp=temp<<1; scl=0; flash(); sda=CY; flash(); scl=1; flash();
339 2 }
340 1 scl=0; flash(); sda=1; flash();
341 1 }
342 uchar readx()
343 {
344 1 uchar i,j,k=0;
345 1 scl=0; flash(); sda=1;
346 1 for (i=0;i<8;i++){
347 2 flash(); scl=1; flash();
348 2 if (sda==1) j=1;
349 2 else j=0;
350 2 k=(k<<1)|j; scl=0;
351 2 }
352 1 flash(); return(k);
353 1 }
354 void clock()
355 {
356 1 uchar i=0;
357 1 scl=1; flash();
358 1 while ((sda==1)&&(i<255))i++;
359 1 scl=0; flash();
360 1 }
361 uchar x24c02_read(uchar address)
362 {
363 1 //uchar shuj;
364 1 start(); writex(0xa0);
365 1 clock(); writex(address);
C51 COMPILER V7.06 TEMP 03/17/2006 15:30:26 PAGE 7
366 1 clock(); start();
367 1 writex(0xa1); clock();
368 1 shuj=readx(); stop();
369 1 delay1(10);
370 1 return(shuj);
371 1 }
372 void x24c02_write(uchar address,uchar info)
373 {
374 1 EA=0;
375 1 start(); writex(0xa0);
376 1 clock(); writex(address);
377 1 clock(); writex(info);
378 1 clock(); stop();
379 1 EA=1;
380 1 delay1(50);
381 1 }
382 void key()
383 {P1=0xff;
384 1 /*if(P1==0xfe)
385 1 {lcd_clr();
386 1 x24c02_write(0xa0,6);
387 1 hz_disp(0,0, WEN);
388 1 }*/
389 1 if(P1==0xfd)
390 1 {x24c02_read(0xa0);//读24C08
391 2 lcd_clr();
392 2 bc=shuj/10;
393 2 lcd_putchar8x8(44,0, bc+'0');
394 2 bc=shuj%10;
395 2 lcd_putchar8x8(52,0, bc+'0');
396 2 }
397 1 }
398 void min() //测到最低温度函数
399 {
400 1
401 1 if(mintem>sdata)
402 1 mintem=sdata;
403 1 x24c02_write(0xa0,mintem);
404 1 }
405 void main(void)
406 {
407 1
408 1 lcd_init();
409 1 lcd_clr();
410 1 x24c02_read(0xa0);
411 1 mintem=shuj;
412 1 hz_disp(21,2, DANG);
413 1 hz_disp(37,2, QIAN );
414 1 hz_disp(53,2, WEN);
415 1 hz_disp(69,2, DU);
416 1 hz_disp(85,2, WEI);
417 1 //lcd_putchar8x8(96,3,10+'0');
418 1 lcd_putchar8x8(55,6, -2+'0');//小数点
419 1 hz_disp(75,5,SHESHI);
420 1
421 1 while(1)
422 1 {
423 2 DS18B20PRO();
424 2 DISPLAY();
425 2 key();
426 2 min();
427 2 }
C51 COMPILER V7.06 TEMP 03/17/2006 15:30:26 PAGE 8
428 1 }
429
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 890 ----
CONSTANT SIZE = 1376 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 8 2
IDATA SIZE = ---- ----
BIT SIZE = ---- 2
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -