📄 sp0604_实验18_计算器.lst
字号:
166 9 case 4:
167 9 NumberA+=(unsigned long)(LEDBuffer[Temp])*10000;
168 9 }
169 8 Temp++;
170 8 }
171 7 CurrentFunction=1;
172 7 Signal=Key;
173 7 GetKeyMaxFlag=0;
174 7 GetKeyCount=0;
175 7 for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
176 7 LEDBuffer[Temp]=16;
177 7 LEDBuffer[0]=0;
178 7 }
179 6 else if(Key==14)
C51 COMPILER V8.01 SP0604_实验18_计算芲 04/06/2006 23:05:49 PAGE 4
180 6 {
181 7 CurrentFunction=0;
182 7 GetKeyMaxFlag=0;
183 7 GetKeyCount=0;
184 7 NagFlag=0;
185 7 DotPosition=0;
186 7 for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
187 7 LEDBuffer[Temp]=16;
188 7 LEDBuffer[0]=0;
189 7 }
190 6 break;
191 6 case 1://输入数据2
192 6 if((Key>=0)&&(Key<=9))
193 6 {
194 7 if(GetKeyMaxFlag==0)
195 7 {
196 8 for(Temp=GetKeyCount;Temp>0;Temp--)
197 8 LEDBuffer[Temp]=LEDBuffer[Temp-1];
198 8 LEDBuffer[0]=Key;
199 8 GetKeyCount++;
200 8 if(GetKeyCount==5)GetKeyMaxFlag=1;
201 8 }
202 7 }
203 6 else if(Key==15)
204 6 {
205 7 NumberB=0;
206 7 Temp=0;
207 7 while(LEDBuffer[Temp]!=16)
208 7 {
209 8 switch(Temp)
210 8 {
211 9 case 0:
212 9 NumberB+=LEDBuffer[Temp];
213 9 break;
214 9 case 1:
215 9 NumberB+=(unsigned long)(LEDBuffer[Temp])*10;
216 9 break;
217 9 case 2:
218 9 NumberB+=(unsigned long)(LEDBuffer[Temp])*100;
219 9 break;
220 9 case 3:
221 9 NumberB+=(unsigned long)(LEDBuffer[Temp])*1000;
222 9 break;
223 9 case 4:
224 9 NumberB+=(unsigned long)(LEDBuffer[Temp])*10000;
225 9 break;
226 9 }
227 8 Temp++;
228 8 }
229 7
230 7 Result=0;
231 7 switch(Signal)
232 7 {
233 8 case 10://加法运算
234 8 Result=NumberA;
235 8 Result+=NumberB;
236 8 DotPosition=0;
237 8 break;
238 8 case 11://减法运算
239 8 Result=NumberA;
240 8 Result-=NumberB;
241 8 DotPosition=0;
C51 COMPILER V8.01 SP0604_实验18_计算芲 04/06/2006 23:05:49 PAGE 5
242 8 break;
243 8 case 12://乘法运算
244 8 Result=NumberA;
245 8 Result*=NumberB;
246 8 DotPosition=0;
247 8 break;
248 8 case 13://除法运算
249 8 Result=NumberA;
250 8 Result*=10000;
251 8 Result/=NumberB;
252 8 break;
253 8 }
254 7
255 7 for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
256 7 LEDBuffer[Temp]=16;
257 7 LEDBuffer[0]=0;
258 7
259 7 NagFlag=0;
260 7 if(Result<0)
261 7 {
262 8 Result=~Result;
263 8 Result++;
264 8 NagFlag=1;
265 8 }
266 7
267 7 if(Signal==13)//除法运算中除得结果小于0的处理
268 7 {
269 8 if(Result>=1000)DotPosition=4;
270 8 else if(Result>=100)DotPosition=3;
271 8 else if(Result>=10)DotPosition=2;
272 8 else if(Result>=1)DotPosition=1;
273 8 for(Temp=DotPosition;Temp<5;Temp++)LEDBuffer[Temp]=0;
274 8 DotPosition=4;
275 8 }
276 7 else DotPosition=0;
277 7
278 7 Temp=0;//将运算结果送出显示缓冲区
279 7 while(Result)
280 7 {
281 8 LEDBuffer[Temp]=Result%10;
282 8 Result/=10;
283 8 Temp++;
284 8 }
285 7
286 7 if(NagFlag==1)LEDBuffer[Temp]=17;//运算结果为负的处理
287 7
288 7 if(Signal==13)//除法运算中最后位"0"的处理
289 7 {
290 8 Temp=0;
291 8 while(LEDBuffer[Temp]==0)
292 8 {
293 9 for(i=0;i<sizeof(LEDBuffer);i++)LEDBuffer[i]=LEDBuffer[i+1];
294 9 LEDBuffer[sizeof(LEDBuffer)-1]=16;
295 9 DotPosition--;
296 9 }
297 8 }
298 7
299 7 CurrentFunction=2;
300 7 }
301 6 break;
302 6 case 2:
303 6 if(Key==14)
C51 COMPILER V8.01 SP0604_实验18_计算芲 04/06/2006 23:05:49 PAGE 6
304 6 {
305 7 CurrentFunction=0;
306 7 GetKeyMaxFlag=0;
307 7 GetKeyCount=0;
308 7 NagFlag=0;
309 7 DotPosition=0;
310 7 for(Temp=0;Temp<sizeof(LEDBuffer);Temp++)
311 7 LEDBuffer[Temp]=16;
312 7 LEDBuffer[0]=0;
313 7 }
314 6 break;
315 6 }
316 5 }
317 4 }
318 3 }
319 2 else NoFlashFlag=0;
320 2 }
321 1 }
322
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1451 ----
CONSTANT SIZE = 16 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 18 30
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 + -