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

📄 t9_v1.lst

📁 基于51单片机的T9输入法的源程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
 266          
 267          
 268          /**************************************************************************************************
 269          *
 270          *从LCD的RAM中读数据
 271          *函数声明:uchar read_data();  
 272          *返回参数:uchar型为RAM中的数据
 273          *
 274          *
 275          **************************************************************************************************/
 276          uchar read_data()  
 277          {
 278   1                uchar din;
 279   1                LCD_BUS=0xff;
 280   1                DI=1; RW=1;
 281   1            E=0;
 282   1                E=0;
 283   1                E=1;
 284   1                E=1;
 285   1                E=1;
 286   1                din=LCD_BUS;
 287   1                return din;        
 288   1      }
 289          
 290          
 291          /**************************************************************************************************
 292          *
 293          *画竖线函数
 294          *函数声明:void line_v(uchar x,uchar y,uchar l);
 295          *函数参数:x,y分别为LCD的横向和纵向的坐标值,l为竖线的长度
 296          *
 297          *
 298          **************************************************************************************************/
 299          void line_v(uchar x,uchar y,uchar l)
 300          {
 301   1          uchar i;
 302   1              for(i=0;i<l;i++) point(x,y+i);
 303   1            
C51 COMPILER V7.50   T9_V1                                                                 05/01/2006 11:18:37 PAGE 6   

 304   1      }
 305          
 306          /**************************************************************************************************
 307          *
 308          *画横线函数
 309          *函数声明:void line_h(uchar x,uchar y,uchar l);
 310          *函数参数:x,y分别为LCD的横向和纵向的坐标值,l为横线的长度
 311          *
 312          *
 313          **************************************************************************************************/
 314          void line_h(uchar x,uchar y,uchar l)
 315          {
 316   1          uchar i;
 317   1              for(i=0;i<l;i++) point(x+i,y);
 318   1            
 319   1      }
 320          
 321          /**************************************************************************************************
 322          *
 323          *在LCD的任意位置画点的函数
 324          *函数声明:void point(uchar x,uchar y);
 325          *函数参数:x为lcd的列坐标(0-127),y为lcd的纵坐标(0-63)
 326          *利用此函数能在LCD12864的任意位置画一个点
 327          *
 328          **************************************************************************************************/
 329          void point(uchar x,uchar y)
 330          {
 331   1        uchar y1,y2,pp;
 332   1        uchar datain;
 333   1        pp=1;
 334   1        y1=y>>3;
 335   1        y2=y%8;
 336   1        pp=pp<<y2;
 337   1        if (x<64)
 338   1        {
 339   2          CS2=1;
 340   2              CS1=0;
 341   2              write_cmd(PAGE+y1);
 342   2          write_cmd(COL+x);  
 343   2          datain=read_data();
 344   2          write_cmd(PAGE+y1);
 345   2          write_cmd(COL+x);
 346   2          delay(10);
 347   2          datain=read_data();
 348   2      
 349   2          write_cmd(PAGE+y1);
 350   2          write_cmd(COL+x);
 351   2          datain=datain|pp;
 352   2          write_data(datain);
 353   2        }
 354   1        else
 355   1        {
 356   2      
 357   2          CS2=0;
 358   2              CS1=1;
 359   2              write_cmd(PAGE+y1);
 360   2              write_cmd(COL+x-64);
 361   2          datain=read_data();
 362   2          write_cmd(PAGE+y1);
 363   2          write_cmd(COL+x-64);
 364   2          delay(10);
 365   2          datain=read_data();
C51 COMPILER V7.50   T9_V1                                                                 05/01/2006 11:18:37 PAGE 7   

 366   2          write_cmd(PAGE+y1);
 367   2          write_cmd(COL+x-64);
 368   2          datain=datain|pp;
 369   2          write_data(datain);
 370   2        }
 371   1        
 372   1      
 373   1        
 374   1      }
 375          
 376          
 377          /**************************************************************************************************
 378          *
 379          *初始化LCD屏函数
 380          *函数声明:void init(); 
 381          *函数参数:无
 382          *函数作用:对LCD做初始化操作
 383          *
 384          **************************************************************************************************/
 385          void init()  
 386          {
 387   1      
 388   1                delay(100);
 389   1            CS2=1; CS1=0;
 390   1                delay(100);
 391   1                write_cmd(DISP_OFF);
 392   1                write_cmd(PAGE);
 393   1                write_cmd(START_LINE);
 394   1                write_cmd(COL);
 395   1                write_cmd(DISP_ON);
 396   1                CS2=0; CS1=1;
 397   1                delay(100);
 398   1                write_cmd(DISP_OFF);
 399   1                write_cmd(PAGE);
 400   1                write_cmd(START_LINE);
 401   1                write_cmd(COL);
 402   1                write_cmd(DISP_ON);
 403   1      }
 404          
 405          /**************************************************************************************************
 406          *
 407          *清屏函数
 408          *函数声明:void cls();
 409          *函数参数:无
 410          *函数作用:
 411          *
 412          **************************************************************************************************/
 413          void cls()  
 414          {
 415   1            uchar j,k;
 416   1            CS2=1;CS1=0;
 417   1            for(k=0;k<8;k++)
 418   1            {
 419   2                  write_cmd(PAGE+k);
 420   2                  write_cmd(COL);       //列地址0
 421   2                      for(j=0;j<64;j++)     //列地址自动加一
 422   2                            write_data(0x00);
 423   2            }
 424   1                CS2=0;CS1=1;
 425   1                for(k=0;k<8;k++)
 426   1            {
 427   2                      write_cmd(PAGE+k);
C51 COMPILER V7.50   T9_V1                                                                 05/01/2006 11:18:37 PAGE 8   

 428   2                      write_cmd(COL);           //列地址0
 429   2                      for(j=0;j<64;j++)         //列地址自动加一
 430   2                              write_data(0x00);
 431   2            }
 432   1      }
 433          
 434          
 435          
 436          
 437          
 438          /**************************************************************************************************
 439          *
 440          *显示12*16点阵的汉字函数
 441          *函数声明:void display_h(uchar page,uchar col,uchar code *str,uchar n);
 442          *函数参数:page为页地址(0-7),col为列地址(0-127),str为数组名,n为要显示第n个汉字点阵
 443          *函数作用:
 444          *
 445          **************************************************************************************************/
 446          void display_h(uchar page,uchar col,uchar code *str,uchar n)
 447          {
 448   1            uchar i,j;
 449   1                uchar num;
 450   1                if(col<=52)
 451   1                {
 452   2                      CS2=1;CS1=0;
 453   2                              for(j=0;j<2;j++)
 454   2                      {
 455   3                                write_cmd(PAGE+page+j);write_cmd(COL+col);
 456   3                                for(i=0;i<12;i++)
 457   3                                      write_data(str[n*24+12*j+i]);
 458   3                      }
 459   2                }
 460   1                else if(col>=64)
 461   1                {
 462   2                          CS2=0;CS1=1;
 463   2                          col=col-64;
 464   2                              for(j=0;j<2;j++)
 465   2                      {
 466   3                                write_cmd(PAGE+page+j);write_cmd(COL+col);
 467   3                                for(i=0;i<12;i++)
 468   3                                      write_data(str[n*24+12*j+i]);
 469   3                      }
 470   2                }
 471   1      
 472   1                
 473   1                else if(col>52&&col<64)    //处理跨屏幕的汉字书写的函数
 474   1                {
 475   2                    num=64-col;                                                                                 
 476   2                        CS2=1;CS1=0;
 477   2      
 478   2                        for(j=0;j<2;j++)
 479   2                        {
 480   3                                write_cmd(PAGE+page+j);write_cmd(COL+col);
 481   3                                for(i=0;i<num;i++)
 482   3                                      write_data(str[n*24+12*j+i]);  
 483   3                        }
 484   2                        CS2=0;CS1=1;
 485   2                        col=0;
 486   2                        for(j=0;j<2;j++)
 487   2                        {
 488   3                                write_cmd(PAGE+page+j);write_cmd(COL+col);
 489   3                                for(i=num;i<12;i++)
C51 COMPILER V7.50   T9_V1                                                                 05/01/2006 11:18:37 PAGE 9   

 490   3                                      write_data(str[n*24+12*j+i]);  
 491   3                        }
 492   2      
 493   2      
 494   2                }
 495   1      
 496   1      }
 497          
 498          
 499          
 500          /**************************************************************************************************
 501          *
 502          *显示6*16点阵的英文函数
 503          *函数声明:void display_e(uchar page,uchar col,uchar code *str,uchar n);
 504          *函数参数:page为页地址(0-7),col为列地址(0-127),str为数组名,n为要显示第n个英文点阵
 505          *函数作用:
 506          *
 507          **************************************************************************************************/
 508          void display_e(uchar page,uchar col,uchar code *str,uchar n)
 509          {
 510   1          uchar i,j,num;
 511   1              if(col<=58)
 512   1              {
 513   2                        CS2=1;CS1=0; 
 514   2                        for(j=0;j<2;j++)
 515   2                    {
 516   3                              write_cmd(PAGE+page+j);write_cmd(COL+col);
 517   3                              for(i=0;i<6;i++)
 518   3                                        write_data(str[n*12+6*j+i]);
 519   3                    }
 520   2              }
 521   1              else if(col>=64)
 522   1              {
 523   2                        CS2=0;CS1=1;
 524   2                        col=col-64;
 525   2                        for(j=0;j<2;j++)
 526   2                    {
 527   3                              write_cmd(PAGE+page+j);write_cmd(COL+col);
 528   3                              for(i=0;i<6;i++)
 529   3                                        write_data(str[n*12+6*j+i]);
 530   3                    }
 531   2      
 532   2              }
 533   1              else if(col>58&&col<64)
 534   1              {
 535   2                    num=64-col;
 536   2                        CS2=1;CS1=0;
 537   2                         
 538   2                        for(j=0;j<2;j++)
 539   2                    {

⌨️ 快捷键说明

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