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

📄 hongwai.lst

📁 通过红外对管实现无线通信
💻 LST
📖 第 1 页 / 共 2 页
字号:
 211   1       DS18B20_init();       
 212   1       DS18B20_send (0xcc);
 213   1       DS18B20_send (0xbe);             //读取温度寄存器
 214   1       a=DS18B20_read();                     //读取低位
 215   1       b=DS18B20_read();                        //读取高位
 216   1       //k=b&0X08;
 217   1       //if(k==0x08)  T_sign=1;          //温度是负数
 218   1       //else T_sign=0;
 219   1      
 220   1              if(b>0x7f)
 221   1              {                                                   
 222   2                      a=~a;b=~b+1;              //补码转换,取反加一
 223   2                      T_sign=1;                //温度为负时flag=0
 224   2                       
 225   2              }
 226   1              sdata=a/16+b*16;
 227   1              t_bai=sdata/100;
 228   1              t_shi=sdata/10;
 229   1              t_ge=sdata%10;
 230   1              t_feng=(a&0x0f)*10/16;
 231   1              t_miao=(a&0x0f)*100/16%10;
 232   1       
 233   1      } 
 234          
 235          
 236          /**********************************************************************************************
 237          函数名称:延时函数
 238          函数功能:转换延时和显示延时
 239          说明:LCM1602_Delay()是液晶显示延时,delay()是温度转换延时
 240          **********************************************************************************************/
 241          void delay(unsigned int delay_time) // 延时程序
C51 COMPILER V8.02   HONGWAI                                                               07/31/2008 01:16:42 PAGE 5   

 242          {
 243   1       while(delay_time--);
 244   1      }
 245          
 246          void LCM1602_Delay(uchar count)
 247          {
 248   1              uchar i;
 249   1              while(--count!=0)
 250   1                 {for(i=0;i<250;i++);}        
 251   1      }
 252          
 253          /**********************************************************************************************
 254          函数名称:初始化函数
 255          函数功能:对DS18B20进行初始化
 256          说明:
 257          **********************************************************************************************/
 258          void DS18B20_init()  //初始化DS18B20
 259          {
 260   1      unsigned char i=0;
 261   1      DQ=1;
 262   1      delay(8);
 263   1      DQ=0;
 264   1      delay(85);       //精确延时484 us
 265   1      DQ=1;
 266   1      delay(14);        //精确延时34us
 267   1      i=DQ;
 268   1      delay(20);
 269   1                                       
 270   1      }
 271          
 272          /**********************************************************************************************
 273          函数名称:写函数
 274          函数功能:向DS18B20写命令
 275          说明:
 276          **********************************************************************************************/
 277          void DS18B20_send(unsigned char out_data) //主机发送一字节到DS18B20
 278          {
 279   1       unsigned char i=0;
 280   1       
 281   1       for(i=8;i>0;i--)
 282   1         {
 283   2          DQ=0;
 284   2              DQ=out_data&0x01;                     //数据从低位送出
 285   2              delay(5);                            //精确延时61us
 286   2              DQ=1;
 287   2              out_data>>=1;
 288   2         }
 289   1        delay(4);
 290   1      }
 291          
 292          /**********************************************************************************************
 293          函数名称:读函数
 294          函数功能:从DS18B20读取数据
 295          说明:
 296          **********************************************************************************************/
 297          uchar DS18B20_read(void)//主机从DS18B20中读取一字节
 298          {
 299   1       unsigned char i,in_data;
 300   1       in_data=0;
 301   1       for(i=8;i>0;i--)
 302   1          {
 303   2               DQ=1;
C51 COMPILER V8.02   HONGWAI                                                               07/31/2008 01:16:42 PAGE 6   

 304   2               delay(1);
 305   2               DQ=0;            //给脉冲信号
 306   2               in_data>>=1;
 307   2               DQ=1;           //给脉冲信号
 308   2               if(DQ) 
 309   2                 in_data|=0x80;
 310   2               delay(4);
 311   2              }
 312   1       return(in_data);
 313   1      }
 314          
 315          
 316          /**********************************************************************************************
 317          函数名称:初始化函数
 318          函数功能:液晶1602初始化
 319          说明:
 320          **********************************************************************************************/
 321          void  LCM1602_Init(void)
 322          {
 323   1       void LCM1602_WriteData(uchar LCM1602_data);
 324   1       void LCM1602_WriteCMD(uchar LCM1602_command);
 325   1       LCM1602_WriteCMD(0x38);    //显示两行,每个字符为5*7个像素
 326   1       delay(1);
 327   1       LCM1602_WriteCMD(0x06);    //光标移动设置,光标右移
 328   1       delay(1);
 329   1       LCM1602_WriteCMD(0x0c);    //现设开,光标开,闪烁开
 330   1       delay(1);
 331   1       LCM1602_WriteCMD(0x01);    //清屏
 332   1       delay(1);
 333   1      }
 334          void  print(uchar a,uchar *str)
 335          {
 336   1       void  LCM1602_WriteData(uchar LCM1602_data);
 337   1       void  LCM1602_WriteCMD(uchar LCM1602_command);
 338   1       LCM1602_WriteCMD(a);
 339   1       while(*str!='\0')
 340   1          {
 341   2          LCM1602_WriteData(*str++);
 342   2              }
 343   1       *str=0;
 344   1      }
 345          void print1(uchar a,uchar t)
 346          {
 347   1       LCM1602_WriteCMD(a);
 348   1       LCM1602_WriteData(t);
 349   1      }
 350          
 351          
 352          
 353          /**********************************************************************************************
 354          函数名称:写命令和写数据函数
 355          函数功能:向LCD写命令和数据
 356          说明:LCM1602_WriteCMD是写命令函数,void LCM1602_WriteData是写数据函数
 357          **********************************************************************************************/
 358          void LCM1602_WriteCMD(uchar LCM1602_command)
 359          {
 360   1      BOOL lcd_bz();
 361   1      while(lcd_bz());        //测忙
 362   1      L1602_RS=0;
 363   1      L1602_RW=0;
 364   1      L1602_E=0;
 365   1      _nop_();
C51 COMPILER V8.02   HONGWAI                                                               07/31/2008 01:16:42 PAGE 7   

 366   1      _nop_();
 367   1      L1602_DB0_DB7=LCM1602_command;
 368   1      _nop_();
 369   1      _nop_();_nop_();
 370   1      L1602_E=1;    //命令总送出
 371   1      _nop_();_nop_();_nop_();
 372   1      L1602_E=0; 
 373   1      }
 374          
 375          void LCM1602_WriteData(uchar LCM1602_data)
 376          {
 377   1      BOOL lcd_bz();
 378   1      while(lcd_bz());        //测忙
 379   1      L1602_RS=1;
 380   1      L1602_RW=0;
 381   1      L1602_E=0;
 382   1      L1602_DB0_DB7=LCM1602_data;
 383   1      _nop_();
 384   1      _nop_();
 385   1      _nop_();
 386   1      _nop_();
 387   1      L1602_E=1;   //数据送出
 388   1      _nop_();
 389   1      _nop_();
 390   1      _nop_();
 391   1      L1602_E=0;
 392   1      }
 393          
 394          
 395          /**********************************************************************************************
 396          函数名称:LCD检测忙函数
 397          函数功能:检测LCD是否处于忙状态
 398          说明: 
 399          **********************************************************************************************/
 400          BOOL lcd_bz()
 401          {                                                       // 测试LCD忙碌状态
 402   1              BOOL result;
 403   1              L1602_RS=0;
 404   1          L1602_RW=1;
 405   1          L1602_E=1;
 406   1              _nop_();
 407   1              _nop_();
 408   1              _nop_();
 409   1              _nop_();
 410   1              result = (BOOL)(P0 & 0x80);
 411   1              L1602_E = 0;
 412   1              return result;  
 413   1      }
 414          /**********************************************************************************************/ 


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    709    ----
   CONSTANT SIZE    =     31    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20       9
   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 + -