📄 main.lst
字号:
C51 COMPILER V8.02 MAIN 06/02/2011 14:07:46 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\程序\mmm\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg52.h"
2 #include"math.h"
3
4 #define uchar unsigned char
5 #define uint unsigned int
6
7 #define key P3
8 #define duan P2
9 #define wei P1
10
11 sbit led=P0^0;
12 sbit buzzer=P0^1;
13
14 uchar num,temp,num1,i=0;
15 long bczs=0,czs=0,jiguo=0,jiguo1=0;
16 uchar czs12=1; //输入数的选择标志位,1为第一个数,2为第二个数
17 uchar yiweiflag,qinflag; //移位标志
18
19 uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf}; //0~9,-,
20 uchar code weizi[9]={0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
21 uchar code error[10]={0xff,0xaf,0xc0,0xaf,0xaf,0x86,0xff,0xff,0xff};//error
22 uchar playshuzu[9],fuhao;
23 uchar zhi,weishu=0;
24
25 void init(); //函数申明
26 uchar keyscan();
27 uchar scanzhi();
28 void display();
29 void duzhichuli();
30 void zhuandisplayjiguo();
31 void jiafa();
32 void jianfa();
33 void chengfa();
34 void chufa();
35 void qin();
36 void displayerror();
37 //======================================
38 void main() //主函数
39 {
40 1 init();
41 1 display();
42 1 while(1)
43 1 {
44 2 duzhichuli();
45 2 }
46 1 }
47 //===============================================================================
48 void init()
49 {
50 1 uchar i;
51 1 czs12=1;
52 1 yiweiflag=1; //1不移
53 1 qinflag=0; //不清除
54 1 duan=shuzi[8];
55 1 wei=weizi[5];
C51 COMPILER V8.02 MAIN 06/02/2011 14:07:46 PAGE 2
56 1 playshuzu[1]=shuzi[0];
57 1 for(i=2;i<9;i++)
58 1 playshuzu[i]=shuzi[10];
59 1
60 1 bczs=0;czs=0;jiguo=0,jiguo1=0;
61 1 }
62 //===============================================================================
63 void delay(uint x)
64 {
65 1 uchar y;
66 1 for(x;x>0;x--)
67 1 for(y=112;y>0;y--);
68 1 }
69
70 //====================================
71 uchar keyscan()
72 {
73 1 unsigned char recode,i,j;
74 1 for(i=0;i<4;i++)
75 1 {
76 2 P3=~(0x01<<i);
77 2 recode=P3>>4;
78 2 if(recode<0x0f)
79 2 {
80 3 for(j=0;j<4;j++)
81 3 {if(!(recode&0x01<<j))break;}
82 3 return (i<<2)+(j+1); //返回键值 1-16
83 3 }
84 2 delay(5); //延时5ms
85 2 }
86 1 return 0; //无按键返回
87 1 }
88 //========================================
89 uchar scanzhi()
90 {
91 1 uchar zhi,k;
92 1 k=keyscan();
93 1 switch(k)
94 1 {
95 2 case 0: zhi=27;break;
96 2 case 1: zhi=7;break;
97 2 case 2: zhi=8;break;
98 2 case 3: zhi=9;break;
99 2 case 4: zhi=24;break; // /
100 2
101 2 case 5: zhi=4;break;
102 2 case 6: zhi=5;break;
103 2 case 7: zhi=6;break;
104 2 case 8: zhi=23;break; //*
105 2
106 2 case 9: zhi=1;break;
107 2 case 10: zhi=2;break;
108 2 case 11: zhi=3;break;
109 2 case 12: zhi=22;break; //-
110 2
111 2 case 13: zhi=26;break; //nc
112 2 case 14: zhi=0;break;
113 2 case 15: zhi=25;break; //=
114 2 case 16: zhi=21;break; //+
115 2 }
116 1 return(zhi);
117 1 }
C51 COMPILER V8.02 MAIN 06/02/2011 14:07:46 PAGE 3
118 //===========================================
119 void duzhichuli()
120 {
121 1 uchar tt,u;
122 1
123 1 tt=scanzhi();
124 1 if(tt!=27)
125 1 {
126 2 led=0;
127 2 buzzer=0;
128 2 if(tt<=9)//数字输入
129 2 {
130 3 if(qinflag==1) qin();
131 3 qinflag=0;
132 3 if(yiweiflag!=1)
133 3 {
134 4 for(u=8;u>1;u--) //移位输入
135 4 {
136 5 playshuzu[u]=playshuzu[u-1];
137 5 }
138 4 }
139 3 yiweiflag=0; //移位
140 3 playshuzu[1]=shuzi[tt];
141 3 if(czs12==1) bczs=bczs*10+tt; //
142 3 if(czs12==2) czs=czs*10+tt;
143 3 }
144 2 if(tt>20)//符号输入
145 2 {
146 3 switch(tt)
147 3 {
148 4 case 21: jiafa();break; //+
149 4 case 22: jianfa();break; //-
150 4 case 23: chengfa();break; //*
151 4 case 24: chufa();break;
152 4 case 25: zhuandisplayjiguo();break; //=
153 4 case 26: init();break; //nc
154 4 }
155 3 }
156 2 }
157 1 //-----------------------------------------------
158 1 while(tt!=27) //松手检测
159 1 {
160 2 led=0;
161 2 buzzer=0;
162 2 tt=scanzhi();
163 2 delay(1);
164 2 if(tt==27) goto chu;
165 2 }
166 1
167 1 chu: delay(1);
168 1 led=1;
169 1 buzzer=1;
170 1 }
171
172 //============================================
173 void display()
174 {
175 1
176 1 TMOD=0x01;
177 1 TH0=(65536-200)/256;
178 1 TL0=(65536-200)%256;
179 1 EA=1;
C51 COMPILER V8.02 MAIN 06/02/2011 14:07:46 PAGE 4
180 1 ET0=1;
181 1 TR0=1;
182 1
183 1 }
184 void TIME0(void) interrupt 1
185 {
186 1 TH0=(65536-200)/256;
187 1 TL0=(65536-200)%256;
188 1 i++;
189 1 if(i==9) i=1;
190 1 wei=weizi[i];
191 1 duan=playshuzu[i];
192 1 }
193 //=============================================== //显示数转操作数
194 void zhuandisplayjiguo()
195 {
196 1 uchar i,k;
197 1 long ttt;
198 1
199 1 for(i=1;i<9;i++)
200 1 playshuzu[i]=shuzi[10];
201 1 //----------------------------------------
202 1 switch(fuhao)
203 1 {
204 2 case 1: jiguo=bczs+czs;break;
205 2 case 2: jiguo=bczs-czs;break;
206 2 case 3: jiguo=bczs*czs;break;
207 2 case 4: jiguo=bczs/czs;break;
208 2 case 0: jiguo=jiguo1;break;
209 2 }
210 1 fuhao=0;
211 1
212 1 //----------------------------------------
213 1 ttt=jiguo;
214 1 jiguo1=jiguo; //显示处理
215 1 k=1; //取数的个数
216 1 for(i=1;i<=8;i++)
217 1 {
218 2 if(ttt/10!=0) k++;
219 2 ttt=ttt/10;
220 2 }
221 1
222 1 for(i=8;i>k;i--)
223 1 {
224 2 playshuzu[i]=shuzi[10];
225 2 }
226 1 if(jiguo<0) { jiguo=fabs(jiguo);playshuzu[k+1]=shuzi[11]; } //取正加负号
227 1
228 1 for(i=1;i<=k;i++)
229 1 {
230 2 playshuzu[i]=shuzi[jiguo%10];
231 2 jiguo=jiguo/10;
232 2 }
233 1 if(jiguo1>99999999) displayerror();
234 1
235 1 }
236 //===================================================
237 void qin()
238 {
239 1 uchar i;
240 1 yiweiflag=1; //1不移
241 1 playshuzu[1]=shuzi[0];
C51 COMPILER V8.02 MAIN 06/02/2011 14:07:46 PAGE 5
242 1 for(i=2;i<9;i++)
243 1 playshuzu[i]=shuzi[10];
244 1 }
245 //===================================================
246 void displayerror()
247 {
248 1 uchar i;
249 1 for(i=1;i<=8;i++)
250 1 playshuzu[i]=error[i];
251 1 }
252 //===================================================
253 void jiafa() //+
254 {
255 1
256 1 qinflag=1;
257 1 if(jiguo1!=0) bczs=jiguo1;
258 1 czs=0;
259 1 czs12=2;
260 1 fuhao=1; //+
261 1 }
262
263 void jianfa()
264 {
265 1
266 1 qinflag=1;
267 1 if(jiguo1!=0) bczs=jiguo1;
268 1 czs=0;
269 1 czs12=2;
270 1 fuhao=2; //-
271 1 }
272
273 void chengfa()
274 {
275 1
276 1 qinflag=1;
277 1 if(jiguo1!=0) bczs=jiguo1;
278 1 czs=0;
279 1 czs12=2;
280 1 fuhao=3; //*
281 1 }
282
283 void chufa()
284 {
285 1
286 1 qinflag=1;
287 1 if(jiguo1!=0) bczs=jiguo1;
288 1 czs=0;
289 1 czs12=2;
290 1 fuhao=4; // /
291 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1304 ----
CONSTANT SIZE = 31 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 35 7
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 + -