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

📄 18b20lcd.lst

📁 ds18b20温度采集 rt12232和共阴极led同时显示温度 开发环境为keil软件
💻 LST
📖 第 1 页 / 共 2 页
字号:
 260   1        {
 261   2          SetPage(page,page);
 262   2          SetAddress(0,0);
 263   2          for (i=0;i<61;i++)
 264   2                      {PutCharR(0);
 265   3                      PutCharL(0);}
 266   2        }
 267   1      } 
 268          
 269          
 270          
 271          //---------------------------------------------------------------
 272          //---------------------------------------------------------------
 273          //采用zimo2  显示汉字,以汉字的显示方式
 274          //void Draw_word(uchar d_where,uint x_add,bit layer,uchar width)
 275          //d_where表示在码表中第几个汉字,x_add横坐标位置,layer显示的层, width显示的宽度。
 276          //---------------------------------------------------------------
 277          
 278          
 279          void Draw_word(uint d_where,uint x_add,bit layer,uchar width,bit s)
 280          {
 281   1        uchar x,address,     //address表示显存的物理地址
 282   1         page=0;      //page表示上下两页
 283   1        bit window=0;  //window表示左右两页
 284   1       //putcharR     //右边
 285   1       //putcharL     //左边
 286   1              if(s==0)
 287   1                      d_where=d_where*32;
 288   1              else
 289   1                      d_where=304+d_where*16;
 290   1      
 291   1        for (x=width;x>1;x--)
 292   1                 { 
 293   2                      if (x_add>60) 
 294   2                               {
 295   3                                window=1;address=x_add%61;
 296   3                               }
 297   2                      else 
 298   2                              address=x_add;
 299   2                              
 300   2                      
 301   2                      if(layer==0)    //显示一行八个字
 302   2                         {if (x_add>60) 
 303   3                               {
C51 COMPILER V7.50   18B20LCD                                                              09/22/2008 16:02:08 PAGE 6   

 304   4                                window=1;address=x_add%61;
 305   4                               }
 306   3                      else 
 307   3                              address=x_add;
 308   3                              SetPage(0,0);
 309   3                              SetAddress(address,address);
 310   3                                      if(window==1)
 311   3                                              PutCharR(bmp001[d_where]);//右边
 312   3                                      else
 313   3                                              PutCharL(bmp001[d_where]);//左边
 314   3                      
 315   3                              SetPage(1,1);
 316   3                              SetAddress(address,address);
 317   3                      
 318   3                                      if(window==1)
 319   3                                              PutCharR(bmp001[d_where+width]);
 320   3                                      else
 321   3                                              PutCharL(bmp001[d_where+width]);
 322   3                      
 323   3                              }
 324   2                      else
 325   2                              {                               //显示第二行八个汉字
 326   3                              SetPage(2,2);
 327   3                              SetAddress(address,address);
 328   3                              if(window==1)
 329   3                                      PutCharR(bmp001[d_where]);//右边
 330   3                              else    
 331   3                                      PutCharL(bmp001[d_where]);//左边
 332   3                              SetPage(3,3);
 333   3                              SetAddress(address,address);
 334   3                              if(window==1)
 335   3                                      PutCharR(bmp001[d_where+width]);
 336   3                              else
 337   3                                      PutCharL(bmp001[d_where+width]);
 338   3                              
 339   3                              }
 340   2                  x_add++;
 341   2                  d_where++;
 342   2       }
 343   1      }
 344          
 345          
 346          void xianshi(void)
 347          {
 348   1              
 349   1      
 350   1         
 351   1                      P0=zima1[zima2[3]]; //读取温度的高值;
 352   1                      a=1;b=1;c=0;   //所放数的位置;
 353   1              Draw_word(0,1,0,16,0); //每次只能显示14个汉字,即0~13位排列; 
 354   1                      P0=zima1[zima2[4]]; //读取温度的高值
 355   1                      a=0;b=1;c=0;dp=1;          //所放数的位置
 356   1              Draw_word(1,17,0,16,0); 
 357   1                      P0=zima1[zima2[5]]; //读取温度的高值
 358   1                      a=1;b=0;c=0;           //所放数的位置
 359   1              Draw_word(2,33,0,16,0); 
 360   1                      P0=zima1[zima2[6]]; //读取温度的高值
 361   1                      a=0;b=0;c=0;           //所放数的位置
 362   1              Draw_word(3,49,0,16,0);         
 363   1                      P0=zima1[zima2[3]]; //读取温度的高值;
 364   1                      a=1;b=1;c=0;   //所放数的位置;
 365   1              Draw_word(4,65,0,16,0); 
C51 COMPILER V7.50   18B20LCD                                                              09/22/2008 16:02:08 PAGE 7   

 366   1                      P0=zima1[zima2[4]]; //读取温度的高值
 367   1                      a=0;b=1;c=0;dp=1;          //所放数的位置
 368   1              Draw_word(5,81,0,16,0); 
 369   1                      P0=zima1[zima2[5]]; //读取温度的高值
 370   1                      a=1;b=0;c=0;           //所放数的位置
 371   1              Draw_word(6,97,0,16,0);         
 372   1                      P0=zima1[zima2[6]]; //读取温度的高值
 373   1                      a=0;b=0;c=0;           //所放数的位置
 374   1              Draw_word(7,1,1,16,0);  
 375   1                      P0=zima1[zima2[3]]; //读取温度的高值;
 376   1                      a=1;b=1;c=0;   //所放数的位置;
 377   1              Draw_word(8,17,1,16,0); 
 378   1                      P0=zima1[zima2[4]]; //读取温度的高值
 379   1                      a=0;b=1;c=0;dp=1;          //所放数的位置
 380   1              Draw_word(9,33,1,8,0);  
 381   1                      P0=zima1[zima2[5]]; //读取温度的高值
 382   1                      a=1;b=0;c=0;           //所放数的位置
 383   1       
 384   1              Draw_word(zima2[3],41,1,8,1); 
 385   1                      P0=zima1[zima2[6]]; //读取温度的高值
 386   1                      a=0;b=0;c=0;           //所放数的位置
 387   1              Draw_word(zima2[4],49,1,8,1);
 388   1                      P0=zima1[zima2[3]]; //读取温度的高值;
 389   1                      a=1;b=1;c=0;   //所放数的位置;
 390   1              Draw_word(10,57,1,8,1);         
 391   1                      P0=zima1[zima2[4]]; //读取温度的高值
 392   1                      a=0;b=1;c=0;dp=1;          //所放数的位置
 393   1              Draw_word(zima2[5],65,1,8,1);
 394   1                      P0=zima1[zima2[5]]; //读取温度的高值
 395   1                      a=1;b=0;c=0;           //所放数的位置
 396   1              Draw_word(zima2[6],73,1,8,1);
 397   1                      P0=P0=zima1[zima2[6]]; //读取温度的高值
 398   1                      a=0;b=0;c=0;           //所放数的位置
 399   1                      
 400   1      }
 401          
 402          void write1(unsigned int i)    //计算所取得的数值;
 403          {         
 404   1                      i=i*100/17;
 405   1                      zima2[3]=i/1000;
 406   1                      zima2[4]=i/100%10;
 407   1                      zima2[5]=i/10%10;
 408   1                      zima2[6]=i%10;
 409   1                      xianshi();
 410   1      }
 411          
 412          //初始化函数
 413          void Init_DS18B20(void)
 414          {
 415   1               unsigned char x=0;
 416   1              DQ = 1;    //DQ复位
 417   1              delay1(8);  //稍做延时
 418   1              DQ = 0;    //单片机将DQ拉低
 419   1              delay1(80); //精确延时 大于 480us
 420   1              DQ = 1;    //拉高总线
 421   1              delay1(14);
 422   1              x=DQ;      //稍做延时后 如果x=0则初始化成功 x=1则初始化失败
 423   1              delay1(20);
 424   1      }
 425          
 426          //读一个字节
 427            ReadOneChar(void)
C51 COMPILER V7.50   18B20LCD                                                              09/22/2008 16:02:08 PAGE 8   

 428           {
 429   1              unsigned char i=0;
 430   1              unsigned char dat=0;
 431   1              for (i=8;i>0;i--)
 432   1              {
 433   2               DQ = 0; // 给脉冲信号
 434   2               dat>>=1;
 435   2           DQ = 1; // 给脉冲信号
 436   2               if(DQ)
 437   2                dat|=0x80;
 438   2                delay1(4);
 439   2              }
 440   1         return(dat);
 441   1       }
 442          
 443          
 444          
 445          
 446          //写一个字节
 447          void WriteOneChar(unsigned char dat)
 448          {
 449   1              unsigned char i=0;
 450   1              for (i=8; i>0; i--)
 451   1              {
 452   2                      DQ = 0;
 453   2                      DQ = dat&0x01;
 454   2                      delay1(5);
 455   2                      DQ = 1;
 456   2                      dat>>=1;
 457   2              }
 458   1      
 459   1      }
 460          
 461          //读取温度
 462          unsigned int  ReadTemperature(void)
 463          {
 464   1              unsigned char a=0;
 465   1      
 466   1              unsigned int t=0;
 467   1              
 468   1              Init_DS18B20();
 469   1              WriteOneChar(0xCC); // 跳过读序号列号的操作
 470   1              WriteOneChar(0x44); // 启动温度转换
 471   1              Init_DS18B20();
 472   1              WriteOneChar(0xCC); //跳过读序号列号的操作
 473   1              WriteOneChar(0xBE); //读取温度寄存器等(共可读9个寄存器) 前两个就是温度
 474   1              a=ReadOneChar();
 475   1              t=ReadOneChar();
 476   1      
 477   1              t<<=8;
 478   1              t=t|a;
 479   1         
 480   1              //t= tt*10+0.5; //放大10倍输出并四舍五入---此行没用
 481   1          //a=tt+0.5;
 482   1              return(t);
 483   1      }
 484          
 485          
 486          void main()
 487          {
 488   1              P2=0xfe;
 489   1                      lcdini();       
C51 COMPILER V7.50   18B20LCD                                                              09/22/2008 16:02:08 PAGE 9   

 490   1              clrscr();
 491   1              while(1)
 492   1              {
 493   2                      unsigned int i;
 494   2      
 495   2               i=ReadTemperature();//读温度
 496   2                       write1(i);             
 497   2              }
 498   1      
 499   1      }
 500          
 501          
 502          
 503          
 504          
 505          
 506          
 507          
 508          
 509          
 510          
 511          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1455    ----
   CONSTANT SIZE    =    500    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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