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

📄 fre89s51.lst

📁 基于AT89S51单片机和HS1101做的相对湿度检测。需要的可以下载参考。
💻 LST
字号:
C51 COMPILER V7.20   FRE89S51                                                              01/12/2008 19:38:34 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE FRE89S51
OBJECT MODULE PLACED IN fre89s51.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE fre89s51.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg51.h>
   2          #define u_int  unsigned int
   3          #define u_char unsigned char
   4          /* 函数声明 */
   5          void time0_over_int(void); /* 定时器0中断服务程序 ,使用第1组寄存器  */
   6          void ext1_int_proc(void);  /* 外部中断1中断服务程序,使用第2组寄存器 */
   7          void system_init(void);    /* 系统上电初始化 */
   8          /* 声明结束 */
   9          #define Disdata P1
  10          #define discan  P0
  11          sbit DIN=P1^5;
  12          u_char code dis_8[11]={
  13              0xa0,               // 0
  14                  0xbb,           // 1
  15                  0x62,           // 2
  16                  0x2a,           // 3
  17                  0x39,           // 4
  18                  0x2c,           // 5
  19                  0x24,           // 6
  20                  0xba,           // 7
  21                  0x20,           // 8
  22                  0x28,           // 9
  23                  0xFF,   //"灭"
  24                                             };/*0~9的数码管段码*/
  25          /***********us延时函数*******************/
  26          //u_char code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x80,0x08,0x09,0x09};
  27          u_char code scan_con[4]={0xfe,0xfd,0xfb,0xf7};
  28          //u_char data wet_data[1]={0x00};
  29          //u_char data display[4]={0x00,0x00,0x00,0x00};//显示单元数据,共4个数据,一个运算暂存用
  30          u_char  display[4]={0x00,0x00,0x00,0x00};
  31          u_int fhz_tlc555;    /* tlc555输出频率 */
  32          u_char timer_count;  /* 定时计数       */
  33          bit timer_int;       /* 定时标志       */
  34          float hum_const;     /* 计算湿度的常数 */
  35          float real_hum=0.0;
  36          /* 定时器0中断服务程序 ,使用第1组寄存器 */
  37          void time0_over_int(void) interrupt 1 using 1
  38          {
  39   1           TF0=0;
  40   1           timer_count++;
  41   1           TH0=0x3c;
  42   1               TL0=0xb0;
  43   1               
  44   1      }
  45          /* 外部中断1中断服务程序,使用第2组寄存器 */
  46          void ext1_int_proc(void) interrupt 2 using 2
  47          {
  48   1          fhz_tlc555++;
  49   1      }
  50          /* 系统上电初始化 */
  51          void system_init(void)
  52          {
  53   1          EA = 0;
  54   1          timer_int = 0;
  55   1          timer_count = 0;
C51 COMPILER V7.20   FRE89S51                                                              01/12/2008 19:38:34 PAGE 2   

  56   1          TMOD = 0x01;           /*定时器0工作于方式1*/
  57   1          TCON = 0x04;           /*外部中断下降沿触发*/
  58   1              TH0=0x3c;              /*定时50毫秒*/
  59   1              TL0=0xb0;
  60   1          PT0 = 1;               /*定时器0高优先级*/
  61   1          TR0 = 1;               /*定时器0启动计数*/
  62   1          IE = 0x86;             /*定时器0,外部中断1,CPU开中断*/
  63   1      }
  64          /* 计算当前湿度 */
  65          float get_humidity(u_int fhz) /* 输入fhz为tlc555的频率计数 */
  66          {
  67   1          float humidity = 0;
  68   1          
  69   1          if ( (fhz > 7400) || (fhz < 6000) )
  70   1          {
  71   2              return 0;
  72   2          }
  73   1          else if (fhz >= 7000)
  74   1          {
  75   2              hum_const = 5143.7;
  76   2          }
  77   1          else if ( (fhz >= 6700) && (fhz < 7000) )
  78   1          {
  79   2              hum_const = 5183.7;
  80   2          }
  81   1          else if(fhz < 6700)
  82   1          {
  83   2              hum_const = 5203.7;
  84   2          }
  85   1          //humidity = (u_int)( (hum_const - 0.702*(fhz - 40)) / 10);
  86   1              humidity = (hum_const - 0.702*(fhz - 40)) / 10.0;
  87   1              humidity =humidity+0.9;
  88   1              if(humidity>100.0||humidity<0.0)
  89   1               {
  90   2               return humidity=0;
  91   2               }
  92   1                else
  93   1          return (humidity);//
  94   1      }
  95          void delay(u_int t)
  96          {
  97   1              for(;t>0;t--);
  98   1      }
  99          
 100          /*显示扫描***********************/
 101          void scan()
 102          {
 103   1              char k;
 104   1              for(k=0;k<4;k++)
 105   1                      {
 106   2                              Disdata=dis_8[display[k]];
 107   2                              if(k==1)
 108   2                                      {
 109   3                                              DIN=0;
 110   3                                      }
 111   2                                      discan=scan_con[k];
 112   2                                 delay(90);
 113   2                                      //delay(40);
 114   2                                      discan=0xff;
 115   2                      }
 116   1      }
 117          
C51 COMPILER V7.20   FRE89S51                                                              01/12/2008 19:38:34 PAGE 3   

 118          /***************湿度数据处理函数*************/
 119          wetdata_process()
 120          {       
 121   1          display[3]=real_hum/100;
 122   1              display[2]=((real_hum-display[3]*100)/10);
 123   1              display[1]=(real_hum-display[3]*100-display[2]*10);
 124   1          display[0]=(int)((real_hum-(int)real_hum)*10);
 125   1      //      display[0]=(real_hum-display[3]*100-display[2]*10-display[1])*10;
 126   1              if(!display[3])
 127   1              {
 128   2                      display[3]=0x0a;
 129   2                      if(!display[2])
 130   2                              {
 131   3                                      display[2]=0x0a;
 132   3                              }
 133   2              }       
 134   1              
 135   1      }
 136          main()
 137          {
 138   1         int h;
 139   1          system_init();
 140   1          while(1)
 141   1          {
 142   2                 if (timer_count ==20)  /* 1秒定时到 100*/
 143   2                 {                       
 144   3                     timer_count = 0;                    
 145   3                     fhz_tlc555 -=2;                     
 146   3                                 real_hum= get_humidity(fhz_tlc555);
 147   3                                 wetdata_process();
 148   3                                for(h=0;h<200;h++)
 149   3                                scan();
 150   3      
 151   3                     fhz_tlc555 = 0;
 152   3                                 system_init();
 153   3                  }
 154   2      
 155   2          }
 156   1      }
 157          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    664    ----
   CONSTANT SIZE    =     15    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15       4
   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 + -