📄 温度控制.lst
字号:
C51 COMPILER V6.12 _耞萠___ 03/11/2009 16:17:00 PAGE 5
242 void LCD_SetInput(unsigned char InputMode)
243 {
244 1 LCD_Write(LCD_COMMAND, 0x04|InputMode);
245 1 }
246
247 //初始化LCD************************************************************
248 void LCD_Initial()
249 {
250 1 LcdEn=0;
251 1 LCD_Write(LCD_COMMAND,0x38); //8位数据端口,2行显示,5*7点阵
252 1 LCD_Write(LCD_COMMAND,0x38);
253 1 LCD_SetDisplay(LCD_SHOW|LCD_NO_CURSOR); //开启显示, 无光标
254 1 LCD_Write(LCD_COMMAND,LCD_CLEAR_SCREEN); //清屏
255 1 LCD_SetInput(LCD_AC_UP|LCD_NO_MOVE); //AC递增, 画面不动
256 1 }
257
258 //液晶字符输入的位置************************
259 void GotoXY(unsigned char x, unsigned char y)
260 {
261 1 if(y==0)
262 1 LCD_Write(LCD_COMMAND,0x80|x);
263 1 if(y==1)
264 1 LCD_Write(LCD_COMMAND,0x80|(x-0x40));
265 1 }
266
267 //将字符输出到液晶显示
268 void Print(unsigned char *str)
269 {
270 1 while(*str!='\0')
271 1 {
272 2 LCD_Write(LCD_DATA,*str);
273 2 str++;
274 2 }
275 1 }
276
277
278
279 /***********ds18b20延迟子函数(晶振12MHz )*******/
280
281 void delay_18B20(unsigned int i)
282 {
283 1 while(i--);
284 1 }
285
286 /**********ds18b20初始化函数**********************/
287
288 void Init_DS18B20(void)
289 {
290 1 unsigned char x=0;
291 1 DQ = 1; //DQ复位
292 1 delay_18B20(8); //稍做延时
293 1 DQ = 0; //单片机将DQ拉低
294 1 delay_18B20(80); //精确延时 大于 480us
295 1 DQ = 1; //拉高总线
296 1 delay_18B20(14);
297 1 x=DQ; //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
298 1 delay_18B20(20);
299 1 }
300
301 /***********ds18b20读一个字节**************/
302
303 unsigned char ReadOneChar(void)
C51 COMPILER V6.12 _耞萠___ 03/11/2009 16:17:00 PAGE 6
304 {
305 1 uchar i=0;
306 1 uchar dat = 0;
307 1 for (i=8;i>0;i--)
308 1 {
309 2 DQ = 0; // 给脉冲信号
310 2 dat>>=1;
311 2 DQ = 1; // 给脉冲信号
312 2 if(DQ)
313 2 dat|=0x80; // 位 或;
314 2 delay_18B20(4);
315 2 }
316 1 return(dat);
317 1 }
318
319 /*************ds18b20写一个字节****************/
320
321 void WriteOneChar(uchar dat)
322 {
323 1 unsigned char i=0;
324 1 for (i=8; i>0; i--)
325 1 {
326 2 DQ = 0;
327 2 DQ = dat&0x01;
328 2 delay_18B20(5);
329 2 DQ = 1;
330 2 dat>>=1;
331 2 }
332 1 }
333
334 /**************读取ds18b20当前温度************/
335
336 void ReadTemp(void)
337 {
338 1 unsigned char a=0;
339 1 unsigned char b=0;
340 1 unsigned char t=0;
341 1
342 1 Init_DS18B20();
343 1 WriteOneChar(0xCC); // 跳过读序号列号的操作
344 1 WriteOneChar(0x44); // 启动温度转换
345 1
346 1 delay_18B20(100); // this message is wery important
347 1
348 1 Init_DS18B20();
349 1 WriteOneChar(0xCC); //跳过读序号列号的操作
350 1 WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
351 1
352 1 delay_18B20(100);
353 1
354 1 a=ReadOneChar(); //读取温度值低位
355 1 b=ReadOneChar(); //读取温度值高位
356 1 temp_value=b<<4;
357 1 temp_value+=(a&0xf0)>>4;
358 1 }
359 void temp_to_str() //温度数据转换成液晶字符显示
360 {
361 1
362 1
363 1
364 1 TempBuffer[0]='t'; //十位
365 1 TempBuffer[1]='i'; //个位
C51 COMPILER V6.12 _耞萠___ 03/11/2009 16:17:00 PAGE 7
366 1 TempBuffer[2]='m'; //温度符号
367 1 TempBuffer[3]='e';
368 1 TempBuffer[4]='0';
369 1 TempBuffer[5]=':';
370 1
371 1 TempBuffer[6]=temp_value/10+'0'; //十位
372 1 TempBuffer[7]=temp_value%10+'0'; //个位
373 1 TempBuffer[8]=0xdf; //温度符号
374 1 TempBuffer[9]='C';
375 1 TempBuffer[10]='\0';
376 1
377 1
378 1 }
379
380 void temp_to_str1() //温度数据转换成液晶字符显示
381 {
382 1
383 1
384 1 TempBuffer1[0]='t'; //十位
385 1 TempBuffer1[1]='1'; //十位
386 1 TempBuffer1[2]=':'; //十位
387 1
388 1 TempBuffer1[3]=T/10+'0';
389 1 TempBuffer1[4]=T%10+'0';
390 1 TempBuffer1[5]=0xdf; //温度符号
391 1 TempBuffer1[6]='C';
392 1 TempBuffer1[7]='\0';
393 1 }
394
395
396
397
398
399 void Delay1ms(unsigned int count)
400 {
401 1 unsigned int i,j;
402 1 for(i=0;i<count;i++)
403 1 for(j=0;j<120;j++);
404 1 }
405
406 /*延时子程序*/
407 void mdelay(uint delay)
408 { uint i;
409 1 for(;delay>0;delay--)
410 1 {for(i=0;i<62;i++) //1ms延时.
411 2 {;}
412 2 }
413 1 }
414
415
416
417 //////////////////////////////////////////////////////////////////////////////////////////////////////////
-//
418
419 void show_time() //液晶显示程序
420 {
421 1
422 1
423 1 //开启温度采集程序
424 1 temp_to_str(); //温度数据转换成液晶字符
425 1 GotoXY(0,0); //液晶字符显示位置
426 1 Print(TempBuffer); //显示温度
C51 COMPILER V6.12 _耞萠___ 03/11/2009 16:17:00 PAGE 8
427 1 GotoXY(1,1);
428 1
429 1
430 1 //扫描延时
431 1 }
432
433
434 void show_time1() //液晶显示程序
435 {
436 1
437 1 temp_to_str1();
438 1 GotoXY(0,1); //液晶字符显示位置
439 1 Print(TempBuffer1); //显示温度
440 1 GotoXY(1,1);
441 1
442 1
443 1 //扫描延时
444 1 }
445
446
447 main()
448 {
449 1 EN1=1;
450 1 IN1=0;
451 1 LCD_Initial(); //液晶初始化
452 1 Init_DS18B20(); //DS18B20初始化
453 1 initTimer0_Timer1(); //初始化定时器0,定时器1
454 1 initPID(); //初始化PID 参数
455 1 //进入默认液晶显示
456 1 while(1)
457 1
458 1 { ReadTemp();
459 2
460 2 wd=temp_value;
461 2 show_time();
462 2 show_time1();
463 2
464 2 scanner();
465 2 if(disp==1)
466 2 {shezhiwendu();
467 3 }
468 2 }
469 1 }
470
471
472
473
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 989 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 91 6
IDATA SIZE = ---- ----
BIT SIZE = 1 1
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -