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

📄 display.lst

📁 温度传感器DS18B20测温+显示+键盘
💻 LST
📖 第 1 页 / 共 2 页
字号:
 219   1              char i,j;
 220   1              LCD_RST=0;
 221   1              Delay1ms(2);
 222   1              LCD_RST=1;
 223   1              LCD_WriteCommand1(0xc0);        
 224   1              LCD_WriteCommand2(0xc0);
 225   1              LCD_WriteCommand1(0x3f);        //开显示
 226   1              LCD_WriteCommand2(0x3f);
 227   1              for (j=0;j<8;j++)                       //清屏
 228   1              {
 229   2                      LCD_WriteCommand1(0xB8+j);      //清左半屏
 230   2                      LCD_WriteCommand1(0x40);
 231   2                      for (i=0;i<64;i++)
 232   2                              LCD_WriteData1(0x00);
 233   2                      LCD_WriteCommand2(0xB8+j);      //清右半屏
 234   2                      LCD_WriteCommand2(0x40);
 235   2                      for (i=0;i<64;i++)
 236   2                              LCD_WriteData2(0x00);
 237   2              }
 238   1      }
 239          
 240          //-=====================================================================
 241          void Delay1us(unsigned char us)  //延时
C51 COMPILER V8.05a   DISPLAY                                                              07/22/2007 11:27:38 PAGE 5   

 242          {
 243   1              while (--us) ;//参数为1是延时6US 2时为8US依次递增
 244   1      
 245   1      }
 246          void Delay15us(void)  
 247          {
 248   1              Delay1us(13);                  //延时15秒
 249   1      }
 250          void Delay10us(void)
 251          {       
 252   1              Delay1us(8);
 253   1      }
 254          bit RstDS1820(void)             //返回0-有设备连接1-无设备连接
 255          {
 256   1              unsigned char i;
 257   1              bit RstFlag;
 258   1              RstFlag=1;      
 259   1              DataPortDS1820=0;
 260   1              for (i=0;i<40;i++)              //480us 延时
 261   1                      Delay15us(); 
 262   1              DataPortDS1820=1;
 263   1              for(i=0;i<4;i++)                        //15us-60us 延时
 264   1              {
 265   2                      Delay15us();
 266   2              }
 267   1              for (i=0;i<16;i++)                      //60us-240us 延时
 268   1              {
 269   2                      Delay15us();
 270   2                      if (DataPortDS1820==0) RstFlag=0;
 271   2              }
 272   1              for (i=0;i<16;i++)                      //240us
 273   1              {
 274   2                      Delay15us();
 275   2              }
 276   1              return RstFlag; 
 277   1      }
 278          void WriteDS1820(unsigned char ch)
 279          {
 280   1      unsigned char i;
 281   1              DataPortDS1820=1;
 282   1              Delay1us(1);
 283   1              for (i=0;i<8;i++)
 284   1              {
 285   2                      EA=0;
 286   2                      DataPortDS1820=0;
 287   2                      Delay15us();
 288   2                      DataPortDS1820=ch&0x1;
 289   2                      EA=1;
 290   2                      Delay15us();Delay15us();Delay15us();
 291   2                      DataPortDS1820=1;
 292   2                      ch=ch>>1;
 293   2                      Delay1us(1);
 294   2              }
 295   1      }
 296          unsigned char ReadDS1820(void)
 297          {
 298   1              unsigned char i,ch;
 299   1              ch=0;
 300   1              DataPortDS1820=1;
 301   1              Delay1us(1);
 302   1              for (i=0;i<8;i++)
 303   1              {
C51 COMPILER V8.05a   DISPLAY                                                              07/22/2007 11:27:38 PAGE 6   

 304   2                      EA=0;
 305   2                      DataPortDS1820=0;
 306   2                      Delay10us();
 307   2                      DataPortDS1820=1;
 308   2                      Delay1us(2);
 309   2                      ch=ch>>1;
 310   2                      if (DataPortDS1820==1)
 311   2                      {
 312   3                              ch=ch+0x80;
 313   3                      }
 314   2                      EA=1;
 315   2                      Delay15us();Delay15us();Delay15us();
 316   2              }       
 317   1              return ch;
 318   1      }
 319          void SkipROMCode(void)       //主机发跳过读序列号的操作命令:0xcc
 320          {
 321   1      //      RstDS1820();
 322   1              WriteDS1820(0xcc);
 323   1      }
 324          void StartADC(void)
 325          {
 326   1      //      RstDS1820();                    //复位
 327   1      //      WriteDS1820(0xcc);              //广播
 328   1              WriteDS1820(0x44);              //启动温度转换转换 12bit700ms
 329   1      }
 330          unsigned int GetTempValue(void)//读取温度值的程序
 331          {
 332   1              unsigned char i,j;        
 333   1              unsigned int T;
 334   1              
 335   1              RstDS1820();
 336   1              SkipROMCode();
 337   1              WriteDS1820(0xBE);  //发布读取温度值的命令(0xBE)
 338   1              i=ReadDS1820();
 339   1              j=ReadDS1820();
 340   1              StartADC();
 341   1              T=i+j*256;
 342   1              if (T==0xffff) return 0xffff;
 343   1              if (T>0x8000)                      //温度为负号
 344   1              {
 345   2                      T=-T;
 346   2                      return(0x8000+T*5/8);          //计算温度值
 347   2              }
 348   1              else                               //温度为正号
 349   1                      return(T*5/8);
 350   1      }
 351          void sleep_ms(unsigned int count)      //延时
 352          {
 353   1              unsigned char ii,jj;
 354   1              for(ii=0;ii<count;ii++)
 355   1              {
 356   2                      for(jj=0;jj<250;jj++)
 357   2                      _nop_();
 358   2              }
 359   1      }
 360          /*void Init18b20(void)
 361          {
 362                  SkipROMCode();                        //主机发跳过读序列号的操作命令:0xcc
 363                  WriteDS1820(0x44);                    //启动温度转换
 364          } */
 365          //=================================================================================
C51 COMPILER V8.05a   DISPLAY                                                              07/22/2007 11:27:38 PAGE 7   

 366          void oxy(void)
 367          {               unsigned char temp;
 368   1              unsigned int w;
 369   1              RstDS1820();
 370   1                      SkipROMCode();
 371   1                      StartADC();  
 372   1                      Delay1s(1);
 373   1                      InitLCD();        //清屏
 374   1                  w = GetTempValue();            //读出温度值的原始数据存入W
 375   1                      Delay1s(1);
 376   1                      LCD_WriteHZ(0,0,wen);
 377   1                      LCD_WriteHZ(16,0,du);
 378   1                      temp = (w%1000)/100;  
 379   1                      LCD_WriteSZ(32,0,shuzi[temp]);
 380   1                      temp = (w%100)/10; 
 381   1                      LCD_WriteSZ(40,0,shuzi[temp]);            //个位
 382   1                      temp = (w%10);
 383   1                      LCD_WriteSZ(48,0,shuzi[temp]);                 //小数位 
 384   1      } 
 385          //===============================================================================
 386          void presskey() interrupt  0 using 0
 387          {
 388   1       
 389   1       EA=0;
 390   1       if(button1==0)
 391   1      {
 392   2       Delay1ms(100);
 393   2          if(button1==0)
 394   2              oxy();
 395   2      }
 396   1      if(button2==0)
 397   1       {
 398   2       Delay1ms(100);
 399   2          if(button2==0)
 400   2              oxy();
 401   2      }
 402   1      if(button3==0)
 403   1       {
 404   2       Delay1ms(100);
 405   2          if(button3==0)
 406   2              oxy();
 407   2      }
 408   1      if(button4==0)
 409   1       {
 410   2       Delay1ms(100);
 411   2          if(button4==0)
 412   2              oxy();
 413   2      }
 414   1       EA=1;
 415   1      }
 416          
 417          
 418          void main (void) 
 419          {   
 420   1         InitLCD();
 421   1         Delay1ms(1);
 422   1         EA=1;
 423   1         EX0=1;
 424   1         while(1)
 425   1              {                        
 426   2              }
 427   1      
C51 COMPILER V8.05a   DISPLAY                                                              07/22/2007 11:27:38 PAGE 8   

 428   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1172    ----
   CONSTANT SIZE    =    288    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      16
   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 + -