?? shumaguan4.lst
字號:
156 **函數功能:中斷服務子程序 **
157 **參數:無 **
158 **返回:無 **
159 **********************************************************************/
160
161 void int0_isr(void) interrupt 0 using 1
162 {
163 1
164 1 if(!flag)
165 1 {
166 2 EX0=0;
167 2 flag=1;
168 2 }
169 1
170 1
171 1 }
172 /**********************************************************************
173 **函數功能:鍵值處理函數(處理+.-.*./.=) **
174 **參數:字符型 **
175 **返回:整型 **
176 **********************************************************************/
177 unsigned int process(unsigned char kvalue)
178 {
179 1
C51 COMPILER V8.02 SHUMAGUAN4 12/01/2006 21:14:03 PAGE 4
180 1 if(isdigit(kvalue))//&&!flag) //如果是數字,求值
181 1 {
182 2 currentvalue=transition(kvalue)+currentvalue*10;
183 2 result=currentvalue;
184 2
185 2
186 2 }
187 1 else //如果是功能鍵
188 1 if(kvalue=='o') //如果是ON/C,清0
189 1 {
190 2 result=0;
191 2 currentvalue=0;
192 2 lastvalue=0;
193 2 }
194 1 else if(kvalue=='+') //如果是“+”
195 1 {
196 2 lastop=kvalue; //lastop保存操作碼
197 2 lastvalue=result;//當前值成為上次值
198 2 currentvalue=0; //當前值清0
199 2 }
200 1 else if(kvalue=='-')
201 1 {
202 2 lastop=kvalue;
203 2 lastvalue=result;
204 2 currentvalue=0;
205 2 }
206 1 else if(kvalue=='*')
207 1 {
208 2 lastop=kvalue;
209 2 lastvalue=result;
210 2 currentvalue=0;
211 2 }
212 1 else if(kvalue=='/')
213 1 {
214 2 lastop=kvalue;
215 2 lastvalue=result;
216 2 currentvalue=0;
217 2 }
218 1
219 1 else if(kvalue=='=') //如果是“=”
220 1 {
221 2 switch(lastop) //判斷操作碼是什么
222 2 {
223 3 case '+':
224 3 {
225 4 result=currentvalue+lastvalue;
226 4 lastvalue=result;
227 4 break;
228 4 }
229 3 case '-':
230 3 {
231 4 result=lastvalue-currentvalue;
232 4 lastvalue=result;
233 4 break;
234 4 }
235 3 case '*':
236 3 {
237 4 result=currentvalue*lastvalue;
238 4 lastvalue=result;
239 4 break;
240 4 }
241 3 case '/':
C51 COMPILER V8.02 SHUMAGUAN4 12/01/2006 21:14:03 PAGE 5
242 3 {
243 4 result=lastvalue/currentvalue;
244 4 lastvalue=result;
245 4 break;
246 4 }
247 3 }
248 2 }
249 1 if(result>9999)
250 1 {
251 2 result=0;
252 2 currentvalue=0;
253 2 }
254 1 return result;
255 1 }
256
257
258 /**********************************************************************
259 **函數功能:判斷按鍵的鍵值是功能鍵還是數字鍵 **
260 **參數:整型數 **
261 **返回:BOOL型 **
262 **********************************************************************/
263 bit isdigit(unsigned char kvalue)
264 {
265 1 if(kvalue>='0'&&kvalue<='9')
266 1 return 1;
267 1 else
268 1 return 0;
269 1 }
270 /**********************************************************************
271 **函數功能:把數字的ASCII轉換成整型 **
272 **參數:整型數 **
273 **返回:整型 **
274 **********************************************************************/
275 unsigned char transition(unsigned char kvalue)
276 {
277 1 if(kvalue>='0'&&kvalue<='9')
278 1 return (kvalue-'0');
279 1 else
280 1 return 0;
281 1 }
282 /**********************************************************************
283 **函數功能:鍵盤掃描功能 **
284 **參數:無 **
285 **返回:返回鍵值 **
286 **********************************************************************/
287 unsigned char key_scan(void)
288 {
289 1 unsigned char line,row,temp,a,b,kvalue1;
290 1 temp=0xfe;
291 1 //flag=0;
292 1 P1=0xf0;
293 1 if((P1&0xf0)!=0xf0)
294 1 {
295 2 delay(10);
296 2 P1=0xf0;
297 2 if((P1&0xf0)!=0xf0)
298 2 {
299 3
300 3 delay(10);
301 3 for(line=0;line<4;line++) //進行行掃描
302 3 {
303 4 a=temp<<line;
C51 COMPILER V8.02 SHUMAGUAN4 12/01/2006 21:14:03 PAGE 6
304 4 b=temp>>(8-line);
305 4 P1=a|b;
306 4 P1=P1&0x0f;
307 4 P1=P1|0xf0;
308 4 kvalue1=P1&0xf0;
309 4 if(kvalue1!=0xf0)
310 4 break;
311 4 }
312 3
313 3 P1=P1&0x0f;
314 3 P1=P1|0xf0;
315 3 P1=0xf0;
316 3 while((P1&0xf0)!=0xf0) //判斷鍵彈起
317 3 {
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -