📄 shumaguan3.lst
字号:
190 2 }
191 1 return result;
192 1 }
193
194
195 /**********************************************************************
196 **函数功能:判断按键的键值是功能键还是数字键 **
197 **参数:整型数 **
198 **返回:BOOL型 **
199 **********************************************************************/
200 bit isdigit(unsigned char kvalue)
201 {
202 1 if(kvalue>='0'&&kvalue<='9')
203 1 return 1;
204 1 else
205 1 return 0;
206 1 }
207 /**********************************************************************
208 **函数功能:把数字的ASCII转换成整型 **
209 **参数:整型数 **
210 **返回:整型 **
211 **********************************************************************/
212 unsigned char transition(unsigned char kvalue)
213 {
214 1 if(kvalue>='0'&&kvalue<='9')
215 1 return (kvalue-'0');
216 1 else
217 1 return 0;
218 1 }
219 /**********************************************************************
220 **函数功能:键盘扫描功能 **
221 **参数:无 **
222 **返回:返回键值 **
223 **********************************************************************/
224 unsigned char key_scan(void)
225 {
226 1 unsigned char line,row,temp,a,b,kvalue;
227 1 temp=0xfe;
228 1 //flag=0;
229 1 P1=0xf0;
230 1 if((P1&0xf0)!=0xf0)
231 1 {
232 2 delay(10);
233 2 P1=0xf0;
234 2 if((P1&0xf0)!=0xf0)
235 2 {
236 3
237 3 delay(10);
238 3 for(line=0;line<4;line++) //进行行扫描
239 3 {
240 4 a=temp<<line;
241 4 b=temp>>(8-line);
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 5
242 4 P1=a|b;
243 4 P1=P1&0x0f;
244 4 P1=P1|0xf0;
245 4 kvalue=P1&0xf0;
246 4 if(kvalue!=0xf0)
247 4 break;
248 4 }
249 3
250 3 P1=P1&0x0f;
251 3 P1=P1|0xf0;
252 3 P1=0xf0;
253 3 while((P1&0xf0)!=0xf0) //判断键弹起
254 3 {
255 4 }
256 3
257 3 if(kvalue==0xe0) //确定是第几列
258 3 row=0;
259 3 else if(kvalue==0xd0)
260 3 row=1;
261 3 else if(kvalue==0xb0)
262 3 row=2;
263 3 else if(kvalue==0x70)
264 3 row=3;
265 3 else
266 3 return 0;
267 3 P1=0xf0;
268 3 return keyvalue[line][row];
269 3 }
270 2
271 2
272 2 }
273 1 P1=0xf0;
274 1 return 0;
275 1 }
276
277 /**********************************************************************
278 **函数功能:在数码管上显示数据 **
279 **参数:整型数 **
280 **返回:无 **
281 **********************************************************************/
282 void display(int disnum)
283 {
284 1 int ge,shi,bai,qian,i,j;
285 1 int num[5]={0,0,0,0,10};
286 1 if(disnum<=9999)
287 1 {
288 2 ge=disnum%10;
289 2 shi=(disnum%100)/10;
290 2 bai=(disnum/100)%10;
291 2 qian=disnum/1000;
292 2 num[0]=ge;
293 2 num[1]=shi;
294 2 num[2]=bai;
295 2 num[3]=qian;
296 2 if(qian!=0)
297 2 {
298 3 for(i=0;i<4;i++)
299 3 {
300 4
301 4 P2=num_tab1[i]; //先送位码
302 4 P0=num_tab2[num[i]]; //再送段码
303 4 delay(1);
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 6
304 4 }
305 3 }
306 2 else
307 2 {
308 3 if(bai!=0)
309 3 {
310 4 for(i=0;i<3;i++)
311 4 {
312 5
313 5 P2=num_tab1[i];
314 5 P0=num_tab2[num[i]];
315 5 delay(1);
316 5 }
317 4 }
318 3 else
319 3 {
320 4 if(shi!=0)
321 4 {
322 5 for(i=0;i<2;i++)
323 5 {
324 6
325 6 P2=num_tab1[i];
326 6 P0=num_tab2[num[i]];
327 6 delay(1);
328 6 }
329 5 }
330 4 else
331 4 {
332 5 for(i=0;i<1;i++)
333 5 {
334 6 for(j=0;j<4;j++)
335 6 {
336 7 if(j==0)
337 7 {
338 8
339 8 P2=num_tab1[j];
340 8 P0=num_tab2[num[i]];
341 8 delay(1);
342 8 }
343 7 else
344 7 {
345 8
346 8 P2=num_tab1[j];
347 8 P0=num_tab2[num[4]];
348 8 delay(1);
349 8 }
350 7 }
351 6 }
352 5 }
353 4 }
354 3 }
355 2 }
356 1 else
357 1 ;
358 1 }
359 /**********************************************************************
360 **函数功能:延时时间 **
361 **参数:整型数 **
362 **返回:无 **
363 **********************************************************************/
364 void delay(unsigned int time)
365 {
C51 COMPILER V8.02 SHUMAGUAN3 10/22/2006 19:31:20 PAGE 7
366 1 int i;
367 1 int k;
368 1 for(i=0;i<time;i++)
369 1 for(k=0;k<100;k++);
370 1 }
371
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1422 ----
CONSTANT SIZE = 56 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 47 ----
IDATA SIZE = ---- ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -