📄 measure_capacity.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 + -