⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 温度控制.lst

📁 PID 的温度控制
💻 LST
📖 第 1 页 / 共 2 页
字号:
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 + -