📄 main.lst
字号:
C51 COMPILER V8.08 MAIN 05/22/2007 09:40:33 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
NO OBJECT MODULE REQUESTED
COMPILER INVOKED BY: D:\Program Files\Keil 8.08\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND SRC(.\main.SRC)
line level source
1 #include <reg51.h>
2 typedef unsigned char BYTE;
3
4 BYTE DBUF[5];
5 BYTE TEMP[5];
6 BYTE YJ; //结果存放
7 BYTE YJ1; //中间结果存放
8 BYTE GONG; //功能键存放
9 BYTE get_key; //GETKEY()函数是否成功返回
10
11 sbit DIN=P3^0;
12 sbit CLK=P3^1;
13
14 BYTE code SEGTAB[] ={0x3F,0x06,0x5B,0x4F,0x66,0x6D,
15 0x7D,0x07,0x7F,0x6F,0x77,0x7C,
16 0x39,0x5E,0x79,0x71,0x00,0x40};
17
18 BYTE code KEYTABLE[]={0x0DE,0x0ED,0x0DD,0x0BD,
19 0x0EB,0x0DB,0x0BB,0x0E7,
20 0x0D7,0x0B7,0x07E,0x07D,
21 0x07B,0x077,0x0BE,0x0EE};
22
23
24 enum keymode {num_key,fun_key,clear_key}key_mode;
25
26 /* 通过 */
27 void DELAY(BYTE i)
28 {
29 1 BYTE j=80;
30 1
31 1 do
32 1 {
33 2 do
34 2 {}while(--j);
35 2 }while(--i);
36 1 }
37
38
39 BYTE GETKEY()
40 {
41 1 BYTE temp;
42 1 BYTE temp2;
43 1 BYTE r1;
44 1 BYTE offset;
45 1
46 1 get_key=0;
47 1 DELAY(10);
48 1
49 1 P1=0x0F;
50 1 temp=P1;
51 1
52 1 if(temp==0x0F)
53 1 return 0;
54 1 else
55 1 {
C51 COMPILER V8.08 MAIN 05/22/2007 09:40:33 PAGE 2
56 2 temp2=temp;
57 2
58 2 P1=0xEF;
59 2 if(P1==0xEF)
60 2 {
61 3 P1=0xDF;
62 3 if(P1==0xDF)
63 3 {
64 4 P1=0xBF;
65 4 if(P1==0xBF)
66 4 {
67 5 P1=0x7F;
68 5 if(P1==0x7F)
69 5 {
70 6 return 0;
71 6 }
72 5 }
73 4 }
74 3 }
75 2 // K13
76 2 //检查ACC
77 2 temp2=ACC&0xF0|temp2;
78 2
79 2 r1=16;
80 2 offset=0;
81 2
82 2 do
83 2 {
84 3 if(temp2==KEYTABLE[offset])
85 3 {
86 4 P1=0x0F;
87 4 while(P1!=0x0F);
88 4 DELAY(10);
89 4 get_key=1;
90 4 return offset;
91 4 }
92 3 offset++;
93 3 }while(--r1);
94 2 }
95 1 }
96
97 /* 通过 */
98 BYTE TESTKEY()
99 {
100 1 P1=0x0F;
101 1 return ( (~P1)&0x0F );
102 1 }
103
104 /* 通过 */
105 void DISP()
106 {
107 1 BYTE data *point_1=DBUF;
108 1 BYTE data *point_2=TEMP+4;
109 1 BYTE num=5;
110 1 BYTE num2;
111 1
112 1 do
113 1 {
114 2 *point_2=SEGTAB[*point_1];
115 2 point_1++;
116 2 point_2--;
117 2 }while(--num);
C51 COMPILER V8.08 MAIN 05/22/2007 09:40:33 PAGE 3
118 1
119 1 point_1=TEMP;
120 1 num=5;
121 1
122 1 do
123 1 {
124 2 num2=8;
125 2 //检查ACC
126 2 ACC=*point_1;
127 2 do
128 2 {
129 3 #pragma asm
130 3 RLC A
131 3 #pragma endasm
132 3
133 3 DIN=CY;
134 3 CLK=0;
135 3 CLK=1;
136 3 }while(--num2);
137 2 point_1++;
138 2 }while(--num);
139 1 }
140
141
142
143 main()
144 {
145 1 BYTE num=0;
146 1 BYTE key;
147 1 BYTE _R0;
148 1 BYTE input;
149 1 BYTE temp;
150 1
151 1 GONG=0;
152 1
153 1 DBUF[0]=0x10;
154 1 DBUF[1]=0x10;
155 1 DBUF[2]=0x10;
156 1 DBUF[3]=0x10;
157 1 DBUF[4]=0x10;
158 1
159 1
160 1 while(1)
161 1 {
162 2 DISP();
163 2
164 2 while(!TESTKEY());
165 2
166 2 key=GETKEY();
167 2 if(!get_key)
168 2 continue;
169 2
170 2 num++;
171 2
172 2 switch(key)
173 2 {
174 3 case 0: key_mode=num_key; break;
175 3 case 1: key_mode=num_key; break;
176 3 case 2: key_mode=num_key; break;
177 3 case 3: key_mode=num_key; break;
178 3 case 4: key_mode=num_key; break;
179 3 case 5: key_mode=num_key; break;
C51 COMPILER V8.08 MAIN 05/22/2007 09:40:33 PAGE 4
180 3 case 6: key_mode=num_key; break;
181 3 case 7: key_mode=num_key; break;
182 3 case 8: key_mode=num_key; break;
183 3 case 9: key_mode=num_key; break;
184 3
185 3 case 10: key_mode=fun_key; break;
186 3 case 11: key_mode=fun_key; break;
187 3 case 12: key_mode=fun_key; break;
188 3 case 13: key_mode=fun_key; break;
189 3 case 14: key_mode=fun_key; break;
190 3
191 3
192 3 default: key_mode=clear_key;
193 3 }
194 2
195 2 if(key_mode==num_key)
196 2 {
197 3 if(num==1)
198 3 {
199 4 input=key;
200 4 DBUF[4]=key;
201 4 DBUF[3]=0x10;
202 4 DBUF[2]=0x10;
203 4 continue;
204 4 }
205 3 else if(num==2)
206 3 {
207 4 input=input*10+key;
208 4 DBUF[2]=0x10;
209 4 DBUF[3]=DBUF[4];
210 4 DBUF[4]=key;
211 4 continue;
212 4 }
213 3 else if(num==3)
214 3 {
215 4 OV=0;
216 4 ACC=input*10;
217 4 if(OV) goto E3;
218 4 ACC+=key;
219 4 if(CY) goto E3;
220 4 input=ACC;
221 4
222 4 DBUF[2]=DBUF[3];
223 4 DBUF[3]=DBUF[4];
224 4 DBUF[4]=key;
225 4 continue;
226 4 }
227 3 else
228 3 {
229 4 goto E3;
230 4 }
231 3 }
232 2 else if(key_mode==fun_key)
233 2 {
234 3 DBUF[4]=0x10;
235 3 DBUF[3]=0x10;
236 3 DBUF[2]=0x10;
237 3
238 3 _R0=GONG;
239 3 GONG=key;
240 3
241 3 /* + */
C51 COMPILER V8.08 MAIN 05/22/2007 09:40:33 PAGE 5
242 3 if(_R0==10)
243 3 {
244 4 YJ=YJ+input;
245 4 if(CY) goto E3;
246 4 num=0;
247 4 }
248 3 /* - */
249 3 else if(_R0==11)
250 3 {
251 4 YJ=YJ-input;
252 4 if(CY) goto E3;
253 4 num=0;
254 4 }
255 3 /* * */
256 3 else if(_R0==12)
257 3 {
258 4
259 4 YJ=YJ*input;
260 4 if(OV) goto E3;
261 4 }
262 3 /* / */
263 3 else if(_R0==13)
264 3 {
265 4 YJ=YJ/input;
266 4 num=0;
267 4 }
268 3 /* FIRST */
269 3 else if(_R0==0)
270 3 {
271 4 YJ=input;
272 4 num=0;
273 4 }
274 3 /* DEN */
275 3 else
276 3 {
277 4 num=0;
278 4 }
279 3
280 3 }
281 2 /* 清除 */
282 2 else
283 2 {
284 3 E3: num=0;
285 3 input=0;
286 3 YJ=0;
287 3 GONG=0;
288 3
289 3 DBUF[0]=0x10;
290 3 DBUF[1]=0x10;
291 3 DBUF[2]=0x10;
292 3 DBUF[3]=0x10;
293 3 DBUF[4]=0x10;
294 3 continue;
295 3 }
296 2
297 2 //DISP1:
298 2 YJ1=YJ/10;
299 2 DBUF[4]=YJ%10;
300 2
301 2 if(YJ1==0)
302 2 continue;
303 2 else
C51 COMPILER V8.08 MAIN 05/22/2007 09:40:33 PAGE 6
304 2 {
305 3 temp=YJ1;
306 3 YJ1=YJ1/10;
307 3 DBUF[3]=temp%10;
308 3
309 3 if(YJ1==0) continue;
310 3 else DBUF[2]=YJ1;
311 3 }
312 2 }//end while
313 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 513 ----
CONSTANT SIZE = 34 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 15 ----
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 + -