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

📄 text1.lst

📁 使用C52和4×4键盘实现汉字输入的程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 287          void qian(void);   //列表前选
 288          
 289          void hou(void);    //列表后选
 290          
 291          void qing(void);  //清空底层
 292          
 293          uchar keyscan(void);    //键盘扫描
 294          
 295          void qiehuan(void);   //切换输入法
 296          
 297          /**********清除显屏(清除显示内存)***********/
 298          void  clear_screen_12864()
 299          {
 300   1       unsigned char i,j;
 301   1       cs1_12864 =0;cs2_12864=1;    /**清除左屏**/
 302   1       for(i=0;i<8;i++)
 303   1       {
C51 COMPILER V7.20   TEXT1                                                                 07/15/2007 16:48:55 PAGE 6   

 304   2         write_command_12864 (row_12864 +i);
 305   2         write_command_12864 (col_12864 +0);  //列地址0
 306   2         for(j=0;j<64;j++)
 307   2           write_data_12864 (0x00);     //每做一次写操作,列地址加1
 308   2       }
 309   1       cs1_12864 =1;cs2_12864 =0;    /**清除右屏**/
 310   1         for(i=0;i<8;i++)
 311   1       {
 312   2         write_command_12864(row_12864 +i);
 313   2         write_command_12864(col_12864+0);  //列地址0
 314   2         for(j=0;j<64;j++)
 315   2           write_data_12864(0x00);     //每做一次写操作,列地址加1
 316   2       }
 317   1      }
 318          
 319          /***********延时1ms**************/
 320          void delay_12864()
 321          { unsigned int dy=500;
 322   1        while(--dy);
 323   1      }
 324          
 325          /*************初始化LCD屏***************/
 326          void  init_lcd_12864()
 327          {   
 328   1      clear_screen_12864(); 
 329   1      cs1_12864=1;cs2_12864=0;         //右屏
 330   1      delay_12864();
 331   1      write_command_12864(disp_off_12864);
 332   1      write_command_12864(start_line_12864);
 333   1      write_command_12864(disp_on_12864); 
 334   1      cs1_12864=0;cs2_12864=1;      //左屏
 335   1      delay_12864();
 336   1      write_command_12864(disp_off_12864);
 337   1      write_command_12864(start_line_12864);
 338   1      write_command_12864(disp_on_12864);  
 339   1      }
 340          
 341          /*******写指令到LCD*********/
 342          void write_command_12864 (unsigned char cmdcode)
 343          {
 344   1      //lcd_busy();
 345   1      di_12864 =0;
 346   1      rw_12864 =0;
 347   1      lcd_bus_12864 =cmdcode;      //输入控制命令(display on/off,display startline,row,col)
 348   1      enable_12864 =1;
 349   1      _nop_();
 350   1      enable_12864 =0;
 351   1      }
 352          
 353          /***********写显示的数据到LCD***********/
 354          void write_data_12864 (unsigned char dispdata)
 355          {
 356   1      //lcd_busy();
 357   1      di_12864 =1;
 358   1      rw_12864 =0;
 359   1      lcd_bus_12864 =dispdata;
 360   1      enable_12864 =1;
 361   1      _nop_();
 362   1      enable_12864 =0;
 363   1      }
 364          
 365          
C51 COMPILER V7.20   TEXT1                                                                 07/15/2007 16:48:55 PAGE 7   

 366          /**************键盘扫描************/
 367          uchar keyscan(void)
 368          {
 369   1              uchar scancode,tmpcode;
 370   1              P2 = 0xf0;
 371   1              if ((P2&0xf0)!=0xf0)
 372   1              {
 373   2                      delay_12864();
 374   2                      if ((P2&0xf0)!=0xf0)
 375   2                      {
 376   3                              scancode = 0xfe;
 377   3                              while((scancode&0x10)!=0)
 378   3                              {
 379   4                                      P2 = scancode;
 380   4                                      if ((P2&0xf0)!=0xf0)
 381   4                                      {
 382   5                                              tmpcode = (P2&0xf0)|0x0f;
 383   5                                              return((~scancode)+(~tmpcode));
 384   5                                      }
 385   4                                      else scancode = (scancode<<1)|0x01;     
 386   4                              }
 387   3                      }
 388   2              }
 389   1              return(0);
 390   1      }
 391          
 392          
 393          uchar change(uchar k)
 394          {
 395   1         switch(k)
 396   1         {
 397   2            case 0x22:return('2');
 398   2                case 0x24:return('3');
 399   2                case 0x41:return('4');
 400   2                case 0x42:return('5');
 401   2                case 0x44:return('6');
 402   2                case 0x81:return('7');
 403   2                case 0x82:return('8');
 404   2                case 0x84:return('9');
 405   2         }
 406   1      } 
 407          
 408          void attempt(uchar *in,uchar n)
 409          {         
 410   1         struct index *ha,*hb;
 411   1         uchar i,re;
 412   1         re=cx;
 413   1         cx=0;
 414   1         if(n==1)
 415   1         {
 416   2            ha=find1;
 417   2                hb=ha+sizeof(find1)/sizeof(find1[0]);
 418   2         }
 419   1         else if(n==2)
 420   1         {
 421   2            ha=find2;
 422   2                hb=ha+sizeof(find2)/sizeof(find2[0]);
 423   2         }
 424   1         else if(n==3)
 425   1         {
 426   2            ha=find3;
 427   2                hb=ha+sizeof(find3)/sizeof(find3[0]);
C51 COMPILER V7.20   TEXT1                                                                 07/15/2007 16:48:55 PAGE 8   

 428   2         }
 429   1         else if(n==4)
 430   1         {
 431   2            ha=find4;
 432   2                hb=ha+sizeof(find4)/sizeof(find4[0]);
 433   2         }
 434   1         else if(n==5)
 435   1         {
 436   2            ha=find5;
 437   2                hb=ha+sizeof(find5)/sizeof(find5[0]);
 438   2         }
 439   1         else if(n==6)
 440   1         {
 441   2            ha=find6;
 442   2                hb=ha+sizeof(find6)/sizeof(find6[0]);
 443   2         }
 444   1         while(ha<hb)
 445   1         {
 446   2            for(i=0;i<n;i++)
 447   2                {
 448   3                   if(*(in+i)!=*((*ha).num+i))
 449   3                       {
 450   4                          break;
 451   4                       }
 452   3                }
 453   2                if(i==n&&cx<6)
 454   2                {
 455   3                   p[cx]=ha;
 456   3                       cx++;
 457   3                }
 458   2                ha++;
 459   2         }
 460   1         if(cx==0)
 461   1         {
 462   2           cx=re;
 463   2               length--;
 464   2         }
 465   1      }
 466          
 467          
 468          
 469          void out()
 470          {
 471   1         uchar i,locx,locy,j,k,l,aa,bb,max,min;
 472   1         aa=cs1_12864;
 473   1         bb=cs2_12864;
 474   1         if((cx*length)>16)
 475   1         {
 476   2            if(((staren+1)*length)<=16)
 477   2                {
 478   3                   min=0;
 479   3                       max=cx;
 480   3                       while((max*length)>16)
 481   3                          max--;
 482   3                }
 483   2                else
 484   2                {
 485   3                   max=cx;
 486   3                       min=cx;
 487   3                       while((min*length)>16)
 488   3                          min--;
 489   3                }
C51 COMPILER V7.20   TEXT1                                                                 07/15/2007 16:48:55 PAGE 9   

 490   2          }
 491   1              else
 492   1              {  
 493   2                 max=cx;
 494   2                 min=0;
 495   2              }
 496   1         cs1_12864=0;
 497   1         cs2_12864=1;
 498   1         locx=col_12864;
 499   1         locy=row_12864+6;
 500   1         for(l=min;l<max;l++)
 501   1         {
 502   2            for(i=0;i<length;i++)
 503   2            {
 504   3              k=0;
 505   3                  write_command_12864(locx);
 506   3              write_command_12864(locy);
 507   3              for(j=0;j<8;j++)
 508   3                  {
 509   4                         if(l==staren)
 510   4                            write_data_12864(~asc[(*(p[l]->zimu+i)-'a')*16+(k++)]);
 511   4                         else
 512   4                        write_data_12864(asc[(*(p[l]->zimu+i)-'a')*16+(k++)]);
 513   4                  }
 514   3                  locy++;
 515   3                  write_command_12864(locx);
 516   3              write_command_12864(locy);
 517   3                  for(j=0;j<8;j++)
 518   3                  {
 519   4                         if(l==staren)
 520   4                            write_data_12864(~asc[(*(p[l]->zimu+i)-'a')*16+(k++)]);
 521   4                         else
 522   4                        write_data_12864(asc[(*(p[l]->zimu+i)-'a')*16+(k++)]);
 523   4                  }
 524   3                      if(locx>(col_12864+54))
 525   3                      {
 526   4                         cs1_12864=1;
 527   4                 cs2_12864=0;
 528   4                         locx=col_12864;
 529   4                      }
 530   3                      else
 531   3                     locx+=8;
 532   3                  locy--;
 533   3            }
 534   2         }
 535   1         cs1_12864=aa;
 536   1         cs2_12864=bb;
 537   1      }
 538          
 539          
 540          void outen(struct index *pz,uchar n)
 541          {
 542   1         uchar i,locx,locy,j,k,aa,bb;
 543   1         aa=cs1_12864;
 544   1         bb=cs2_12864;
 545   1         cs1_12864=0;
 546   1         cs2_12864=1;
 547   1         locx=col_12864;
 548   1         locy=row_12864+6;
 549   1         for(i=0;i<n;i++)
 550   1         {
 551   2            k=0;
C51 COMPILER V7.20   TEXT1                                                                 07/15/2007 16:48:55 PAGE 10  

 552   2                write_command_12864(locx);
 553   2            write_command_12864(locy);
 554   2            for(j=0;j<8;j++)
 555   2                {
 556   3                   write_data_12864(asc[(*(pz->zimu+i)-'a')*16+(k++)]);
 557   3                }
 558   2                locy++;
 559   2                write_command_12864(locx);
 560   2            write_command_12864(locy);
 561   2                for(j=0;j<8;j++)
 562   2                {
 563   3                   write_data_12864(asc[(*(pz->zimu+i)-'a')*16+(k++)]);
 564   3                }
 565   2                locx+=8;
 566   2                locy--;
 567   2         }
 568   1         cs1_12864=aa;
 569   1         cs2_12864=bb;
 570   1      }
 571          
 572          
 573          void qing()
 574          {
 575   1         uchar i,aa,bb;
 576   1         aa=cs1_12864;
 577   1         bb=cs2_12864;
 578   1         cs1_12864=0;
 579   1         cs2_12864=1;

⌨️ 快捷键说明

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