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

📄 measure_capacity.lst

📁 基于51的单片机设计的电容计的完整源代码
💻 LST
字号:
C51 COMPILER V7.06   MEASURE_CAPACITY                                                      03/02/2006 23:49:40 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MEASURE_CAPACITY
OBJECT MODULE PLACED IN measure_capacity.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE measure_capacity.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /******************************************************************
   2             本程序只供学习使用,未经作者许可,不得用于其它任何用途
   3                我的邮箱:computer-lov@tom.com
   4                  欢迎访问我的blog:  http://computer00.21ic.org
   5          
   6          measure_capacity.c文件 电容测量
   7          
   8          Created by Computer-lov
   9          Date: 2004.11.12
  10          
  11          Edit date:2006.3.2
  12          
  13          Version V1.1
  14          Copyright(C) Computer-lov 2004-2014
  15          All rigths reserved      
  16          *******************************************************************/
  17          
  18          
  19          #include "hardware.h"
  20          #include "measure_capacity.h"
  21          #include "main.h"
  22          #include "LCD1602.H"
  23          #include "system_initial.h"
  24          #include "isr.h"
  25          
  26          unsigned char capacity_scope=0,capacity_measure_end=0;
  27          
  28          void Start_measure(void)
  29          {
  30   1       unsigned char i;
  31   1       scope_select=SCOPE_STOP;
  32   1       delayXms(10);
  33   1       switch(capacity_scope)
  34   1        {
  35   2         case 1: i=SCOPE_1;break;
  36   2         case 2: i=SCOPE_2;break;
  37   2         case 3: i=SCOPE_3;break;
  38   2         case 4: i=SCOPE_4;break;
  39   2         case 5: i=SCOPE_5;break;
  40   2         default :capacity_scope=1;break;
  41   2        }
  42   1       capacity_measure_end=0;
  43   1       TVH0=0;
  44   1       TH0=0;
  45   1       TL0=0;
  46   1       scope_select=i;                 //开始测量
  47   1       TR0=1;
  48   1      }
  49          
  50          unsigned char Wait_for_end(void)
  51          {
  52   1       if(key)
  53   1        {
  54   2         if(key==KEY_MENU){scope_select=SCOPE_STOP;TR0=0;status=MAIN_MENU;Write_a_EEPROM_data(EEPROM_Addr,0x01,s
             -tatus);key=0;return 1;}
C51 COMPILER V7.06   MEASURE_CAPACITY                                                      03/02/2006 23:49:40 PAGE 2   

  55   2         if(settings_value.mode==MANUAL_MODE)
  56   2          {
  57   3           if(key==KEY_ENTER)Write_a_EEPROM_data(EEPROM_Addr,0x03,capacity_scope);
  58   3           if(key==KEY_UP){scope_select=SCOPE_STOP;TR0=0;if(capacity_scope<5){capacity_scope++;}key=0;return 2;}
  59   3           if(key==KEY_DOWN){scope_select=SCOPE_STOP;TR0=0;if(capacity_scope>1){capacity_scope--;}key=0;return 3
             -;}
  60   3          }
  61   2         key=0;
  62   2        }
  63   1       while(!capacity_measure_end)
  64   1        {
  65   2         if(key)
  66   2          {
  67   3           if(key==KEY_MENU){scope_select=SCOPE_STOP;TR0=0;status=MAIN_MENU;Write_a_EEPROM_data(EEPROM_Addr,0x01
             -,status);key=0;return 1;}
  68   3           if(settings_value.mode==MANUAL_MODE)
  69   3            {
  70   4             if(key==KEY_ENTER)Write_a_EEPROM_data(EEPROM_Addr,0x03,capacity_scope);
  71   4             if(key==KEY_UP){scope_select=SCOPE_STOP;TR0=0;if(capacity_scope<5)capacity_scope++;key=0;return 2;}
  72   4             if(key==KEY_DOWN){scope_select=SCOPE_STOP;TR0=0;if(capacity_scope>1)capacity_scope--;key=0;return 3
             -;}
  73   4            }
  74   3           key=0;
  75   3          }
  76   2         if(TVH0>31)
  77   2          {
  78   3           scope_select=SCOPE_STOP;
  79   3           TR0=0;
  80   3           if((capacity_scope>=5)||(settings_value.mode==MANUAL_MODE))
  81   3            {
  82   4             LCD_set_position(40);
  83   4             LCD_prints("    Overflow!   ");
  84   4             delayXms(500);
  85   4             return 4;
  86   4            }
  87   3           else
  88   3            {
  89   4             capacity_scope=5;
  90   4             return 5;
  91   4            }
  92   3          }
  93   2        }
  94   1       scope_select=SCOPE_STOP;       //停止
  95   1       return 0;
  96   1      }
  97          
  98          unsigned char Calculation()
  99          {
 100   1       unsigned char i;
 101   1       unsigned char buffer_temp[6];
 102   1       ((unsigned char *)&result)[0]=0;
 103   1       ((unsigned char *)&result)[1]=TVH0;
 104   1       ((unsigned char *)&result)[2]=TH0;
 105   1       ((unsigned char *)&result)[3]=TL0;
 106   1       switch(capacity_scope)
 107   1        {
 108   2         case 1: 
 109   2          {
 110   3           if(result>=settings_value.zero_offset[0])result=result-settings_value.zero_offset[0];
 111   3           else {result=result+2-settings_value.zero_offset[0];}
 112   3           result=(result+1)/2;
 113   3           if(result>=35000){result*=1.7;break;}
C51 COMPILER V7.06   MEASURE_CAPACITY                                                      03/02/2006 23:49:40 PAGE 3   

 114   3           if((result>=22000)&&(result<35000)){result*=1.55;break;}
 115   3           if((result>=13000)&&(result<22000)){result*=1.4;break;}
 116   3           if((result>=12000)&&(result<13000)){result*=1.475;break;}
 117   3           if((result>=11000)&&(result<12000)){result*=1.370;break;}
 118   3           if((result>=10000)&&(result<11000)){result*=1.275;break;}
 119   3           if((result>=8000)&&(result<9000)){result*=1.195;break;}
 120   3           if((result>=7500)&&(result<8000)){result*=1.135;break;}
 121   3           if((result>=7000)&&(result<7500)){result*=1.10;break;}
 122   3           if((result>=6000)&&(result<7000)){result*=1.08;break;}
 123   3           if((result>=4000)&&(result<6000)){result*=1.065;break;}
 124   3           if((result>=2000)&&(result<4000)){result*=1.058;break;}
 125   3           if((result>=1000)&&(result<2000)){result*=1.05;break;}
 126   3           if((result>=800)&&(result<1000)){result*=1.043;break;}   //修正,不同的电路板,可能要不同的值
 127   3           if(result<800)break; 
 128   3          }
 129   2         case 2: if(result>=settings_value.zero_offset[1])result=result-settings_value.zero_offset[1];
 130   2                 else result=result+1-settings_value.zero_offset[1];
 131   2                 result=(result+1)/2;
 132   2                 break;
 133   2         case 3: result=result-settings_value.zero_offset[2];result=(result+1)/2;break;
 134   2         case 4: result=result-settings_value.zero_offset[3];result=(result+1)/2;break;
 135   2         case 5: result=result-settings_value.zero_offset[4];result=(result+1)/2;break;
 136   2         default: result=0;break;
 137   2        }
 138   1       if(result&0xC0000000)
 139   1        {
 140   2         LCD_cls();
 141   2         LCD_prints("Zero point error");
 142   2         LCD_set_position(40);
 143   2         LCD_prints("Please re_adjust");
 144   2         delayXms(500);
 145   2      //   while(!key);
 146   2         return 0xff;
 147   2        }
 148   1       if(result>999999)
 149   1        {
 150   2         if((capacity_scope==5)||(settings_value.mode==MANUAL_MODE))
 151   2          {
 152   3           LCD_set_position(40);
 153   3           LCD_prints("    Overflow!   ");
 154   3           delayXms(500);
 155   3           return 1;
 156   3          }
 157   2        }
 158   1       if(settings_value.mode==AUTO_MODE)
 159   1        {
 160   2         if((result>1500)&&(capacity_scope<5)){capacity_scope++;return 2;}
 161   2         if((result<100)&&(capacity_scope>1)){capacity_scope--;return 2;}
 162   2        }
 163   1       for(i=6;i>0;i--)
 164   1        {
 165   2         buffer_temp[i-1]=(result%10)+'0';
 166   2         result/=10;
 167   2        }
 168   1       buffer[0]=' ';
 169   1       buffer[1]=' ';
 170   1       buffer[2]=' ';
 171   1       switch(capacity_scope)
 172   1        {
 173   2         case 1: buffer[3]=' ';for(i=4;i<10;i++)buffer[i]=buffer_temp[i-4];buffer[10]='p';break;
 174   2         case 2: for(i=3;i<7;i++)buffer[i]=buffer_temp[i-3];buffer[7]='.';buffer[8]=buffer_temp[4];buffer[9]=buf
             -fer_temp[5];buffer[10]='n';break;
C51 COMPILER V7.06   MEASURE_CAPACITY                                                      03/02/2006 23:49:40 PAGE 4   

 175   2         case 3: for(i=3;i<8;i++)buffer[i]=buffer_temp[i-3];buffer[8]='.';buffer[9]=buffer_temp[5];buffer[10]='n
             -';break;
 176   2         case 4: for(i=3;i<6;i++)buffer[i]=buffer_temp[i-3];buffer[6]='.';for(i=7;i<10;i++)buffer[i]=buffer_temp
             -[i-4];buffer[10]='u';break;
 177   2         case 5: for(i=3;i<7;i++)buffer[i]=buffer_temp[i-3];buffer[7]='.';buffer[8]=buffer_temp[4];buffer[9]=buf
             -fer_temp[5];buffer[10]='u';break;
 178   2        }
 179   1       buffer[11]='F';
 180   1       buffer[12]=' ';
 181   1       buffer[13]=' ';
 182   1       buffer[14]=' ';
 183   1       buffer[15]=' ';
 184   1       buffer[16]=0x00;
 185   1       return 0;
 186   1      }
 187          
 188          code unsigned char TEXT_CAPACITY[]={"CAPACITY:"};
 189          
 190          void Display_capacity(void)
 191          {
 192   1       LCD_cls();
 193   1       LCD_prints(TEXT_CAPACITY);
 194   1       LCD_set_position(40);
 195   1       LCD_prints(buffer);
 196   1       delayXms(500);
 197   1      }
 198          
 199          void Measure_capacity(void)
 200          {
 201   1       LCD_cls();
 202   1       LCD_prints(TEXT_CAPACITY);
 203   1       LCD_set_position(40);
 204   1      // LCD_prints("   0000.00uF    ");
 205   1       TMOD=0x11;
 206   1       while(status==MEASURE_CAPACITY)
 207   1        {
 208   2         Start_measure();
 209   2         if(Wait_for_end())continue;
 210   2         if(Calculation())continue;
 211   2         Display_capacity();
 212   2        }
 213   1      }
 214           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2171    ----
   CONSTANT SIZE    =     61    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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