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

📄 cortrol.lst

📁 在外部环境中检测亮度
💻 LST
📖 第 1 页 / 共 4 页
字号:
 741   5                                      }
 742   4                               }       
 743   3                                      
 744   3                                      
 745   3                         else if(i==1)
 746   3                                      {
 747   4                                              if(TH_flag==TEMP)
 748   4                                              { 
 749   5                                                      H_Temp_set=(KD1*10+KD2)*DDC;
 750   5                                                              return;
 751   5                                              }
 752   4                                              if(TH_flag==HUMI)
 753   4                                              {  
 754   5                                                      H_Hum_set=(KD1*10+KD2)*DDC;
 755   5                                                              return;
 756   5                                              }
 757   4                                      }
 758   3                              }
 759   2                 else if(keydata>=0&&keydata<=9)
 760   2                              {   if(DDC==-1)
 761   3                                    {error_bell(); 
 762   4                                         return;
 763   4                                         }
 764   3                                      Display_set(((KD1*100+KD2*10+keydata)*DDC),i);
 765   3                              //      F++;
 766   3                                      KD3=keydata;
 767   3                                      keyboard_flag=1;
 768   3                              //      KeyNumber=0xff;
 769   3                              }
 770   2                 else if(kb_data==0x0E)                                   //按下"返回"键
 771   2                return;
 772   2                 else 
 773   2                    {error_bell();
 774   3                         return;
 775   3                         }
 776   2             keyboard_flag=1;
 777   2             while(keyboard_flag==1);
 778   2             if(kb_data==0x0F)                                       //有“百”位数据时按下"确定"键
 779   2                {if(i==0)
 780   3                           {if(TH_flag==TEMP)
 781   4                                  { L_Temp_set=(KD1*100+KD2*10+KD3)*DDC;
 782   5                                        keydata=0xff;
 783   5                       // KeyNumber=0xff;
 784   5                        continue;
 785   5                                       }
 786   4                                }
C51 COMPILER V7.20   CORTROL                                                               08/25/2008 11:28:19 PAGE 14  

 787   3                              else if(i==1)
 788   3                           {if(TH_flag==TEMP)
 789   4                                  { H_Temp_set=(KD1*100+KD2*10+KD3)*DDC;
 790   5                        return;
 791   5                                       }
 792   4                                if(TH_flag==HUMI)
 793   4                                  {  H_Hum_set=(KD1*100+KD2*10+KD3)*DDC;
 794   5                        return;
 795   5                                       }
 796   4                                }
 797   3                              }
 798   2                 else if(kb_data==0x0E)                                   //按下"返回"键
 799   2                return;
 800   2                 else 
 801   2                    {error_bell();                                        //蜂鸣器报错误信号
 802   3                         return;
 803   3                         }
 804   2               }                
 805   1            
 806   1        }              
 807          //=================================================================================
 808          
 809          //****************************键值转换函数******************************************
 810          //*****函数名称:key_switch                         **********
 811          //*****函数功能:把实际键值转换成键盘上标识的键值   **********
 812          //**********************************************************************************
 813          uchar key_switch(unsigned char key_d)
 814           {unsigned char  key_cost;
 815   1        switch(key_d)
 816   1        {case 0: key_cost=7;break;
 817   2         case 1: key_cost=8;break;
 818   2         case 2: key_cost=9;break;
 819   2         case 3: key_cost=0x10;break;
 820   2         case 4: key_cost=4;break;
 821   2         case 5: key_cost=5;break;
 822   2         case 6: key_cost=6;break;
 823   2         case 7: key_cost=0x11;break;
 824   2         case 8: key_cost=1;break;
 825   2         case 9: key_cost=2;break;
 826   2         case 0X0A: key_cost=3;break;
 827   2         case 0X0B: key_cost=0X12;break;
 828   2         case 0X0C: key_cost=0X00;break;
 829   2         case 0X0D: key_cost=0X0D;break;
 830   2         case 0X0E: key_cost=0X0E;break;
 831   2         case 0X0F: key_cost=0X0F;break;
 832   2         default: break;
 833   2        }
 834   1        return key_cost;
 835   1       }
 836          
 837          //========================================================================================================
             -=====//
 838          //***************************************************************************************************
 839          //******************************读温湿度数据*******************************************
 840          //****函数功能:调用I2C读写函数计算出温湿度值                          ****************
 841          //****入口参数:TEMP,HUMI,温度标志,湿度标志                          ****************
 842          //****出口参数:TH_value,测量温度值,测量的湿度值                     ****************
 843          //***************************************************************************************************
 844          signed int measure(unsigned char mode)
 845           {  unsigned int TH_H,TH_L,sum;
 846   1              unsigned int i;
 847   1              signed int TH_value,rh_lin;
C51 COMPILER V7.20   CORTROL                                                               08/25/2008 11:28:19 PAGE 15  

 848   1              const float xdata T1=+0.01f;              // for 14 Bit @ 5V
 849   1          const float xdata T2=+0.00008f;           // for 14 Bit @ 5V    
 850   1          float xdata t_C;                          // t_C   : 温度 
 851   1      
 852   1              s_transstart();                                     //传输开始
 853   1              switch(mode)
 854   1               {case TEMP: error+=s_write_byte(MEASURE_TEMP);     //发送测温度命令    
 855   2                           break;
 856   2                case HUMI: error+=s_write_byte(MEASURE_HUM1);     //发送测湿度命令    
 857   2                               break;
 858   2                default:   break;
 859   2               }
 860   1       
 861   1        for(i=0;i<65535;i++)                                  //等待温湿度值准备      
 862   1         {if(TH_DATA==0)
 863   2                break;
 864   2          }
 865   1            
 866   1        if(TH_DATA)
 867   1          error=error+1;
 868   1        TH_H=s_read_byte(noACK);                              //读温湿度值高位    
 869   1        TH_L=s_read_byte(ACK);                                //读温湿度值低位  
 870   1        TH_H=TH_H<<8; 
 871   1        sum=TH_H+TH_L;
 872   1         t_C=sum*0.01 - 40;
 873   1        if(mode)
 874   1          {rh_lin=((-4)+(0.0405*sum)+(sum*sum*(-2.8E-6)));    //计算湿度值   
 875   2           TH_value=(t_C-25)*(T1+T2*sum)+rh_lin;              //计算温度湿度 [%RH]   
 876   2           if(TH_value>100)TH_value=100;                      //湿度范围:0.1-100之间   
 877   2               }
 878   1        else
 879   1          TH_value=(-40)+(0.01*sum);                          //计算温度值    
 880   1       
 881   1        return TH_value;      
 882   1       // LED=0;      
 883   1      }
 884          
 885          //============================================================================
 886          
 887            void s_transstart()                     //SHT11I2C启动  
 888            {
 889   1         TH_DATA=1; TH_SCK=0;                
 890   1         delay(1);
 891   1         TH_SCK=1; 
 892   1         delay(1);
 893   1         TH_DATA=0;
 894   1         delay(1);
 895   1         TH_SCK=0; 
 896   1         delay(1);
 897   1         TH_SCK=1;
 898   1         delay(1);
 899   1         TH_DATA=1;           
 900   1         delay(1);
 901   1         TH_SCK=0;  
 902   1        }
 903           
 904          //============================================================================
 905          
 906          char s_write_byte(unsigned char value)// 写字节 检查ack应答 
 907          { 
 908   1      unsigned char xdata i,error=0; 
 909   1      for (i=0x80;i>0;i/=2)                  //shift bit for masking
C51 COMPILER V7.20   CORTROL                                                               08/25/2008 11:28:19 PAGE 16  

 910   1      { if (i & value) TH_DATA=1;            //masking value with i , write to SENSI-BUS
 911   2          else TH_DATA=0; 
 912   2          TH_SCK=1;                          //clk for SENSI-BUS
 913   2          TH_SCK=1;
 914   2          TH_SCK=0;
 915   2      }
 916   1      TH_DATA=1;//disp();                         //release DAT-line
 917   1      TH_SCK=1; //disp();                          //clk #9 for ack 
 918   1      error=TH_DATA; //disp();                     //check ack (DAT will be pulled down by SHT11)
 919   1      TH_SCK=0;        
 920   1      return error;                     //error=1 in case of no acknowledge
 921   1      }
 922          
 923          //======================================================================= 
 924          
 925           unsigned char s_read_byte(uchar ack)    // 读字节 检查ack应答(if ack=1) 
 926          { 
 927   1      uchar xdata i,val=0;
 928   1      TH_DATA=1;                               //release DAT-line
 929   1      for (i=0x80;i>0;i/=2)                    //shift bit for masking
 930   1      { TH_SCK=1;                              //clk for SENSI-BUS
 931   2          if (TH_DATA) val=(val | i);          //read bit 
 932   2          //disp();
 933   2          TH_SCK=0;                     
 934   2      }
 935   1      TH_DATA=!ack;                            //in case of "ack==1" pull down DAT-Line
 936   1      TH_SCK=1; //disp();                           //clk #9 for ack
 937   1      //disp();                                //pulswith approx. 5 us 
 938   1      TH_SCK=0;//disp();                            
 939   1      TH_DATA=1;                               //release DAT-line
 940   1      return val;
 941   1      }
 942          //=========================================================================================
 943          //=============================延时函数========================================  
 944          void delay1(unsigned char d1)
 945          { 
 946   1        uchar j,k;
 947   1        for(;d1>0;d1--)
 948   1         {for(j=50;j>0;j--)
 949   2           {for(k=0;k>0;k--);
 950   3               }
 951   2              }
 952   1      
 953   1      }
 954          void delay(unsigned int i)
 955          { 
 956   1       for(;i>0;i--)
 957   1               ;
 958   1      }
 959          
 960          //*************************************蜂鸣器函数*******************************
 961          void bell(void)
 962           {BELL=0;
 963   1        delay(0x8fff);
 964   1        BELL=1;
 965   1       }
 966          void error_bell(void)
 967           { char  k;
 968   1         for(k=4;k>0;k--)
 969   1              {bell();
 970   2              delay(0x9fff);
 971   2               }
C51 COMPILER V7.20   CORTROL                                                               08/25/2008 11:28:19 PAGE 17  

 972   1        }
 973          //*****************************************************************************
 974          
 975          
 976            


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   3473    ----
   CONSTANT SIZE    =     50    ----
   XDATA SIZE       =      7      21
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     53      34
   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 + -