📄 calculator.lst
字号:
C51 COMPILER V9.00 CALCULATOR 09/15/2012 17:53:24 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE CALCULATOR
OBJECT MODULE PLACED IN calculator.OBJ
COMPILER INVOKED BY: D:\Program Files\学习软件\keil c51\C51\BIN\C51.EXE calculator.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include<reg52.h>
2 #include<math.h>
3 #include"data.h"
4 #include"delay12.h"
5 #include"lcd1602.h"
6 uchar temp,key,i,flag=0,z=4,flag1=0;
7 signed long a=0,b=0;
8 uchar code table2[]="0123456789+-*/= ";
9 uchar code table1[]={0xee,0xde,0xbe,0x7e,
10 0xed,0xdd,0xbd,0x7d,
11 0xeb,0xdb,0xbb,0x7b,
12 0xe7,0xd7,0xb7,0x77};
13 uchar code table3[]="0123456789 ";
14 uchar code table4[]="error";
15 uchar code table5[]="Please input";
16 uchar code table6[]=".";
17 void qingling()//清零函数
18 {
19 1 uchar x;
20 1 flag=0;
21 1 a=0,b=0;
22 1 init();
23 1 writecom(0x80+0x40);
24 1 for(x=0;x<12;x++)
25 1 {
26 2 writedata(table5[x]);
27 2 }
28 1 }
29 void display(a0,a1,a2,a3,a4,a5,a6,a7,a8)//1602显示函数
30 {
31 1 writecom(0x80+1);
32 1 writedata(table3[a0]);
33 1 writecom(0x80+2);
34 1 writedata(table3[a1]);
35 1 writecom(0x80+3);
36 1 writedata(table3[a2]);
37 1 writecom(0x80+4);
38 1 writedata(table3[a3]);
39 1 writecom(0x80+5);
40 1 writedata(table3[a4]);
41 1 writecom(0x80+6);
42 1 writedata(table3[a5]);
43 1 writecom(0x80+7);
44 1 writedata(table3[a6]);
45 1 writecom(0x80+8);//小数点
46 1 writedata(table6[0]);
47 1 writecom(0x80+9);//小数点后一位
48 1 writedata(table3[a7]);
49 1 writecom(0x80+10);//小数点后两位
50 1 writedata(table3[a8]);
51 1 }
52 void error()//提示错误
53 {
54 1 uchar x=0;
55 1 for(x=0;x<5;x++)
C51 COMPILER V9.00 CALCULATOR 09/15/2012 17:53:24 PAGE 2
56 1 {
57 2 writecom(0x80+0x40+x);
58 2 writedata(table4[x]);
59 2 }
60 1 }
61 void turn(signed long c)//转换数字到1602上显示
62 {
63 1 uchar A0=0,A1=0,A2=0,A3=0,A4=0,A5=0,A6=0,A7=0,A8=0;
64 1 A0=c/100000000;if(A0==0)A0=10;
65 1 A1=c%100000000/10000000;if(A0==10){if(A1==0)A1=10;}
66 1 A2=c%100000000%10000000/1000000;if(A1==10){if(A2==0)A2=10;}
67 1 A3=c%100000000%10000000%1000000/100000;if(A2==10){if(A3==0)A3=10;}
68 1 A4=c%100000000%10000000%1000000%100000/10000;if(A3==10){if(A4==0)A4=10;}
69 1 A5=c%100000000%10000000%1000000%100000%10000/1000;if(A4==10){if(A5==0)A5=10;}
70 1 A6=c%100000000%10000000%1000000%100000%10000%1000/100;
71 1 A7=c%100000000%10000000%1000000%100000%10000%1000%100/10;
72 1 A8=c%100000000%10000000%1000000%100000%10000%1000%100%10/1;
73 1 display(A0,A1,A2,A3,A4,A5,A6,A7,A8);
74 1 }
75 int select(uchar num)
76 {
77 1 uchar y;
78 1 if(num==11)y=1;
79 1 if(num==12)y=2;
80 1 if(num==13)y=3;
81 1 if(num==14)y=4;
82 1 return y;
83 1 }
84 signed long jisuan(signed long m,signed long n,uchar v)//计算器计算部分
85 {
86 1 signed long t;
87 1 switch(v)
88 1 {
89 2 case 0: t=m+n;flag1=0;break;
90 2 case 1: t=m-n;flag1=0;break;
91 2 case 2: t=m*n;flag1=0;break;
92 2 case 3: if(n==0){error();flag1=1;}else t=(m*100)/n;flag1=2;break;
93 2 }return t;
94 1 }
95 void detection()//检测数字和符号a,b<65536.并显示
96 {
97 1 uchar A0=0,A1=0,A2=0,A3=0,A4=0,chu=0,num;
98 1 signed long s;
99 1 P1=0xf0;
100 1 if(P1!=0xf0)//检测按键
101 1 {
102 2 delays();
103 2 if(P1!=0xf0)
104 2 {
105 3 temp=P1;
106 3 P1=0x0f;
107 3 key=temp|P1;
108 3 for(i=0;i<16;i++)
109 3 if(key==table1[i])
110 3 {num=i;break;}
111 3 }
112 2 delay(30);
113 2 while(num==15)
114 2 {
115 3 num=16;
116 3 qingling();
117 3 }
C51 COMPILER V9.00 CALCULATOR 09/15/2012 17:53:24 PAGE 3
118 2 if(flag==0) //输入并显示第一个数字
119 2 {
120 3 if(num<10)
121 3 { init();
122 4 a=(num+a*10);
123 4 if(a>10000000)error();
124 4 else turn(a*100);
125 4 }
126 3 else
127 3 {
128 4 if(num<14)
129 4 {
130 5 init();
131 5 flag=1;
132 5 z=select(num);
133 5 writecom(0x80+15);
134 5 writedata(table2[num]);
135 5 }
136 4 }
137 3 }
138 2 if(flag==1)//输入并显示第二个数字
139 2 {
140 3 if(num<10)
141 3 {
142 4 b=num+b*10;
143 4 if(b>10000000)error();
144 4 else turn(b*100);
145 4 }
146 3 if(num==14)flag=2;
147 3 }
148 2 if(flag==2||num==14)//输出结果
149 2 {
150 3 init();
151 3
152 3 s=jisuan(a,b,z);
153 3 if(s<0)
154 3 {
155 4 writecom(0x80);
156 4 writedata(table2[11]);
157 4 s=fabs(s);
158 4 }
159 3 if(flag1==2)turn(s);
160 3 if(flag1==0)turn(s*100);
161 3 if(num==15)
162 3 {
163 4 while(num==15)
164 4 {
165 5 num=17;
166 5 init();
167 5 qingling();
168 5 }
169 4 }
170 3 flag=0;
171 3 a=s;
172 3 b=0;
173 3 }
174 2 }
175 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 2015 ----
C51 COMPILER V9.00 CALCULATOR 09/15/2012 17:53:24 PAGE 4
CONSTANT SIZE = 66 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 14 57
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 + -