⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 8574keyboard.lst

📁 aduc834单片机PCF8574 4*5键盘驱动程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 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 + -