📄 51lcd1602+=
字号:
C51 COMPILER V9.00 KEY 12/11/2011 23:03:26 PAGE 1
C51 COMPILER V9.00, COMPILATION OF MODULE KEY
OBJECT MODULE PLACED IN key.OBJ
COMPILER INVOKED BY: D:\Program Files\keil4\C51\BIN\C51.EXE key.c BROWSE DEBUG OBJECTEXTEND
line level source
1 /**********************************************************
2 按键相关处理程序
3 **********************************************************/
4 #include <reg52.h>
5 #include "work.h"
6
7 //=========================================================
8 void jiahander(void);
9 void jianhander(void);
10 void chenghander(void);
11 void chuhander(void);
12 //==========================================================
13 //键盘扫描函数 返回键值 1-16
14 //==========================================================
15 uchar keys(void)
16 {
17 1 unsigned char recode,i,j;
18 1 for(i=0;i<4;i++)
19 1 {
20 2 KEY=~(0x01<<i);
21 2 recode=KEY>>4;
22 2 if(recode<0x0f)
23 2 {
24 3 for(j=0;j<4;j++)
25 3 {if(!(recode&0x01<<j))break;}
26 3 return (i<<2)+(j+1); //返回键值 1-16
27 3 }
28 2 delayms(5); //延时5ms
29 2 }
30 1 return 0; //无按键返回
31 1 }
32 //=======================================================
33 //给键值定义值
34 //=======================================================
35 uchar scanzhi(void)
36 {
37 1 uchar zhi,k;
38 1 k=keys();
39 1 switch(k)
40 1 {
41 2 case 0: zhi=27;break;
42 2 case 1: zhi=7;break;
43 2 case 2: zhi=8;break;
44 2 case 3: zhi=9;break;
45 2 case 4: zhi=24;break; // /
46 2
47 2 case 5: zhi=4;break;
48 2 case 6: zhi=5;break;
49 2 case 7: zhi=6;break;
50 2 case 8: zhi=23;break; //*
51 2
52 2 case 9: zhi=1;break;
53 2 case 10: zhi=2;break;
54 2 case 11: zhi=3;break;
55 2 case 12: zhi=22;break; //-
C51 COMPILER V9.00 KEY 12/11/2011 23:03:26 PAGE 2
56 2
57 2 case 13: zhi=26;break; //nc
58 2 case 14: zhi=0;break;
59 2 case 15: zhi=25;break; //=
60 2 case 16: zhi=21;break; //+
61 2 }
62 1 return(zhi);
63 1 }
64 //============================================================
65 void keyscan(void)
66 {
67 1 uchar key;
68 1 key=scanzhi();
69 1 if(key!=27) //------有无按键
70 1 {
71 2 if(key<=9) //-----------------------数字输入------------------
72 2 {
73 3 pflag=1;
74 3 sfflag|=0x01;
75 3 if(qflag==1)
76 3 {
77 4 k=0;
78 4 clearplay(3);
79 4 bczs=0;
80 4 qflag=0;
81 4 }
82 3 pbuffer1[k++]=0x30+key;
83 3 bczs=bczs*10+key;
84 3
85 3 } //-----------------------------------------------------------
86 2 else if(key>20)//------符号输入
87 2 {
88 3 pflag=1;
89 3 switch(key)
90 3 {
91 4 case 21: jiahander();break; //+
92 4
93 4 case 22: jianhander();break; //-
94 4
95 4 case 23: chenghander(); break; //*
96 4
97 4 case 24: chuhander(); break; // /
98 4
99 4 case 25: if(sfflag==0x01) break;
100 4 if(qflag==1) {sfflag=0; break; }
101 4 czshu=bczs;jishuan();sfflag=0x01;pbuffer1[k++]='=';break; //=
102 4
103 4 case 26: bczs=0;jguo=0;bczshu=0;czshu=0;sfflag=0;
104 4 clearplay(3);k=0;qflag=0;jsfuhao=0; break; //nc
105 4 }
106 3 }
107 2
108 2 while(scanzhi()!=27);
109 2 }
110 1 }
111 //=======================================================
112 //等号处理函数
113 //=======================================================
114 void jishuan(void)
115 {
116 1
117 1 switch(jsfuhao)
C51 COMPILER V9.00 KEY 12/11/2011 23:03:26 PAGE 3
118 1 {
119 2 case 1: jguo=bczshu+czshu;jchangep();break;
120 2 case 2: jguo=bczshu-czshu;jchangep();break;
121 2 case 3: jguo=bczshu*czshu;jchangep();break;
122 2 case 4: jguo=bczshu/czshu;jchangep();break;
123 2 }
124 1 jsfuhao=0;
125 1 qflag=1;
126 1 }
127 //=======================================================
128 //加号处理函数
129 //=======================================================
130 void jiahander(void)
131 {
132 1 if(sfflag>=0x82) return;
133 1 if((sfflag&0x80)!=0)
134 1 {
135 2 k--;
136 2 pbuffer1[k++]='+';
137 2 jsfuhao=1;
138 2 return;
139 2 }
140 1 if(qflag==1)
141 1 {
142 2 qflag=0;exchangexx();
143 2 bczshu=jguo; bczs=0;pbuffer1[k++]='+';
144 2 }
145 1 else
146 1 {
147 2 bczshu=bczs;bczs=0;pbuffer1[k++]='+';
148 2 }
149 1 sfflag|=0x80;
150 1 sfflag+=0x01;
151 1 jsfuhao=1;
152 1 }
153 //=======================================================
154 //减号处理函数
155 //=======================================================
156 void jianhander(void)
157 {
158 1 if(sfflag>=0x82) return;
159 1 if((sfflag&0x80)!=0)
160 1 {
161 2 k--;
162 2 pbuffer1[k++]='-';
163 2 jsfuhao=2;
164 2 return;
165 2 }
166 1 if(qflag==1)
167 1 {
168 2 qflag=0;exchangexx();
169 2 bczshu=jguo; bczs=0;pbuffer1[k++]='-';
170 2 }
171 1 else
172 1 {
173 2 bczshu=bczs;bczs=0;pbuffer1[k++]='-';
174 2 }
175 1 sfflag|=0x80;
176 1 sfflag+=0x01;
177 1 jsfuhao=2;
178 1 }
179
C51 COMPILER V9.00 KEY 12/11/2011 23:03:26 PAGE 4
180 //=======================================================
181 //乘号处理函数
182 //=======================================================
183 void chenghander(void)
184 {
185 1 if(sfflag>=0x82) return;
186 1 if((sfflag&0x80)==0x80)
187 1 {
188 2 k--;
189 2 pbuffer1[k++]='*';
190 2 jsfuhao=3;
191 2 return;
192 2 }
193 1 if(qflag==1)
194 1 {
195 2 qflag=0;exchangexx();
196 2 bczshu=jguo; bczs=0;pbuffer1[k++]='*';
197 2 }
198 1 else
199 1 {
200 2 bczshu=bczs;bczs=0;pbuffer1[k++]='*';
201 2 }
202 1 sfflag|=0x80;
203 1 sfflag+=0x01;
204 1 jsfuhao=3;
205 1 }
206 //=========================================================
207 //除号处理函数
208 //=========================================================
209 void chuhander(void)
210 {
211 1 if(sfflag>=0x82) return;
212 1 if((sfflag&0x80)!=0)
213 1 {
214 2 k--;
215 2 pbuffer1[k++]='/';
216 2 jsfuhao=4;
217 2 return;
218 2 }
219 1 if(qflag==1)
220 1 {
221 2 qflag=0;exchangexx();
222 2 bczshu=jguo; bczs=0;pbuffer1[k++]='/';
223 2 }
224 1 else
225 1 {
226 2 bczshu=bczs;bczs=0;pbuffer1[k++]='/';
227 2 }
228 1 sfflag|=0x80;
229 1 sfflag+=0x01;
230 1 jsfuhao=4;
231 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1001 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 3
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
C51 COMPILER V9.00 KEY 12/11/2011 23:03:26 PAGE 5
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -