lcmdrv.lst

来自「51单片机在lcd上实现zlg gui,希望好的请多加点分数」· LST 代码 · 共 489 行 · 第 1/2 页

LST
489
字号
C51 COMPILER V7.50   LCMDRV                                                                09/11/2007 21:56:41 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCMDRV
OBJECT MODULE PLACED IN .\OBJ\lcmdrv.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE lcmdrv.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\LST\lcmdrv.lst) OBJECT(.\O
                    -BJ\lcmdrv.obj)

line level    source

   1          /****************************************************************************
   2          * 文件名:LCMDRV.C
   3          * 功能:MG12864图形液晶模块驱动程序。使用LPC2131的GPIO口控制操作。
   4          *       用于ZLG/GUI用户图形界面。
   5          * 液晶模块与LPC2131的连接如下所示:
   6          *       D0 (7)  --              P0.4
   7          *       .               --              .
   8          *       .               --              .
   9          *       .               --              .
  10          *       D7 (14) --              P0.11
  11          *
  12          *       CS1             --              P0.12
  13          *       CS2             --              P0.13
  14          *       
  15          *   RST     --      P0.14
  16          *       D/I             --              P0.15
  17          *       R/W             --              GND
  18          *       E               --              P0.16
  19          *
  20          *  R/W为0进行写操作,为1时进行读操作;
  21          *  D/I为1表示数据传送, 为0表示命令传送;
  22          *  E读写脉冲;
  23          *  CS1和CS2为左右半屏选择,高电平选中;
  24          *  RST为复位控制,低电平复位。
  25          *  
  26          *  作者:黄绍斌
  27          *  日期:2005/3/7
  28          ****************************************************************************/
  29          #include        "config.h"
  30          #define         LCM_BUS     P1                                             
  31          #define         LCM_DI          P3_0                                        
  32          #define         LCM_RW          P3_1                                         
  33          #define         LCM_E           P3_2                                         
  34          #define         LCM_CS1         P3_4                                           
  35          #define         LCM_CS2         P3_3                                        
  36          #define         LCM_RST     P3_5       
  37          //================================================================
  38          //  KS0108指令代码定义
  39          //================================================================
  40          //#define  Set_Disp_On  0x3F
  41          //#define  Set_Disp_Off         0x3E
  42          //#define  Set_Column   0x40
  43          //#define  Set_Page             0xB8
  44          //#define  Set_Start_Line 0xC0
  45          
  46          
  47          
  48          
  49          /* 定义显示缓冲区 */
  50          TCOLOR  gui_disp_buf[GUI_LCM_YMAX/8][GUI_LCM_XMAX];
  51          
  52          
  53          /* 定义总线起始的GPIO,即D0对应的GPIO值(P0.4) */
  54          #define  BUS_NO         4
C51 COMPILER V7.50   LCMDRV                                                                09/11/2007 21:56:41 PAGE 2   

  55          
  56          /* 输出总线数据宏定义 */
  57          #define  OutData(dat)   LCM_BUS= dat
  58          
  59          
  60          /* 定义CS1控制 */
  61          #define  SCS1()         LCM_CS1=1
  62          #define  CCS1()         LCM_CS1=0
  63          
  64          /* 定义CS2控制 */
  65          #define  SCS2()         LCM_CS2=1
  66          #define  CCS2()         LCM_CS2=0
  67          
  68          /* 定义RST控制 */
  69          
  70          #define  SRST()         LCM_RST=1
  71          #define  CRST()         LCM_RST=0
  72          
  73          
  74          /* 定义DI控制 */
  75          #define  SDI()          LCM_DI=1
  76          #define  CDI()          LCM_DI=0
  77          
  78          
  79          /* 定义E控制 */
  80          
  81          #define  SE()           LCM_E=1
  82          #define  CE()           LCM_E=0
  83          
  84          /*定义RW控制*/
  85          #define  SRW()          LCM_RW=1;
  86          #define  CRW()          LCM_RW=0;
  87          /* 定义LCM操作的命令字 */
  88          #define LCM_DISPON                      0x3F    /* 打开LCM显示                                                                                                  */
  89          #define LCM_DISPOFF                     0x3E    /* 关闭LCM显示                                                                                          */
  90          #define LCM_STARTROW            0xc0    /* 显示起始行0,可以用LCM_STARTROW+x设置起始行。(x<64)          */
  91          #define LCM_ADDRSTRX            0xb8    /* 页起始地址,可以用LCM_ADDRSTRX+x设置当前页(即X)。(x<8)               */
  92          #define LCM_ADDRSTRY            0x40    /* 列起始地址,可以用LCM_ADDRSTRY+x设置当前列(即Y)。(x<64)              */      
  93          
  94          
  95          /*********************************************************************************
  96          * 名称:DELAY5()
  97          * 功能:软件延时函数。用于LCM显示输出时序控制。
  98          * 入口参数:无
  99          * 出口参数:无
 100          **********************************************************************************/
 101          void DELAY5(void)
 102          { int i;
 103   1      
 104   1        for(i=0; i<10; i++);
 105   1      }
 106          
 107          
 108          /***********************************************************************
 109          * 名称:LCM_WrCommand()
 110          * 功能:写命令子程序
 111          * 入口参数:command     要写入LCM的命令字
 112          * 注:数据口为P0口(作IO口)
 113          ***********************************************************************/
 114          void LCM_WrCommand(uint8 command) 
 115          { 
 116   1              CE();                           // 先将E置为低                                  
C51 COMPILER V7.50   LCMDRV                                                                09/11/2007 21:56:41 PAGE 3   

 117   1              CDI();                  // DI=0,表示发送命令
 118   1              CRW();                          
 119   1                
 120   1              OutData(command);           
 121   1        //    DELAY5();     
 122   1              SE();
 123   1        //    DELAY5();     
 124   1              CE();
 125   1        //    DELAY5();
 126   1               
 127   1      }
 128          
 129          
 130          /***********************************************************************
 131          * 名称:LCM_WrData()
 132          * 功能:写数据子程序
 133          * 入口参数:wrdata      要写入LCM的数据
 134          ***********************************************************************/
 135          void LCM_WrData(uint8 wrdata) 
 136          { 
 137   1              CE();                   // 先将E置为低  
 138   1              SDI();          // DI=1,表示发送数据   
 139   1          CRW();     
 140   1              OutData(wrdata);       
 141   1              //DELAY5();     
 142   1              SE();
 143   1              //DELAY5();     
 144   1              CE();     
 145   1              //DELAY5(); 
 146   1             
 147   1      }
 148          
 149          
 150          /***********************************************************************
 151          * 名称:LCM_WriteByte()
 152          * 功能:向指定点写数据(一字节)。
 153          * 入口参数:x           x坐标值(0-127)
 154          *               y       y坐标值(0-63)
 155          *           wrdata      所要写的数据
 156          * 说明:会重新设置CS1/CS2,及其内部指针
 157          ***********************************************************************/
 158          void LCM_WriteByte(uint8 x, uint8 y, uint8 wrdata) 
 159          { x = x&0x7f;                           // 参数过滤
 160   1        y = y&0x3f;
 161   1      
 162   1        CCS1();
 163   1        CCS2();
 164   1        
 165   1        //更新显示缓冲区
 166   1        y = y>>3;
 167   1        gui_disp_buf[y][x] = wrdata;
 168   1         
 169   1        // 更新LCD显示
 170   1        if(x<64)                                      // 选择液晶控制芯片(即CS1--控制前64个点,CS2--控制后64个点)
 171   1        { SCS1();  
 172   2        }
 173   1        else
 174   1        { SCS2();
 175   2          x = x-64;
 176   2        }
 177   1        LCM_WrCommand(LCM_ADDRSTRY+x);        // 设置当前列地址,即x坐标
 178   1        LCM_WrCommand(LCM_ADDRSTRX+y);        // 设置当前页地址,即y坐标
C51 COMPILER V7.50   LCMDRV                                                                09/11/2007 21:56:41 PAGE 4   

 179   1      
 180   1        LCM_WrData(wrdata);
 181   1      }
 182          
 183          
 184          /***********************************************************************
 185          * 名称:LCM_ReadByte()
 186          * 功能:读取指定点上的数据。
 187          * 入口参数:x     x坐标值(0-127)
 188          *                   y     y坐标值(0-63)
 189          * 出口参数:返回该点上的字节数据。
 190          ***********************************************************************/
 191          uint8  LCM_ReadByte(uint8 x, uint8 y)
 192          { x = x&0x7f;                           // 参数过滤
 193   1        y = y&0x3f;
 194   1      
 195   1        y = y>>3;
 196   1        return(gui_disp_buf[y][x]);
 197   1      }
 198          
 199          
 200          
 201          /////////////////////////////////////////////////////////////////////////
 202          
 203          
 204          /***********************************************************************
 205          * 名称:LCM_DispFill()
 206          * 功能:向显示缓冲区填充数据
 207          * 入口参数:filldata    要写入LCM的填充数据
 208          * 注:此函数会设置显示起始行为0,且会自动选中CS1有效
 209          ***********************************************************************/
 210          void LCM_DispFill(uint8 filldata)
 211          { uint8  x,y;
 212   1      
 213   1        SCS1();                       // 选中两个控制芯片     
 214   1        CCS2();
 215   1              
 216   1        LCM_WrCommand(LCM_STARTROW);          // 设置显示起始行为0
 217   1      
 218   1        for(x=0; x<8; x++)
 219   1        { LCM_WrCommand(LCM_ADDRSTRX+x);      // 设置页地址,即X
 220   2              LCM_WrCommand(LCM_ADDRSTRY);    // 设置列地址,即Y
 221   2          for(y=0; y<64; y++)
 222   2          { LCM_WrData(filldata);
 223   3              }       
 224   2        }
 225   1      
 226   1        SCS2();
 227   1        CCS1();
 228   1        LCM_WrCommand(LCM_STARTROW);          // 设置显示起始行为0
 229   1      

⌨️ 快捷键说明

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