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

📄 lcd.lst

📁 240128液晶底层驱动以及键盘操作编写菜单
💻 LST
📖 第 1 页 / 共 4 页
字号:
 509   1         {
 510   2          for(i=0;i<250;i++);
 511   2         }
 512   1      }
 513          //////////////////LCD写命令字函数 ///////////////////////////////////////
 514          void LCD_Write_Com(uchar CMD)
 515          { 
 516   1       // Check_Busy();///检测忙信号////
 517   1        PORTB=CMD;      /// 将命令字符送往数据口 ///
 518   1        CS=0;
 519   1        RAD=1;
 520   1        RS=0; 
 521   1        WRT=0;
 522   1        LCD_NOP();
 523   1        WRT=1;
 524   1        RS=1;
 525   1        CS=1;
 526   1      }
 527          //////////////LCD写数据函数 /////////////////////////////////////////////////
 528          void LCD_Write_Dat(uchar x_data)
 529          { 
 530   1       // Check_Busy();///检测忙信号////
 531   1        PORTB=x_data;      /// 将数据字符送往数据口 ///
 532   1        CS=0;
 533   1        RAD=1;
 534   1        RS=1; 
 535   1        WRT=0;
 536   1        LCD_NOP();
 537   1        WRT=1;
 538   1        RS=1;
 539   1        CS=1;
 540   1      }
 541          //////////////LCD读取数据函数 /////////////////////////////////////////////////
 542          uchar LCD_Read_Dat(void)
 543          { 
 544   1        uchar x_data;
 545   1       // Check_Busy();///检测忙信号////
 546   1        PORTB=0xff;    /// 将数据0xff送往数据口 ///
 547   1        CS=0;  
 548   1        WRT=1;
 549   1        RS=0;
 550   1        RAD=0;
C51 COMPILER V7.50   LCD                                                                   05/13/2008 18:45:43 PAGE 10  

 551   1        LCD_NOP();
 552   1        x_data=PORTB; 
 553   1        RS=1;
 554   1        RAD=1;
 555   1        CS=1;
 556   1        return(x_data);
 557   1      }
 558          //////////////LCD设定功能函数 /////////////////////////////////////////////////
 559          void LCD_Write_Funtion(uchar CMD,uchar x_data)
 560          { 
 561   1        LCD_Write_Com(CMD);
 562   1        LCD_Write_Com(x_data);
 563   1      }
 564          
 565          //////////////LCD读取缓冲器函数 /////////////////////////////////////////////////
 566          uchar LCD_Read_Funtion(uchar CMD)
 567          { 
 568   1        LCD_Write_Com(CMD);
 569   1        return(LCD_Read_Dat());
 570   1      }
 571          
 572          //////////////LCD参数初始化函数 /////////////////////////////////////////////////
 573          void LCD_Init(void)
 574          {
 575   1       //初始化参数表:前面的是寄存器地址,后面的是参数
 576   1       //LCD_Write_Funtion(0x00,0xCD);//LCD基本显示功能设定 文本模式
 577   1       LCD_Write_Funtion(0x00,0xCC);//LCD基本显示功能设定 文本模式
 578   1       LCD_Write_Funtion(0x01,0xF0);//中断准位(高电平) / 设定系统频率8MHz
 579   1       LCD_Write_Funtion(0x02,0x10);//LCD内存读写速度与功能设定(读字形ROM)
 580   1       LCD_Write_Funtion(0x03,0x80);//LCD特殊显示功能
 581   1      // LCD_Write_Funtion(0x10,0x6B);//LCD基本显示功能设定 2
 582   1       LCD_Write_Funtion(0x10,0x4B);//LCD基本显示功能设定 光标不自动移位
 583   1       LCD_Write_Funtion(0x11,0x00);//光标高度和行距设定
 584   1       LCD_Write_Funtion(0x12,0x91) ;//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
 585   1       LCD_Write_Funtion(0x20,0x1E) ;//实际显示窗口垂直结束地址(LCD屏的分辨率30*8=240)
 586   1       LCD_Write_Funtion(0x30,0x7F) ;//实际显示窗口水平结束地址(128)
 587   1       LCD_Write_Funtion(0x40,0x00) ;//实际显示窗口垂直起始地址
 588   1       LCD_Write_Funtion(0x50,0x00) ;//实际显示窗口水平起始地址
 589   1       LCD_Write_Funtion(0x21,0x1E) ;//工作区窗口垂直结束地址(用户指定的显示窗口)
 590   1       LCD_Write_Funtion(0x31,0x7F) ;//工作区窗口水平结束地址
 591   1       LCD_Write_Funtion(0x41,0x00) ;//工作区窗口垂直起始地址
 592   1       LCD_Write_Funtion(0x51,0x00) ;//工作区窗口水平起始地址
 593   1       LCD_Write_Funtion(0x60,0x00) ;//地址定位
 594   1       LCD_Write_Funtion(0x61,0x00) ;//
 595   1       LCD_Write_Funtion(0x70,0x00) ;//
 596   1       LCD_Write_Funtion(0x71,0x00) ;//
 597   1       LCD_Write_Funtion(0x72,0x00) ;//
 598   1       LCD_Write_Funtion(0x80,0xAA) ;//光标闪烁时间
 599   1       LCD_Write_Funtion(0x81,0x04) ;//保留
 600   1       LCD_Write_Funtion(0x91,0x00) ;//保留
 601   1       LCD_Write_Funtion(0x90,0x10) ;//值太大屏幕会闪烁
 602   1       LCD_Write_Funtion(0xA0,0x11) ;//键、触摸屏、光标行列状态
 603   1       LCD_Write_Funtion(0xA1,0x00) ;
 604   1       LCD_Write_Funtion(0xA2,0x00) ;
 605   1       LCD_Write_Funtion(0xA3,0x00) ;
 606   1       LCD_Write_Funtion(0xB0,0x27) ;
 607   1       LCD_Write_Funtion(0xB1,0xEF) ;
 608   1       LCD_Write_Funtion(0xC0,0x00) ;
 609   1       LCD_Write_Funtion(0xC1,0x0A) ;
 610   1       LCD_Write_Funtion(0xC8,0x80) ;
 611   1       LCD_Write_Funtion(0xC9,0x80) ;
 612   1       LCD_Write_Funtion(0xCA,0x00) ;
C51 COMPILER V7.50   LCD                                                                   05/13/2008 18:45:43 PAGE 11  

 613   1       LCD_Write_Funtion(0xD0,0x80) ;
 614   1       LCD_Write_Funtion(0xE0,0x00) ;//自动写此寄存器的数据到DDRAM(图形模式有效)
 615   1       LCD_Write_Funtion(0xF0,0xA0) ;//字符字体控制
 616   1       LCD_Write_Funtion(0xF1,0x0F) ;//字符点阵大小控制
 617   1      ///39//
 618   1      }
 619          //////////清除文本层显示数据函数 ///////////////////
 620          void LCD_Clear_Text(void)
 621          {
 622   1        uchar i,j;
 623   1        LCD_Write_Funtion(0x00,0xCD);//文本模式
 624   1        LCD_Write_Funtion(0x10,0x61);//写光标bu自动移位//光标不显示//光标不闪烁//自适应宽度//
 625   1        LCD_Write_Funtion(0xF0,0xA0);//ASII区块0//
 626   1        for(i=0;i<8;i++)/////共8行文本//////
 627   1         {
 628   2          for(j=0;j<30;j++)////水平30个字节宽//
 629   2              {        
 630   3               LCD_Write_Funtion(0x60,j);//地址定位
 631   3           LCD_Write_Funtion(0x70,16*i);//地址定位
 632   3           LCD_Write_Dat(0x20);////连续写入8X30个空格的ASII码//       
 633   3              }       
 634   2         }
 635   1      } 
 636          //////////清除图形层显示数据函数 ///////////////////
 637          void LCD_Clear_Graphics(void)
 638          {
 639   1        uchar i,j;
 640   1        LCD_Write_Funtion(0x00,0xC5); //图形模式
 641   1        LCD_Write_Funtion(0x10,0x61);//写光标bu自动移位//光标不显示//光标不闪烁//自适应宽度//
 642   1        LCD_Write_Funtion(0x12,0x91);//显示层设定:高位8灰度,9水平单一层,A单二层,B同时一二层
 643   1        for(i=0;i<128;i++)/////垂直共128行//////
 644   1         {
 645   2          for(j=0;j<30;j++)////水平30个字节宽//
 646   2              {
 647   3           LCD_Write_Funtion(0x60,j);//地址定位
 648   3           LCD_Write_Funtion(0x70,i);//地址定位
 649   3               LCD_Write_Dat(0x00); ////每页连续写入128X30个数据/////         
 650   3              }           
 651   2         }  
 652   1      }
 653          
 654          //////////////////写汉字字符串函数 /////////////////////////////////
 655          void LCD_Write_word(uchar LCM_X,uchar LCM_Y,uchar *ptr)//LCM_X的范围是0-29//写汉字时应该为偶数,写字符串时
             -无限制/////////////////
 656          {                                                ////////LCM_Y的范围是0-127///////
 657   1        uchar i=0;
 658   1        LCD_Write_Funtion(0x00,0xCD);//文本模式
 659   1        LCD_Write_Funtion(0x10,0x69);//写光标自动移位//光标不显示//光标不闪烁//自适应宽度//
 660   1        LCD_Write_Funtion(0xF0,0xA0);//ASII区块0//
 661   1        LCD_Write_Funtion(0x60,LCM_X);//地址定位
 662   1        LCD_Write_Funtion(0x70,LCM_Y);//地址定位  
 663   1        while (*ptr != '%')////利用数组最后有空格作为信息结束的判断/////
 664   1         { 
 665   2           if((LCM_X+i)>=30)
 666   2               {
 667   3                 LCM_X=0;
 668   3                 LCM_Y=LCM_Y+16;
 669   3                 i=0;
 670   3                 LCD_Write_Funtion(0x60,LCM_X) ;//地址定位
 671   3             LCD_Write_Funtion(0x70,LCM_Y) ;//地址定位  
 672   3               }      
 673   2          LCD_Write_Dat(*ptr++);
C51 COMPILER V7.50   LCD                                                                   05/13/2008 18:45:43 PAGE 12  

 674   2              i++;    
 675   2         }
 676   1      }
 677          //////////////////横向写不规则字符串函数 /////////////////////////////////
 678          void H_Write_abnormity_string(uchar LCM_X,uchar LCM_Y,uchar x_data,uchar number)//LCM_X的范围是0-29//写汉

⌨️ 快捷键说明

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