📄 8574keyboard.lst
字号:
249 1 // _nop_();
250 1 // _nop_();
251 1 // _nop_();
252 1 if(MDI==0)
253 1 ack=1;
254 1 else
255 1 ack=0; /*判断是否接收到应答信号*/
256 1 MCO=0;
257 1 MDE=1;
258 1 _nop_();
259 1 _nop_();
260 1 }
261
262 /*************************************************************************************
263 主程序
264 **************************************************************************************/
265 void ext0_int() interrupt 0//SPIandI2C_InterruptRoutine(void) interrupt 7//
266 {
267 1 // if(key_right_flag<2)
268 1 // {
269 1 EX0=0;
270 1 start();
271 1 wrbyt(0x41);
272 1 RBT[1]=RcvByte();
273 1 Ack_I2c(1);
274 1 stop();
275 1 if(RBT[1]>=0x70)//如果接收的数正确
276 1 key_right_flag++;
277 1 KeyPort = (RBT[1] & 0xF0);
278 1 //KeyPort=(0x70&0xF0);
279 1 start();
280 1 wrbyt(0x40);
281 1 wrbyt(0x0F);
282 1 checkack();
283 1 stop();
284 1 start();
285 1 wrbyt(0x41);
286 1 RBT[2]=RcvByte();
287 1 Ack_I2c(1);
288 1 stop();
289 1 if(RBT[2]<=0x0F)//判断是否正确
290 1 key_right_flag++;
291 1 key = (RBT[2] & 0x0F);
292 1 key|=KeyPort;
293 1 if(key!=0xFF)
294 1 curkey=key;
295 1 // }
296 1 // if(key_right_flag>=2)
297 1 // {
298 1 key_right_flag=0;
299 1 start();//恢复8574初始状态
300 1 wrbyt(0x40);
301 1 wrbyt(0xF0);
302 1 checkack();
303 1 stop();
C51 COMPILER V8.08 8574KEYBOARD 03/31/2009 16:43:21 PAGE 6
304 1 EX0=1;
305 1 // }
306 1 }
307
308 /*************************************************************************************
309 主程序
310 **************************************************************************************/
311 void main()
312 {
313 1 EX0=1;
314 1 PCF8574init();//主机模式
315 1 start();
316 1 wrbyt(slvadr);//发一个数据或地址
317 1 wrbyt(0xF0);//端口初始化
318 1 checkack();
319 1 stop();
320 1 delay1ms(1);
321 1 delay1ms(1);
322 1 delay1ms(1);
323 1 start();
324 1 wrbyt(0x41);
325 1 RBT[0]=RcvByte();
326 1 Ack_I2c(1);
327 1 stop();
328 1 EA=1;
329 1 //1602移植过来的
330 1 lcd_init(); //液晶初始化
331 1 lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位
332 1 for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示
333 1 {
334 2 lcd_wdat(table[m]);
335 2 delay(1);
336 2 }
337 1 lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位
338 1 for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示
339 1 {
340 2 lcd_wdat(table1[n]);
341 2 delay(1);
342 2 }
343 1
344 1 while(1)
345 1 {
346 2 uchar i;
347 2 switch (curkey)
348 2 {/*将按键码输出到显示*/
349 3 case 0x7E:
350 3 lcd_wcom(0x80);
351 3 //lcd_wdat('L');
352 3 for(i=0;i<5;i++)
353 3 {
354 4 lcd_wdat(light[i]);
355 4 }
356 3 curkey=0;
357 3 break;
358 3 case 0xBE:
359 3 lcd_wcom(0x80);
360 3 //lcd_wdat('A');
361 3 for(i=0;i<3;i++)
362 3 {
363 4 lcd_wdat(avc[i]);
364 4 }
365 3 curkey=0;
C51 COMPILER V8.08 8574KEYBOARD 03/31/2009 16:43:21 PAGE 7
366 3 break;
367 3 case 0xDE:
368 3 lcd_wcom(0x80);
369 3 //lcd_wdat('M');
370 3 for(i=0;i<4;i++)
371 3 {
372 4 lcd_wdat(memo[i]);
373 4 }
374 3 curkey=0;
375 3 break;
376 3 case 0xEE:
377 3 lcd_wcom(0x80);
378 3 //lcd_wdat('H');
379 3 for(i=0;i<4;i++)
380 3 {
381 4 lcd_wdat(hold[i]);
382 4 }
383 3 curkey=0;
384 3 break;
385 3
386 3 case 0xED:
387 3 lcd_wcom(0x80);
388 3 //lcd_wdat('S');
389 3 for(i=0;i<5;i++)
390 3 {
391 4 lcd_wdat(setup[i]);
392 4 }
393 3 curkey=0;
394 3 break;
395 3 case 0xDD:
396 3 lcd_wcom(0x80);
397 3 lcd_wdat('9');
398 3 curkey=0;
399 3 break;
400 3 case 0xBD:
401 3 lcd_wcom(0x80);
402 3 lcd_wdat('8');
403 3 curkey=0;
404 3 break;
405 3 case 0x7D:
406 3 lcd_wcom(0x80);
407 3 lcd_wdat('7');
408 3 curkey=0;
409 3 break;
410 3
411 3 case 0xEB:
412 3 lcd_wcom(0x80);
413 3 //lcd_wdat('P');
414 3 for(i=0;i<4;i++)
415 3 {
416 4 lcd_wdat(pgdn[i]);
417 4 }
418 3 curkey=0;
419 3 break;
420 3 case 0xDB:
421 3 lcd_wcom(0x80);
422 3 lcd_wdat('6');
423 3 curkey=0;
424 3 break;
425 3 case 0xBB:
426 3 lcd_wcom(0x80);
427 3 lcd_wdat('5');
C51 COMPILER V8.08 8574KEYBOARD 03/31/2009 16:43:21 PAGE 8
428 3 curkey=0;
429 3 break;
430 3 case 0x7B:
431 3 lcd_wcom(0x80);
432 3 lcd_wdat('4');
433 3 curkey=0;
434 3 break;
435 3
436 3 case 0xE7:
437 3 lcd_wcom(0x80);
438 3 for(i=0;i<3;i++)
439 3 {
440 4 lcd_wdat(esc[i]);
441 4 }
442 3 //lcd_wdat('E');
443 3 curkey=0;
444 3 break;
445 3 case 0xD7:
446 3 lcd_wcom(0x80);
447 3 lcd_wdat('3');
448 3 curkey=0;
449 3 break;
450 3 case 0xB7:
451 3 lcd_wcom(0x80);
452 3 lcd_wdat('2');
453 3 curkey=0;
454 3 break;
455 3 case 0x77:
456 3 lcd_wcom(0x80);
457 3 lcd_wdat('1');
458 3 curkey=0;
459 3 break;
460 3
461 3 case 0x7F:
462 3 lcd_wcom(0x80);
463 3 lcd_wdat('0');
464 3 curkey=0;
465 3 break;
466 3 case 0xBF:
467 3 lcd_wcom(0x80);
468 3 lcd_wdat('.');
469 3 curkey=0;
470 3 break;
471 3 case 0xDF:
472 3 lcd_wcom(0x80);
473 3 lcd_wdat('+');
474 3 curkey=0;
475 3 break;
476 3 case 0xEF:
477 3 //lcd_wcom(0x80);
478 3 lcd_wdat('*');
479 3 lcd_wcom(0x80+0x44);
480 3 curkey=0;
481 3 break;
482 3
483 3 default :
484 3 break;
485 3 }
486 2 delay1ms(1);
487 2 }
488 1 }
489
C51 COMPILER V8.08 8574KEYBOARD 03/31/2009 16:43:21 PAGE 9
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 946 ----
CONSTANT SIZE = 61 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 16 1
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 + -