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

📄 shtxx_sample_code.lst

📁 这是单片机驱动温湿度传感器SHT11温湿度传感器的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
 306   1              i = ISendStr_8(0xd0,0x04,dt);
 307   1              lcd_wrd(0x30+(uchar)i);
 308   1              mn = ((mn/10)<<4)+(mn%10);
 309   1              i = ISendStr_8(0xd0,0x05,mn);
 310   1              lcd_wrd(0x30+(uchar)i);
 311   1              yr = ((yr/10)<<4)+(yr%10);
 312   1              i = ISendStr_8(0xd0,0x06,yr);
 313   1              lcd_wrd(0x30+(uchar)i);
 314   1      }
 315          
 316          
 317          void ad_en(void)
 318          {
 319   1      
 320   1              e = 0;  //lcd not enable
 321   1              le = 0; //three-states latched
 322   1              ce = 0; //ad enable
 323   1      
 324   1      }
 325          void lcd_en(void)
 326          {
 327   1              ce = 1; //ad not enable
 328   1              le = 0; //three-states latched
 329   1              e = 1;  //lcd enable
 330   1      }
 331          
 332          void three_en(void)
 333          {
 334   1              ce = 1; //ad not enable
 335   1              e = 0;  //lcd not enable
 336   1              le = 1; //tree-states open
 337   1      }
 338          
 339          
 340          void lcd_ini()
 341          {
 342   1              delay(100);
 343   1              lcd_wrc(0x34);
 344   1              delay(10);
 345   1              lcd_wrc(0x30);
 346   1              delay(10);
 347   1              lcd_wrc(0x01);
 348   1              delay(10);
 349   1              lcd_wrc(0x06);
 350   1              delay(10);
 351   1              lcd_wrc(0x0c);
 352   1              delay(200);
 353   1      }       
 354          void lcd_wrc(uchar com)
 355          {
 356   1              lcd_en();
 357   1              lcd_checkbusy();
 358   1              rs = 0;
 359   1              rw = 0;
 360   1              P0 = com;
 361   1              e = 1;
 362   1              delay(10);
 363   1              e = 0;
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 7   

 364   1      }
 365          
 366          void lcd_wrd(uchar dat)
 367          {
 368   1      //      checkbusy();
 369   1              lcd_en();
 370   1              lcd_checkbusy();
 371   1              rs = 1;
 372   1              rw = 0;
 373   1              P0 = dat;
 374   1              e = 1;
 375   1              delay(5);
 376   1              e = 0;
 377   1      }
 378          void lcd_checkbusy()
 379          {
 380   1              
 381   1              uchar busy = 0;
 382   1              lcd_en();
 383   1              P0 = 0XFF;
 384   1              busy = P0;
 385   1              if(busy>0x7f)
 386   1              {
 387   2                      rs = 0;
 388   2                      rw = 1;
 389   2                      e = 1;
 390   2                      busy = P0;
 391   2                      e = 0;
 392   2                      delay(10);
 393   2              }
 394   1      }
 395          uchar lcd_rdd();
 396          void delay(uchar n)
 397          {
 398   1              while(n--);
 399   1      }
 400          
 401          void ldelay(uchar n)
 402          {
 403   1              uchar a=250;
 404   1              while(a--)
 405   1              {
 406   2              while(n--);
 407   2              }
 408   1      }
 409          
 410          
 411          void lcd_on()
 412          {
 413   1              lcd_deng = 0;
 414   1      }
 415          void lcd_off()
 416          {
 417   1              lcd_deng = 1;
 418   1      }
 419          uchar lcd_read_ac()
 420          {
 421   1              uchar dat = 0;
 422   1              lcd_en();
 423   1      //      P0 = 0X00;
 424   1              e = 1;
 425   1              rs = 0;
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 8   

 426   1              rw = 1;
 427   1      //      e = 1;
 428   1              delay(10);
 429   1              dat = P0;
 430   1      //      delay(10);
 431   1      //      e = 0;
 432   1              return(dat&0x7f);
 433   1      }
 434          void lcd_dis_num(uint dat)
 435          {
 436   1          uint a=0;
 437   1          dat =dat%10000;
 438   1          a =dat/1000;
 439   1          lcd_wrd(0x30+a);
 440   1          dat =dat%1000;
 441   1          a =dat/100;
 442   1          lcd_wrd(0x30+a);
 443   1          dat =dat%100;
 444   1          a=dat/10;
 445   1          lcd_wrd(0x30+a);
 446   1          dat =dat%10;
 447   1          lcd_wrd(0x30+dat);
 448   1      }
 449          void lcd_dis_ch(uchar h,uchar l)
 450          {
 451   1          lcd_wrd(h);
 452   1          lcd_wrd(l);
 453   1      }
 454          
 455          void lcd_add(uchar h,uchar l)       //定位地址
 456          {
 457   1        l--;
 458   1        switch(h)
 459   1        {
 460   2          case 1:
 461   2          {
 462   3            lcd_wrc(0x80+l);
 463   3            break;
 464   3          }
 465   2          case 2:
 466   2          {
 467   3            lcd_wrc(0x90+l);
 468   3            break;
 469   3          }
 470   2          case 3:
 471   2          {
 472   3            lcd_wrc(0x88+l);
 473   3            break;
 474   3          }
 475   2          case 4:
 476   2          {
 477   3            lcd_wrc(0x98+l);
 478   3            break;
 479   3          }
 480   2        }
 481   1      }
 482          
 483          
 484          
 485          unsigned char key_data()      //判断键值
 486          {
 487   1              uchar a=0,b=0,c=0,d=0,i=0;
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 9   

 488   1              a = 0xef;
 489   1              for(i = 0;i<4;i++)      //读行
 490   1              {
 491   2                  P1 = a;
 492   2                      delay(10);
 493   2                  b = P1;
 494   2                      b = b&0x0f;
 495   2      //      b = b>>4;
 496   2                  if(b!=0x0F)   //表示有键按下
 497   2              {
 498   3                              delay(200);   //软件延时   确认有键按下
 499   3                              b = P1&0X0F;
 500   3      //              b = b>>4;
 501   3                      if(b != 0x0F)
 502   3                      {  
 503   4      //                      return b;
 504   4      
 505   4                                      c=b;
 506   4                              if(c==0X07)
 507   4                              {
 508   5                                      d=i*4+3;
 509   5                              }
 510   4                              else if(c==0X0B)
 511   4                              {
 512   5                                      d=i*4+2;
 513   5                              }
 514   4                              else if(c==0X0D)
 515   4                              {
 516   5                                      d=i*4+1;
 517   5                              }
 518   4                              else if(c==0X0E)
 519   4                              {
 520   5                                      d=i*4;
 521   5                              }
 522   4                                  break;
 523   4                              }
 524   3                      }
 525   2              else
 526   2                  {
 527   3                      a = a<<1;
 528   3                              a = a+0x01;
 529   3                      if(a==0xFF)
 530   3                      {
 531   4      //                      return 0x0f;
 532   4                                      d = 0x0f+1;
 533   4                                      break;
 534   4                      }
 535   3              }
 536   2              }
 537   1              return d;
 538   1      }
 539          
 540          
 541          
 542          void Start_I2c()                //起动总线函数
 543          {
 544   1              SDA=1;   //发送起始条件的数据信号
 545   1              _Nop();
 546   1              SCL=1;
 547   1              _Nop();    //起始条件建立时间大于4.7us,延时
 548   1              _Nop();
 549   1              _Nop();
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 10  

 550   1              _Nop();
 551   1              _Nop();    
 552   1              SDA=0;   //发送起始信号
 553   1              _Nop();    // 起始条件锁定时间大于4
 554   1              _Nop();
 555   1              _Nop();
 556   1              _Nop();
 557   1              _Nop();       
 558   1              SCL=0;   //钳住I2C总线,准备发送或接收数据 
 559   1              _Nop();
 560   1              _Nop();
 561   1      }
 562          
 563          void Stop_I2c()         //结束总线函数
 564          {
 565   1              SDA=0;  /*发送结束条件的数据信号*/
 566   1              _Nop();   /*发送结束条件的时钟信号*/
 567   1              SCL=1;  /*结束条件建立时间大于4*/
 568   1              _Nop();
 569   1              _Nop();
 570   1              _Nop();
 571   1              _Nop();
 572   1              _Nop();
 573   1              SDA=1;  /*发送I2C总线结束信号*/
 574   1              _Nop();
 575   1              _Nop();
 576   1              _Nop();
 577   1              _Nop();
 578   1      }
 579          
 580          
 581          
 582          void  SendByte(uchar c)         //字节数据传送函数send
 583          {
 584   1              uchar BitCnt;
 585   1              for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
 586   1          {
 587   2              if((c<<BitCnt)&0x80)SDA=1;   /*判断发送位*/
 588   2              else  SDA=0;                
 589   2              _Nop();
 590   2              SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
 591   2              _Nop(); 
 592   2              _Nop();               /*保证时钟高电平周期大于4*/
 593   2              _Nop();
 594   2              _Nop();
 595   2              _Nop();  
 596   2              SCL=0; 
 597   2          }
 598   1          _Nop();
 599   1          _Nop();
 600   1          SDA=1;               /*8位发送完后释放数据线,准备接收应答位*/
 601   1          _Nop();
 602   1          _Nop();   
 603   1          SCL=1;
 604   1          _Nop();
 605   1          _Nop();
 606   1          _Nop();
 607   1          if(SDA==1)ack=0;     
 608   1          else ack=1;        /*判断是否接收到应答信号*/
 609   1          SCL=0;
 610   1          _Nop();
 611   1          _Nop();
C51 COMPILER V7.07   SHTXX_SAMPLE_CODE                                                     04/04/2007 18:18:08 PAGE 11  

 612   1      }
 613          
 614          
 615          uchar  RcvByte()                //字节数据传送函数 receive
 616          {
 617   1              uchar retc;
 618   1              uchar BitCnt;
 619   1          retc=0; 
 620   1              SDA=1;             /*置数据线为输入方式*/
 621   1              for(BitCnt=0;BitCnt<8;BitCnt++)

⌨️ 快捷键说明

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