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

📄 ds18b20.lst

📁 温度传感器ds18b20的驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 216   3                                                      statussend(num3);                                               
 217   3                                                      break;
 218   3                                                      */
 219   3                                                      
 220   3                                                      {
 221   4                                                              Read_18B20();
 222   4                                                              num3[0]=GetScratchpad[1];
 223   4                                                              num3[1]=GetScratchpad[0];
 224   4                                                              statussend(num3);
 225   4                                                              break;
 226   4                                                      }
 227   3                                                      
 228   3                                                      
 229   3                                                      
 230   3      
 231   3                              default: break;
 232   3                      }
 233   2                      UARTKeyFlag=0xaa;            /*清串口键盘命令标志位*/
 234   2              }
 235   1      }
 236          
 237          
 238                  
 239          
 240          void statussend(uchar num[8])
 241          {
C51 COMPILER V8.02   DS18B20                                                               06/12/2008 17:28:54 PAGE 5   

 242   1              uchar i;
 243   1              IE&=0xef;
 244   1              for(i=0;i<8;i++)
 245   1              {
 246   2                      SBUF=num[i];
 247   2                      while(TI!=1);
 248   2                      TI=0;
 249   2              }
 250   1              IE|=0x10;
 251   1      }
 252          
 253          void statussend_one()
 254          {       
 255   1              uchar i;
 256   1      
 257   1              IE&=0xef;
 258   1      
 259   1              for(i=0;i<8;i++)
 260   1              {
 261   2                      //SBUF=ResultTemperatureH;
 262   2                      SBUF=0x45;
 263   2                      while(TI!=1);
 264   2                      TI=0;
 265   2              }
 266   1              IE|=0x10;
 267   1      }
 268          
 269          uchar keyjudge(void)                                            //键盘处理      
 270          {               
 271   1              uchar j,counterKeyPressedNum;
 272   1              uchar keyret=0x55; 
 273   1              uint keynum;
 274   1              scankey();
 275   1              if(keyflag!=0)
 276   1              {
 277   2                      delay(1000);
 278   2                      scankey();
 279   2                      P1=0x0f;
 280   2                      while((P1&0x0f)!=0x0f);
 281   2                      counterKeyPressedNum=0; 
 282   2                      for(j=0;j<16;j++)
 283   2                      {
 284   3                              keynum=((uint)0x0001)<<j;                                               
 285   3                              if((keyflag&keynum)==keynum)
 286   3                              {
 287   4                                      counterKeyPressedNum++; 
 288   4                                      keyret=j;       
 289   4                              }
 290   3                      }
 291   2                      if(counterKeyPressedNum>1)
 292   2                      {
 293   3                              return(0x55);
 294   3                      }
 295   2                      else
 296   2                      {
 297   3                              return(keyret);
 298   3                      }
 299   2              }
 300   1              if(UARTKeyFlag!=0xaa)  
 301   1              {
 302   2                 return(UARTKeyFlag);
 303   2              }
C51 COMPILER V8.02   DS18B20                                                               06/12/2008 17:28:54 PAGE 6   

 304   1              return(0x55);
 305   1      }
 306          
 307          void scankey()                                                          //键盘扫描
 308          {
 309   1              uchar scanvalue=0xef,scan,scantemp;
 310   1              for(scan=0;scan<4;scan++)
 311   1              {
 312   2                      P1=scanvalue;
 313   2                      scantemp=P1;
 314   2                      if((scantemp&0x01)==0x00)
 315   2                      keyflag|=(0x0001<<(scan*4+0));
 316   2                      else
 317   2                      keyflag&=~(0x0001<<(scan*4+0));
 318   2                      if((scantemp&0x02)==0x00)
 319   2                      keyflag|=(0x0001<<(scan*4+1));
 320   2                      else
 321   2                      keyflag&=~(0x0001<<(scan*4+1));
 322   2                      if((scantemp&0x04)==0x00)
 323   2                      keyflag|=(0x0001<<(scan*4+2));
 324   2                      else
 325   2                      keyflag&=~(0x0001<<(scan*4+2)); 
 326   2                      if((scantemp&0x08)==0x00)
 327   2                      keyflag|=(0x0001<<(scan*4+3));
 328   2                      else
 329   2                      keyflag&=~(0x0001<<(scan*4+3));
 330   2                      scanvalue=scanvalue<<1|0x01;
 331   2              }
 332   1      }
 333          
 334          void delay(uint value)                                          //延时
 335          {
 336   1              while(value!=0)
 337   1              {
 338   2                      value--;
 339   2              }
 340   1      }
 341                  
 342          void Timer0Int() interrupt 1 using 2            //中断Timer0
 343          {
 344   1              static uchar temp;
 345   1              uint temp1;
 346   1              temp1=65536-SCAN_CYCLE;
 347   1              TH0=temp1>>8;
 348   1              TL0=temp1-((temp1>>8)<<8);
 349   1              if(++temp>=10)
 350   1              temp=1;
 351   1              get_num=temp;
 352   1      }       
 353                  
 354          void UARTInt() interrupt 4 using 1        //串口中断服务程序
 355          {
 356   1          if(TI==1)                             //是发送中断则返回//
 357   1              {
 358   2                  TI=0;
 359   2                      return;
 360   2              }
 361   1              else                                  //接收到数据//
 362   1              {       
 363   2                  uchar rcv;
 364   2              while(RI!=1);
 365   2                  {
C51 COMPILER V8.02   DS18B20                                                               06/12/2008 17:28:54 PAGE 7   

 366   3                      RI=0;                         //请接收标志位以激活下次串口中断//
 367   3                          rcv=SBUF;
 368   3                      
 369   3                          switch(rcv)
 370   3                          {
 371   4                              case 48: 
 372   4                               UARTKeyFlag=0x0d;    //收到'0'//
 373   4                                                                      //数码管左移
 374   4                                               break;
 375   4                                               
 376   4                          case 49: UARTKeyFlag=0x00;    //收到'1'//
 377   4                                                                                      //数码管左移
 378   4                                               break;
 379   4                                               
 380   4                              case 50: 
 381   4                                              UARTKeyFlag=0x01;    //收到'2'//
 382   4                                                                      //数码管左移
 383   4                                               break;
 384   4                                               
 385   4                              case 51:
 386   4                                               UARTKeyFlag=0x02;    //收到'3'//
 387   4                                                      
 388   4                                               break;
 389   4                                               
 390   4                              case 52: 
 391   4                                              UARTKeyFlag=0x04;    //收到'4'//
 392   4                                      
 393   4                                               break;
 394   4                              
 395   4                              case 53: UARTKeyFlag=0x05;    //收到'5'//
 396   4                                               break;
 397   4              
 398   4                              case 54: UARTKeyFlag=0x06;    //收到'6'//
 399   4                                               break;
 400   4                              case 55: UARTKeyFlag=0x08;    //收到'7'//
 401   4                                               break;
 402   4                              case 56: UARTKeyFlag=0x09;    //收到'8'//
 403   4                                               break;
 404   4                              case 57: UARTKeyFlag=0x0a;    //收到'9'//
 405   4                                               break;
 406   4                              case 65: UARTKeyFlag=0x03;    //收到'A'//
 407   4                                               break;
 408   4                              case 66: UARTKeyFlag=0x07;    //收到'B//
 409   4                                               break;
 410   4                              case 67: UARTKeyFlag=0x0b;    //收到'C'//
 411   4                                               break;
 412   4                              case 68: UARTKeyFlag=0x0f;    //收到'D'*/
 413   4                                               break;
 414   4                              case 69: UARTKeyFlag=0x0c;    //收到'E'//
 415   4                                               break;
 416   4                              case 70: UARTKeyFlag=0x0e;    //收到'F'*/
 417   4                                               break;
 418   4                              }
 419   3                  }
 420   2              }
 421   1      }       


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1022    ----
   CONSTANT SIZE    =     32    ----
   XDATA SIZE       =   ----    ----
C51 COMPILER V8.02   DS18B20                                                               06/12/2008 17:28:54 PAGE 8   

   PDATA SIZE       =   ----    ----
   DATA SIZE        =     53      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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