📄 int_calc.lst
字号:
C51 COMPILER V7.01 INT_CALC 03/09/2009 18:07:30 PAGE 1
C51 COMPILER V7.01, COMPILATION OF MODULE INT_CALC
OBJECT MODULE PLACED IN INT_CALC.OBJ
COMPILER INVOKED BY: E:\Program Files\Labcenter Electronics\Keil\C51\BIN\C51.EXE INT_CALC.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 /*************************************************************************************
2 *Author:PanXiaoguang - hack_ziyoutt@qq.com
3 *Created Date:2009-03-09
4 *Last Modified:2009-03-09 [Failed]
5 *Description: A small calculator,can calculate +,-,*,/ of the integer number【INT】
6 **************************************************************************************/
7
8 #include <AT89X52.H>
9
10 #ifndef true
11 #define true 1
12 #endif
13
14 #ifndef false
15 #define false 0
16 #endif
17
18 /*
19 共阴极LED显示管字段码和显示控制码
20 */
21 code numCode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x79,0x00,0x40};
22 // 0 1 2 3 4 5 6 7 8 9 E 灭 -
23 code disControl[]={0xfe,0xfd,0xfb,0xf7};
24
25 unsigned int data led[4];
26 int data numBuf[4]={0,0,0,0};
27 unsigned char data keyTemp;
28 unsigned char data keyCode;
29 unsigned char data keyValue;
30 unsigned char data keyOp;
31 int data keyNum1=-1;
32 int data keyNum2=-1;
33 unsigned char data numCount=0;
34 unsigned char data key;
35 unsigned char data count=1;
36
37 bit isEQ=false;
38 bit isOP=false;
39 bit hasOP=false;
40 bit full=false;
41
42 void delay(unsigned char t)
43 {
44 1 for(;t>0;t--);
45 1 }
46
47 void disTest(void)
48 {
49 1 unsigned char i,j;
50 1
51 1 if(numCount==0)
52 1 {
53 2 led[0]=led[1]=led[2]=11;
54 2 led[3]=0;
55 2 }
C51 COMPILER V7.01 INT_CALC 03/09/2009 18:07:30 PAGE 2
56 1 else if(numCount==1)
57 1 {
58 2 led[0]=led[1]=led[2]=11;
59 2 led[3]=numBuf[0];
60 2 }
61 1 else if(numCount==2)
62 1 {
63 2 led[0]=led[1]=11;
64 2 led[2]=numBuf[0];
65 2 led[3]=numBuf[1];
66 2 }
67 1 else if(numCount==3)
68 1 {
69 2 led[0]=11;
70 2 led[1]=numBuf[0];
71 2 led[2]=numBuf[1];
72 2 led[3]=numBuf[2];
73 2 }
74 1 else if(numCount==4)
75 1 {
76 2 led[0]=numBuf[0];
77 2 led[1]=numBuf[1];
78 2 led[2]=numBuf[2];
79 2 led[3]=numBuf[3];
80 2 }
81 1 else
82 1 {
83 2 led[0]=led[1]=led[2]=11;
84 2 led[3]=10;
85 2 }
86 1 for(j=0;j<4;j++)
87 1 {
88 2 if(led[j]==-2)
89 2 {
90 3 led[j]=12;
91 3 }
92 2 i=led[j];
93 2 P0=numCode[i];
94 2 P2=disControl[j];
95 2 delay(500);
96 2 }
97 1 }
98
99 void initCalc(void)
100 {
101 1 numBuf[0]=numBuf[1]=numBuf[2]=numBuf[3]=0;
102 1 keyNum1=keyNum2=-1;
103 1 keyOp=0;
104 1 numCount=0;
105 1 isOP=false;
106 1 hasOP=false;
107 1 isEQ=false;
108 1 count=1;
109 1 full=false;
110 1 disTest();
111 1 }
112
113 void answerDisplay(int answer)
114 {
115 1 unsigned char j;
116 1 if(10000 > answer && answer > 999)
117 1 {
C51 COMPILER V7.01 INT_CALC 03/09/2009 18:07:30 PAGE 3
118 2 numCount=4;
119 2 numBuf[0]=answer/1000;
120 2 numBuf[1]=answer%1000/100;
121 2 numBuf[2]=answer%100/10;
122 2 numBuf[3]=answer%10;
123 2 }
124 1 else if(1000 > answer && answer > 99)
125 1 {
126 2 numCount=3;
127 2 numBuf[0]=answer/100;
128 2 numBuf[1]=answer%100/10;
129 2 numBuf[2]=answer%10;
130 2 }
131 1 else if(100 > answer && answer > 9)
132 1 {
133 2 numCount=2;
134 2 numBuf[0]=answer/10;
135 2 numBuf[1]=answer%10;
136 2 }
137 1 else if(10 > answer && answer >= 0)
138 1 {
139 2 numCount=1;
140 2 numBuf[0]=answer;
141 2 }
142 1 else if(0 > answer && answer > -10)
143 1 {
144 2 numCount=2;
145 2 numBuf[0]=-2;
146 2 numBuf[1]=-answer;
147 2 }
148 1 else if(-9 > answer && answer > -100)
149 1 {
150 2 numCount=3;
151 2 numBuf[0]=-2;
152 2 numBuf[1]=(-answer)/10;
153 2 numBuf[2]=(-answer)%10;
154 2 }
155 1 else if(-99 > answer && answer > -1000)
156 1 {
157 2 numCount=4;
158 2 numBuf[0]=-2;
159 2 numBuf[1]=(-answer)/100;
160 2 numBuf[2]=(-answer)%100/10;
161 2 numBuf[3]=(-answer)%10;
162 2 }
163 1 else
164 1 {
165 2 numCount=4;
166 2 for(j=0;j<4;j++)
167 2 {
168 3 numBuf[j]=-2;
169 3 }
170 2 }
171 1 disTest();
172 1 }
173
174 int getNum(void)
175 {
176 1 int num;
177 1
178 1 if(numCount==0)
179 1 {
C51 COMPILER V7.01 INT_CALC 03/09/2009 18:07:30 PAGE 4
180 2 num=-1;
181 2 }
182 1 else if(numCount==1)
183 1 {
184 2 num=numBuf[0];
185 2 }
186 1 else if(numCount==2)
187 1 {
188 2 num=numBuf[0]*10+numBuf[1];
189 2 }
190 1 else if(numCount==3)
191 1 {
192 2 num=numBuf[0]*100+numBuf[1]*10+numBuf[2];
193 2 }
194 1 else if(numCount==4)
195 1 {
196 2 num=numBuf[0]*1000+numBuf[1]*100+numBuf[2]*10+numBuf[3];
197 2 }
198 1 else
199 1 {
200 2 num=-1;
201 2 }
202 1 return num;
203 1 }
204
205 void getKey(void)
206 {
207 1 switch(keyCode)
208 1 {
209 2 case 215:key=0;isOP=false;isEQ=false;break;
210 2 case 235:key=1;isOP=false;isEQ=false;break;
211 2 case 219:key=2;isOP=false;isEQ=false;break;
212 2 case 187:key=3;isOP=false;isEQ=false;break;
213 2 case 237:key=4;isOP=false;isEQ=false;break;
214 2 case 221:key=5;isOP=false;isEQ=false;break;
215 2 case 189:key=6;isOP=false;isEQ=false;break;
216 2 case 238:key=7;isOP=false;isEQ=false;break;
217 2 case 222:key=8;isOP=false;isEQ=false;break;
218 2 case 190:key=9;isOP=false;isEQ=false;break;
219 2
220 2 case 119:key=10;isOP=true;isEQ=false;break;// +
221 2 case 123:key=11;isOP=true;isEQ=false;break;// -
222 2 case 125:key=12;isOP=true;isEQ=false;break;// *
223 2 case 126:key=13;isOP=true;isEQ=false;break;// /
224 2 case 183:key=14;isOP=true;isEQ=true; break;// =
225 2
226 2 case 231:initCalc();return;
227 2
228 2 default:return;
229 2 }
230 1
231 1 if(!isOP)
232 1 {
233 2 if(!full)
234 2 {
235 3 if(hasOP && !(count++))
236 3 {
237 4 numCount=0;
238 4 }
239 3 numBuf[numCount++]=key;
240 3 if(numCount>4)
241 3 {
C51 COMPILER V7.01 INT_CALC 03/09/2009 18:07:30 PAGE 5
242 4 full=true;
243 4 }
244 3 }
245 2 else
246 2 {
247 3 numCount=0;
248 3 }
249 2 }
250 1 if(isOP && !isEQ)
251 1 {
252 2 hasOP=true;
253 2 count=0;
254 2 keyOp=key;
255 2 keyNum1=getNum();
256 2 }
257 1 if(isEQ)
258 1 {
259 2 if(!count)
260 2 {
261 3 numCount=0;
262 3 }
263 2 if(hasOP)
264 2 {
265 3 keyNum2=getNum();
266 3 }
267 2 else
268 2 {
269 3 keyNum1=getNum();
270 3 keyOp=0;
271 3 }
272 2 }
273 1 }
274
275 void getKeyCode(void)
276 {
277 1 unsigned char k,i;
278 1 P1=0xff;
279 1 P1=0x0f;
280 1 k=P1;
281 1 P1=0xff;
282 1 P1=0xf0;
283 1 i=P1;
284 1 keyValue=i+k;
285 1 }
286
287 void numCalc(void)
288 {
289 1 int data keyAnswer=0;
290 1 numCount=0;
291 1 isEQ=false;
292 1 isOP=false;
293 1 switch(keyOp)
294 1 {
295 2 case 0 :keyAnswer=keyNum1;break;
296 2 case 10:keyAnswer=keyNum1+keyNum2;break;
297 2 case 11:keyAnswer=keyNum1-keyNum2;break;
298 2 case 12:keyAnswer=keyNum1*keyNum2;break;
299 2 case 13:keyAnswer=keyNum1/keyNum2;break;
300 2
301 2 default:keyAnswer=0;
302 2 }
303 1 answerDisplay(keyAnswer);
C51 COMPILER V7.01 INT_CALC 03/09/2009 18:07:30 PAGE 6
304 1 }
305
306 void int0() interrupt 0
307 {
308 1 getKeyCode();
309 1 keyCode=keyValue;
310 1 getKey();
311 1 disTest();
312 1 }
313
314 void main()
315 {
316 1 EA=1;
317 1 EX0=1;
318 1 while(1)
319 1 {
320 2 P1=0x0f;
321 2 disTest();
322 2 if(isEQ)
323 2 {
324 3 if(keyOp==0)
325 3 {
326 4 numCalc();
327 4 }
328 3 else
329 3 {
330 4 if(keyNum2==-1)
331 4 {
332 5 numCount=1;
333 5 numBuf[0]=-2;
334 5 isOP=false;
335 5 isEQ=false;
336 5 }
337 4 else
338 4 {
339 5 numCalc();
340 5 }
341 4 }
342 3 }
343 2 }
344 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1466 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 27 ----
IDATA SIZE = ---- ----
BIT SIZE = 4 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -