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

📄 22.lst

📁 这是基于4*4键盘
💻 LST
📖 第 1 页 / 共 3 页
字号:
 208   2            E = 1;
 209   2            temp_ramaddr = P1;
 210   2            E = 0;
 211   2          }
 212   1      
 213   1        RS = 1;
 214   1        RW = 0;
 215   1         P1 = data_data;
 216   1         E = 1;
 217   1         E = 0;    
 218   1      }
 219          
 220          
 221          
 222          //*********** 写指令子程序 *****
 223          void  LCD_write_instruction(char data_instruction)
 224          {
 225   1        BF = 1;
 226   1      
 227   1        RS = 0;
 228   1        RW = 1;  
 229   1         while(BF)
 230   1          { 
 231   2            P1 = 0xFF;
 232   2          E = 1;
 233   2            temp_ramaddr = P1;
 234   2           E = 0;
C51 COMPILER V8.02   22                                                                    07/18/2007 12:34:07 PAGE 5   

 235   2          }
 236   1      
 237   1         RW = 0;
 238   1         P1 = data_instruction;
 239   1        E = 1;
 240   1        E = 0;    
 241   1      }
 242          
 243          
 244          //************ LCD初始化 ********
 245          void LCD_initial()
 246          {
 247   1      
 248   1         delay_half_1s(1);
 249   1      
 250   1        LCD_write_instruction(0x01);
 251   1         delay_155us();
 252   1      
 253   1      LCD_write_instruction(0x30);
 254   1         delay_155us();
 255   1      
 256   1        LCD_write_instruction(0x0E);
 257   1         delay_155us();
 258   1      
 259   1        LCD_write_instruction(0x01);
 260   1         delay_8ms(5);
 261   1      
 262   1       LCD_write_instruction(0x06);
 263   1         delay_155us();
 264   1      
 265   1      }
 266          
 267          
 268          /* 延时t毫秒 */
 269          void delay(uint t)
 270          {
 271   1              uint i;
 272   1              while(t--)
 273   1              {
 274   2                      /* 对于12M时钟,约延时1ms */
 275   2                      for (i=0;i<125;i++)
 276   2                      {}
 277   2              }
 278   1      }
 279          
 280          void  keyscan(void) //键盘扫描子程序
 281          {
 282   1        uchar  scancode, rowcode;
 283   1        P3=0xf0; //向行扫描输出口发全0,查询列信号
 284   1        if((P3&0xf0)!=0xf0)//若有键按下
 285   1               {
 286   2                delay(50);     //延时消抖
 287   2                  if((P3&0xf0)!=0xf0)
 288   2                         {
 289   3                            scancode=0xfe;
 290   3                                while((scancode&0x10)!=0)      //逐行扫描
 291   3                                     {
 292   4                                            P3=scancode;        //输出行扫描码
 293   4                                                if((P3&0xf0)!=0xf0) //若本行有键按下
 294   4                                                  {
 295   5                                                        rowcode=(P3&0xf0)|0x0f;
 296   5                                                        keycode=((~scancode)+(~rowcode));
C51 COMPILER V8.02   22                                                                    07/18/2007 12:34:07 PAGE 6   

 297   5                                KeyDisplay();
 298   5                               }
 299   4      
 300   4                                    else
 301   4                                      { scancode=(scancode<<1)|0x01;}
 302   4                                              }
 303   3                              }
 304   2                               
 305   2        }
 306   1                                                        
 307   1      }
 308          
 309          
 310          uchar  getkey(uchar keycode)     //获取键值子程序
 311          {  
 312   1         int  kb;
 313   1       switch(keycode)
 314   1         {
 315   2              case 0x11:kb=4;break;
 316   2          case 0x21:kb=3;break;
 317   2          case 0x41:kb=2;break;
 318   2          case 0x81:kb=1;break;
 319   2         
 320   2          case 0x12:kb=8;break;
 321   2          case 0x22:kb=7;break;
 322   2          case 0x42:kb=6;break;
 323   2          case 0x82:kb=5;break;
 324   2          
 325   2              case 0x14:kb=12;break;
 326   2          case 0x24:kb=11;break;
 327   2          case 0x44:kb=10;break;
 328   2          case 0x84:kb=9;break;
 329   2          
 330   2              case 0x18:kb=16;break;
 331   2          case 0x28:kb=15;break;
 332   2          case 0x48:kb=14;break;
 333   2          case 0x88:kb=13;break;
 334   2      
 335   2          default:  kb=0x00;break;
 336   2           }
 337   1               return(kb);
 338   1      }
 339          
 340          void KeyDisplay(void)
 341          {
 342   1       int  keydata;
 343   1       keydata=getkey(keycode);
 344   1       delay(250);
 345   1       switch(keydata)
 346   1           {
 347   2            case 1:
 348   2            case 2:  
 349   2            case 3:
 350   2            case 4:
 351   2            case 5:
 352   2            case 6:
 353   2            case 7:
 354   2            case 8:
 355   2            case 9:
 356   2            case 10:
 357   2                case 12:if(numbit<5)
 358   2                  {
C51 COMPILER V8.02   22                                                                    07/18/2007 12:34:07 PAGE 7   

 359   3                        if(keydata==12)
 360   3                           keydata=11;
 361   3                    if(trace==2) 
 362   3                        {
 363   4                          for(i=0;i<16;i++)
 364   4                              {
 365   5                               peak_digit[4][i]=peak_digit[3][i];
 366   5                               peak_digit[3][i]=peak_digit[2][i];
 367   5                               peak_digit[2][i]=peak_digit[1][i];
 368   5                               peak_digit[1][i]=peak_digit[0][i];
 369   5                               peak_digit[0][i]=number[keydata-1][i]; 
 370   5                              }
 371   4                              LCD_write_picture();
 372   4                              LCD_write_instruction(0x96);
 373   4                         }
 374   3                        if(trace==4)
 375   3                        {
 376   4                          for(i=0;i<16;i++)
 377   4                              {
 378   5                           frequency_digit[4][i]=frequency_digit[3][i];
 379   5                               frequency_digit[3][i]=frequency_digit[2][i];
 380   5                               frequency_digit[2][i]=frequency_digit[1][i];
 381   5                               frequency_digit[1][i]=frequency_digit[0][i];
 382   5                               frequency_digit[0][i]=number[keydata-1][i]; 
 383   5                              }
 384   4                              LCD_write_picture();
 385   4                              LCD_write_instruction(0x8E);
 386   4                         }
 387   3                         ++numbit;
 388   3                       }
 389   2                   break;
 390   2                case 11:switch(trace)
 391   2                {
 392   3                   case 1:trace=5;LCD_write_picture();LCD_write_instruction(0x8F);break;
 393   3                       case 2:trace=1;LCD_write_picture();LCD_write_instruction(0x87);break;
 394   3                       case 3:trace=2;LCD_write_picture();LCD_write_instruction(0x96);break;
 395   3                       case 4:trace=3;LCD_write_picture();LCD_write_instruction(0x97);break;
 396   3                       case 5:trace=4;LCD_write_picture();LCD_write_instruction(0x8E);break;
 397   3                       default:break;
 398   3                }
 399   2                numbit=0;
 400   2                break;
 401   2                case 13:break;
 402   2                case 14:switch(trace)
 403   2                {
 404   3                   case 1:switch(picture_data)
 405   3                              {
 406   4                                         case 1:
 407   4                                           picture_data=3;
 408   4                                           LCD_write_picture();
 409   4                                         break;
 410   4                                         case 2:
 411   4                                           picture_data=1;
 412   4                                           LCD_write_picture();
 413   4                                         break;
 414   4                                 case 3:
 415   4                                           picture_data=2;
 416   4                                           LCD_write_picture();
 417   4                                         break;
 418   4                                         default:break;
 419   4                                      }
 420   3                                        LCD_write_instruction(0x87);
C51 COMPILER V8.02   22                                                                    07/18/2007 12:34:07 PAGE 8   

 421   3                                         
 422   3                                      break;
 423   3                       case 3:if(peak_data==1)
 424   3                              {
 425   4                                         peak_data=2;
 426   4                                         LCD_write_picture();
 427   4                                      }
 428   3                                      else

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -