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

📄 0.lst

📁 2010年新增TX-1C程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 240   2        }
 241   1      
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 5   

 242   1          return (dat);
 243   1      }
 244          
 245          /*******************************************************************/
 246          /*                                                                 */
 247          /* 写一位                                                          */
 248          /*                                                                 */
 249          /*******************************************************************/
 250          void write_bit(char bitval) {
 251   1      DQ = 0;                                        // 将DQ 拉低开始写时间隙
 252   1      if(bitval==1) DQ =1;     // 如果写1,DQ 返回高电平
 253   1      Delay(5);                                     // 在时间隙内保持电平值,
 254   1      DQ = 1;                  // Delay函数每次循环延时16μs,因此delay(5) = 104μs
 255   1      }       
 256          
 257          /*******************************************************************/
 258          /*                                                                 */
 259          /* 写一个字节                                                      */
 260          /*                                                                 */
 261          /*******************************************************************/
 262           WriteOneChar(unsigned char dat)
 263          {
 264   1        unsigned char i = 0;
 265   1        unsigned char temp;
 266   1      //  for (i = 8; i > 0; i--)
 267   1      //  {
 268   1         for (i=0; i<8; i++)  // 写入字节, 每次写入一位 
 269   1         {
 270   2      //    DQ = 0;
 271   2      //    DQ = dat&0x01;
 272   2      //    Delay(5);
 273   2      
 274   2      //    DQ = 1;
 275   2         temp = dat>>i;               
 276   2         temp &= 0x01;                
 277   2         write_bit(temp);
 278   2      //    dat>>=1;
 279   2         
 280   2        }
 281   1        Delay(5);
 282   1      }
 283          
 284          /*******************************************************************/
 285          /*                                                                 */
 286          /* 读取64位序列码                                                  */
 287          /*                                                                 */
 288          /*******************************************************************/
 289           Read_RomCord(void)
 290          {
 291   1           unsigned char j;
 292   1           Init_DS18B20();
 293   1        
 294   1           WriteOneChar(0x33);  // 读序列码的操作
 295   1           for (j = 0; j < 8; j++)
 296   1               {
 297   2                RomCode[j] = ReadOneChar() ; 
 298   2               }
 299   1      }
 300          
 301          /*******************************************************************/
 302          /*                                                                 */
 303          /*DS18B20的CRC8校验程序                                            */
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 6   

 304          /*                                                                 */
 305          /*******************************************************************/
 306          uchar CRC8() 
 307          { 
 308   1         uchar i,x; uchar crcbuff;
 309   1         
 310   1         crc=0;
 311   1         for(x = 0; x <8; x++)
 312   1         {
 313   2          crcbuff=RomCode[x];
 314   2          for(i = 0; i < 8; i++) 
 315   2           { 
 316   3            if(((crc ^ crcbuff)&0x01)==0) 
 317   3            crc >>= 1; 
 318   3             else { 
 319   4                    crc ^= 0x18;   //CRC=X8+X5+X4+1
 320   4                    crc >>= 1; 
 321   4                    crc |= 0x80; 
 322   4                  }         
 323   3            crcbuff >>= 1;       
 324   3               }
 325   2         }
 326   1           return crc;        
 327   1      }
 328          /*******************************************************************/
 329          /*                                                                 */
 330          /* 数据转换与显示                                                  */
 331          /*                                                                 */
 332          /*******************************************************************/
 333          
 334           Disp_RomCode()
 335          {
 336   1         uchar j;
 337   1         uchar H_num=0x40;       //LCD第二行初始位置
 338   1      
 339   1         for(j=0;j<8;j++)
 340   1         {
 341   2          Temp = RomCode[j];
 342   2      
 343   2          display[0]=((Temp&0xf0)>>4);
 344   2          if(display[0]>9)
 345   2           { display[0]=display[0]+0x37;}
 346   2          else{display[0]=display[0]+0x30;}
 347   2      
 348   2          lcd_pos(H_num);             
 349   2          lcd_wdat(display[0]);        //高位数显示 
 350   2      
 351   2          H_num++;
 352   2          display[1]=(Temp&0x0f);
 353   2          if(display[1]>9)
 354   2           {display[1]=display[1]+0x37;}
 355   2          else {display[1]=display[1]+0x30;}
 356   2      
 357   2          lcd_pos(H_num);             
 358   2          lcd_wdat(display[1]);        //低位数显示 
 359   2          H_num++;
 360   2         }
 361   1      }        
 362          
 363          /*******************************************************************/
 364          /*                                                                 */
 365          /* 蜂鸣器响一声                                                    */
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 7   

 366          /*                                                                 */
 367          /*******************************************************************/
 368          void beep()
 369            {
 370   1          unsigned char y;
 371   1          for (y=0;y<100;y++)
 372   1          {
 373   2            Delay(60);
 374   2            BEEP=!BEEP;                //BEEP取反
 375   2          } 
 376   1          BEEP=1;                      //关闭蜂鸣器
 377   1              Delay(40000);
 378   1        }
 379          
 380          /*******************************************************************/
 381          /*                                                                 */
 382          /* DS18B20 OK 显示菜单                                             */
 383          /*                                                                 */
 384          /*******************************************************************/
 385          void  Ok_Menu ()
 386          { 
 387   1          uchar  m;
 388   1          lcd_init();                //初始化LCD 
 389   1                  
 390   1          lcd_pos(0);                //设置显示位置为第一行的第1个字符
 391   1           m = 0;
 392   1          while(cdis1[m] != '\0')
 393   1           {                         //显示字符
 394   2             lcd_wdat(cdis1[m]);
 395   2             m++;
 396   2           }
 397   1      
 398   1          lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 399   1           m = 0;
 400   1          while(cdis2[m] != '\0')
 401   1           {
 402   2             lcd_wdat(cdis2[m]);      //显示字符
 403   2             m++;
 404   2           }
 405   1      }
 406          
 407          /*******************************************************************/
 408          /*                                                                 */
 409          /* DS18B20 ERROR 显示菜单                                          */
 410          /*                                                                 */
 411          /*******************************************************************/
 412          void  Error_Menu ()
 413          {
 414   1           uchar  m;
 415   1           lcd_init();                //初始化LCD 
 416   1              
 417   1               lcd_pos(0);                //设置显示位置为第一行的第1个字符
 418   1           m = 0;
 419   1           while(cdis3[m] != '\0')
 420   1           {                         //显示字符
 421   2             lcd_wdat(cdis3[m]);
 422   2             m++;
 423   2           }
 424   1      
 425   1           lcd_pos(0x40);             //设置显示位置为第二行第1个字符
 426   1           m = 0;
 427   1           while(cdis4[m] != '\0')
C51 COMPILER V8.02   0                                                                     06/29/2010 15:15:13 PAGE 8   

 428   1           {
 429   2             lcd_wdat(cdis4[m]);      //显示字符
 430   2             m++;
 431   2           }
 432   1      }
 433          
 434          /*******************************************************************/
 435          /*                                                                 */
 436          /* 主函数                                                          */
 437          /*                                                                 */
 438          /*******************************************************************/
 439          void main()
 440           {
 441   1           P0 = 0xff;
 442   1           P2 = 0xff;
 443   1      
 444   1         while(1)
 445   1        {
 446   2           Ok_Menu ();
 447   2           Read_RomCord();    //读取64位序列码
 448   2           CRC8();            //CRC效验
 449   2           if(crc==0)         //CRC效验正确
 450   2               {
 451   3                Disp_RomCode();       //显示64位序列码
 452   3                beep();
 453   3           }
 454   2           while(!presence)
 455   2               {
 456   3                Init_DS18B20();
 457   3                delay1(1000);
 458   3               }
 459   2      
 460   2           Error_Menu ();
 461   2              do
 462   2               {  
 463   3                 Init_DS18B20();
 464   3                 beep();
 465   3           }
 466   2              while(presence);
 467   2        }
 468   1      }
 469          
 470          /*******************************************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    639    ----
   CONSTANT SIZE    =     68    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     12    ----
   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 + -