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

📄 temprature.lst

📁 本人写的利用c8051f330单片机开发的系统的程序,包括驱动ds18b20功能和hd7279的驱动,保证能用!
💻 LST
📖 第 1 页 / 共 3 页
字号:
 240   1      
 241   1      }
C51 COMPILER V7.06   TEMPRATURE                                                            04/09/2008 00:06:15 PAGE 5   

 242          
 243                  
 244          
 245                  
 246          void timer_init(void)
 247          {
 248   1              TR0=0;
 249   1              TR1=0;
 250   1              TL0=0x00;
 251   1              TH0=0x00;
 252   1              TL1=0xFF;
 253   1              TH1=0x4B;                                       //定时50ms
 254   1              TMOD=0x11;//T0,T1,16位定时器
 255   1              CKCON=0x00;//定时器时钟=系统时钟/12
 256   1              
 257   1      
 258   1      
 259   1              Time_Inc=0;
 260   1              Time_Inc_30S=0;
 261   1              Time_Inc_5S=0;
 262   1              Display_Select=0;                       //默认起始显示当前温度
 263   1              Time_Change=0;                          //默认30计时开始
 264   1              
 265   1              TR0=1;//启动T0,T1
 266   1              TR1=1;
 267   1              
 268   1              ET0=1;
 269   1              ET1=1;                                          //允许定时器中断
 270   1      }
 271          
 272          
 273          void Temperature_Display(unsigned char tempr)           //显示当前温度
 274          {
 275   1              unsigned char tempHigh,tempLow;
 276   1              tempHigh=(unsigned char)tempr/10;
 277   1              tempLow=tempr%10;
 278   1              
 279   1              Write_Hd7279(0x81,tempLow);                     //显示温度个位81
 280   1              Write_Hd7279(0x80,tempHigh);            //显示温度十位80
 281   1      }
 282          
 283          void Time_Display(unsigned char time)                   //显示当前时间
 284          {
 285   1              unsigned char TimeHigh,TimeLow;
 286   1              TimeHigh=time/10;
 287   1              TimeLow=time%10;
 288   1      
 289   1              Write_Hd7279(0x83,TimeLow);                     //显示时间低位83
 290   1              Write_Hd7279(0x82,TimeHigh);            //显示时间高位82
 291   1      }
 292          
 293          void init_18B20(void)
 294          {
 295   1              DQ=TRUE;
 296   1              DQ=FALSE;
 297   1              delayus(700);//>480us
 298   1              DQ=TRUE;
 299   1              delayus(17);
 300   1              while(FALSE!=DQ);
 301   1              delayus(200);//60~240us
 302   1      }
 303          
C51 COMPILER V7.06   TEMPRATURE                                                            04/09/2008 00:06:15 PAGE 6   

 304          
 305          void write_18B20(unsigned char x)
 306          {
 307   1              unsigned char m;
 308   1              for(m=0;m<8;m++)
 309   1              {
 310   2                      DQ=TRUE;
 311   2                      DQ=FALSE;
 312   2                      delayus(1);
 313   2                      if(x&(1<<m))//写数据,从低位开始
 314   2                              DQ=TRUE;
 315   2                      else
 316   2                              DQ=FALSE;
 317   2                      delayus(100);//60us
 318   2              }
 319   1              DQ=TRUE;
 320   1              delayus(1);
 321   1      }
 322          
 323          unsigned char read_18B20(void)
 324          {
 325   1              unsigned char temp,l;
 326   1              temp=0;
 327   1              for(l=0;l<8;l++)
 328   1              {
 329   2                      temp>>=1;
 330   2                      DQ=FALSE;
 331   2                      delayus(1);
 332   2                      DQ=TRUE;
 333   2                      delayus(1);
 334   2                      if(DQ)
 335   2                              temp|=0x80;
 336   2                      delayus(100); //60~120us
 337   2                      DQ=TRUE;
 338   2              }
 339   1              delayus(1);
 340   1              return (temp);
 341   1      }
 342          
 343          void t0_ISR() interrupt 1
 344          {
 345   1              unsigned char temh,teml;
 346   1              ET1=0;                                                                  //关定时器1
 347   1              EX0=0;                                                                  //关外部中断
 348   1      //      TCON&=~0x01;
 349   1      
 350   1              if(0==a)
 351   1              {
 352   2                      temh=0;
 353   2                      teml=0;
 354   2                      init_18B20();//复位18b20
 355   2                      write_18B20(0xCC);//发出转换命令
 356   2                      write_18B20(0x44);
 357   2                      delayus(1000);
 358   2                      init_18B20();
 359   2                      write_18B20(0xCC);//发出读命令
 360   2                      write_18B20(0xBE);
 361   2                      teml=read_18B20();//读数据
 362   2                      temh=read_18B20();
 363   2                      count=(temh*256.0+teml*1.0)*0.0625;//计算具体温度
 364   2                      TemperatureNow=(unsigned char)(count);
 365   2              }
C51 COMPILER V7.06   TEMPRATURE                                                            04/09/2008 00:06:15 PAGE 7   

 366   1              a++;
 367   1              if(a>10)
 368   1                      a=0;
 369   1      //      TCON=0x00;
 370   1              ET1=1;                                                                  //开定时器1
 371   1              EX0=1;                                                                  //开外部中断
 372   1              Temperature_Flag=1;
 373   1              
 374   1      }
 375          
 376          void T1_ISR()  interrupt 3                                      //50ms定时              
 377          {
 378   1      //      ET0=0;                                                                  //关定时器0
 379   1      //      EX0=0;                                                                  //关外部中断
 380   1              EA=0;
 381   1              delayus(200);
 382   1              Time_Inc++;
 383   1      
 384   1              if(Time_Change==0)                                              //30s定时统计
 385   1                      Time_Inc_30S++;
 386   1              if(Time_Change==1)                                              //5s定时统计
 387   1                      Time_Inc_5S++;
 388   1              if(Time_Inc==1200)              //1min定时到
 389   1              {
 390   2              
 391   2                      TimeSet--;
 392   2                      if(TimeSet==-1)
 393   2                              TimeSet=60;
 394   2                      Time_Inc=0;
 395   2                      
 396   2              }
 397   1              else if(Time_Inc_30S==600)                              //30s定时时间到
 398   1              {
 399   2                      Time_Inc_30S=0;
 400   2                      Display_Select=1;                                       //开始显示设定温度
 401   2                      Time_Change=1;
 402   2              }
 403   1              else if(Time_Inc_5S==100)                               //5s定时时间到
 404   1              {
 405   2                      Time_Inc_5S=0;
 406   2                      Display_Select=0;                                       //显示测量温度
 407   2                      Time_Change=0;                                          
 408   2              }
 409   1              
 410   1      
 411   1      
 412   1              TL1=0xFF;
 413   1              TH1=0x4B;                       //重载(50ms定时)
 414   1      
 415   1      
 416   1              EA=1;
 417   1      
 418   1      }
 419                  
 420          
 421          
 422          
 423          
 424          void Short_Delay(void) /*短延时函数*/
 425          { 
 426   1      unsigned char i;
 427   1      for(i=0;i<0x08;i++);
C51 COMPILER V7.06   TEMPRATURE                                                            04/09/2008 00:06:15 PAGE 8   

 428   1      }
 429          /****************************************************************************** 
 430          ******/
 431          void Long_Delay(void) /*长延时函数*/
 432          {
 433   1      unsigned char i;
 434   1      for(i=0;i<0x30;i++);
 435   1      }
 436          
 437          void Write_Hd7279(unsigned char Command,unsigned char Data) /*HD7279写函数*/
 438          { 
 439   1      Send_Byte(Command);
 440   1      Send_Byte(Data);
 441   1      }
 442          /****************************************************************************** 
 443          ******/
 444          unsigned char Read_Hd7279(unsigned char Command) /*HD7279读函数*/
 445          { 
 446   1      Send_Byte(Command);
 447   1      return(Receive_Byte());
 448   1       }
 449          
 450          
 451          /****************************************************************************** 
 452          ******/ 
 453          void Send_Byte(unsigned char Data_Out) /*HD7279发送字节函数*/
 454          { 
 455   1      unsigned char i;
 456   1      Clear_Bit(Hd7279_CS);
 457   1      Long_Delay();
 458   1      for(i=0;i<8;i++)
 459   1      { 
 460   2      if(Data_Out&0x80) Set_Bit(Hd7279_Data);
 461   2      else Clear_Bit(Hd7279_Data);
 462   2      Set_Bit(Hd7279_Clk);
 463   2      Short_Delay();
 464   2      Clear_Bit(Hd7279_Clk);
 465   2      Short_Delay();
 466   2      Data_Out=Data_Out<<1;
 467   2      }
 468   1      Clear_Bit(Hd7279_Data);
 469   1       }
 470          /****************************************************************************** 
 471          ******/ 
 472          unsigned char Receive_Byte(void) /*HD7279接收字节函数*/
 473          { 
 474   1      unsigned char i,Data_In;
 475   1      Set_Bit(Hd7279_Data);
 476   1      Long_Delay();
 477   1      for(i=0;i<8;i++)
 478   1      {
 479   2      Set_Bit(Hd7279_Clk);
 480   2      Short_Delay();
 481   2      Data_In=Data_In<<1;
 482   2      if(Hd7279_Data) Data_In=Data_In|0x01;
 483   2      Clear_Bit(Hd7279_Clk);
 484   2      Short_Delay();
 485   2      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -