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

📄 lcd_plug_12864j.lst

📁 C51单片机对st7920并行方式驱动128*64液晶驱动,实现任意位置坐标位置写入图片;自动画线;自动画圆;任意位置反显等功能。
💻 LST
字号:
C51 COMPILER V8.15   LCD_PLUG_12864J                                                       03/17/2009 18:11:02 PAGE 1   


C51 COMPILER V8.15, COMPILATION OF MODULE LCD_PLUG_12864J
OBJECT MODULE PLACED IN LCD_plug_12864j.OBJ
COMPILER INVOKED BY: E:\Keil\C51\BIN\C51.EXE LCD_plug_12864j.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*=====================================================================*\
   2          |                                                                                                                                               |
   3          |名称:LCD功能模块集                                                                                                             |
   4          |                                                                                                                               |
   5          |工作模块:XYadr()           位置输入函数                                                                |
   6          |                 wcode()               工作状态输入函数                                                        |
   7          |                 wdata()                       数据输入函数                                                            |
   8          |                 read()                        数据读出函数                                                            |
   9          |                 LCDc()                        清屏函数                                                                        |
  10          |                 Display()                     显示开/关控制函数                                                       |
  11          |         startline()           开始行设置函数                                                          |
  12          |         reset()                       复位函数                                                                        |
  13          |                 time()                        延时函数                                                                        |
  14          |                                                                                                                                               |
  15          |调用函数:_nop_ ()                      空操作函数                                                                      |
  16          |                                                                                                                                               |
  17          \*=====================================================================*/
  18          
  19          #include <AT89X52.H>
  20          
  21          sbit E    = P2^0;                               //时钟端(从高变低时数据输入)
  22          sbit RW   = P2^7;                               //数据读(H)/写(L)选择
  23          sbit RS   = P2^6;                               //数据(H)/状态(L)寄存器选择
  24          sbit busy = P0^7;                               //lcd busy bit
  25          
  26          #define LOW             0
  27          #define HIGH    1
  28          #define comm  0
  29          #define dat   1
  30          
  31          #define ystart     0x80
  32          #define xustart    0x80
  33          #define xdstart    0x88
  34          
  35          //初始化指令
  36          #define CLEAR_SCREEN    0x01            //清屏指令:清屏且AC值为00H
  37          #define AC_INIT                 0x02            //将AC设置为00H。且游标移到原点位置
  38          #define CURSE_ADD               0x06            //设定游标移到方向及图像整体移动方向(默认游标右移,图像整体不动)
  39          #define FUN_MODE                0x30            //工作模式:8位基本指令集
  40          #define EXT_MODE                0x36            //工作模式:8位扩展指令集
  41          #define DISPLAY_ON              0x0f            //显示开,显示游标,且游标位置反白
  42          #define DISPLAY_OFF             0x08            //显示关
  43          #define CURSE_DIR               0x14            //游标向右移动:AC=AC+1
  44          #define SET_CG_AC               0x40            //设置AC,范围为:00H~3FH
  45          #define SET_DD_AC               0x80
  46          
  47          void wr_lcd(bit dat_comm,unsigned char content);
  48          void chk_busy (void);
  49          //void delay_us(unsigned char i);
  50          //void delay_ms(unsigned char i);
  51          void _nop_ (void);
  52          
  53          void init_lcd (void)
  54          {
  55   1              wr_lcd(comm,0x30);  /*30---基本指令动作*/
C51 COMPILER V8.15   LCD_PLUG_12864J                                                       03/17/2009 18:11:02 PAGE 2   

  56   1              wr_lcd(comm,0x01);  /*清屏,地址指针指向00H*/
  57   1              wr_lcd(comm,0x0c);  /*开显示,关游标*/ 
  58   1              wr_lcd(comm,0x06);  /*光标的移动方向*/
  59   1      }
  60          
  61          void wr_lcd(bit dat_comm,unsigned char content)  //工作状态(1)/数据(0)输入函数
  62          {
  63   1              chk_busy ();
  64   1              if(dat_comm)
  65   1              {
  66   2              RS = 1;   //data
  67   2              RW = 0;   //write
  68   2              }
  69   1              else 
  70   1              {
  71   2              RS = 0;   //command
  72   2              RW = 0;   //write
  73   2              }
  74   1              P0=content;   //output data or comm
  75   1              E=0;
  76   1              _nop_();
  77   1              E=1;
  78   1              _nop_();
  79   1              E=0;
  80   1      }
  81          
  82          unsigned char rd_lcd(void)                              //数据读出函数
  83          {
  84   1              unsigned char a;
  85   1              chk_busy ();
  86   1              RS = 1;
  87   1          RW = 1;   //read
  88   1          P1 = 0xFF;
  89   1              E = 1;
  90   1              a = P0;
  91   1              E = 0;
  92   1              RW = 0;   //write
  93   1              return(a);
  94   1      }
  95          
  96          void XYadr(unsigned char x,unsigned char y)
  97          {
  98   1              if(y > 31)
  99   1              {
 100   2                      x = x + xdstart;
 101   2                      y = y - 32 + ystart;
 102   2              }
 103   1              else
 104   1              {
 105   2                      x = x + xustart;
 106   2                      y = y + ystart;
 107   2              }
 108   1              wr_lcd(comm,y);
 109   1              wr_lcd(comm,x);
 110   1      }
 111          
 112          //使用前先用 wr_lcd(comm,0x02);//对游标地址复位
 113          void cursor_disp(bit open, unsigned char mode)  //游标反显,显示开关移动控制函数
 114          {
 115   1              if(open)
 116   1              {
 117   2                      switch (mode)
C51 COMPILER V8.15   LCD_PLUG_12864J                                                       03/17/2009 18:11:02 PAGE 3   

 118   2                      {
 119   3                  case 0:
 120   3                                wr_lcd(comm,0x0e);            /*开游标,关反显,游标不移*/
 121   3                                break;
 122   3                      case 1:
 123   3                                wr_lcd(comm,0x0e);            /*开游标,关反显,游标左移*/
 124   3                            wr_lcd(comm,0x10);
 125   3                                break;
 126   3                  case 2:
 127   3                                wr_lcd(comm,0x0e);            /*开游标,关反显,游标右移*/
 128   3                            wr_lcd(comm,0x14);
 129   3                                break;
 130   3                      case 3:
 131   3                                wr_lcd(comm,0x0d);            /*关游标,开反显,反显不移*/
 132   3                                break;
 133   3                  case 4:
 134   3                                wr_lcd(comm,0x0d);            /*关游标,开反显,反显左移*/
 135   3                            wr_lcd(comm,0x10);
 136   3                                break;
 137   3                  case 5:
 138   3                                wr_lcd(comm,0x0d);            /*关游标,开反显,反显右移*/
 139   3                            wr_lcd(comm,0x14);
 140   3                                break;
 141   3                      case 6:
 142   3                                wr_lcd(comm,0x0f);            /*开游标,开反显,不移*/
 143   3                                break;
 144   3                      case 7:
 145   3                                wr_lcd(comm,0x0f);            /*开游标,开反显,一起左移*/
 146   3                            wr_lcd(comm,0x10);
 147   3                                break;
 148   3                      case 8:
 149   3                                wr_lcd(comm,0x0f);            /*开游标,开反显,一起右移*/
 150   3                            wr_lcd(comm,0x14);
 151   3                                break;
 152   3                      }
 153   2              }
 154   1              else 
 155   1              {
 156   2              wr_lcd(comm,0x0c);                              /*关游标,关反显*/
 157   2              }
 158   1      }
 159          
 160          void LCDc(unsigned char a)                              //清屏函数
 161          { 
 162   1              unsigned char x,y;
 163   1              wr_lcd(comm,0x30);
 164   1              wr_lcd(comm,0x01);                                      /*清屏,地址指针指向00H*/
 165   1              wr_lcd(comm,0x34);
 166   1              for(y=0;y<32;y++)
 167   1              {
 168   2                      wr_lcd(comm,y + ystart);
 169   2                  wr_lcd(comm,xustart);
 170   2                      for(x=0;x<32;x++)
 171   2                      {
 172   3                              wr_lcd(dat,a);
 173   3                      }
 174   2              }
 175   1          wr_lcd(comm,0x30);
 176   1      }
 177          
 178          void chk_busy(void)
 179          {
C51 COMPILER V8.15   LCD_PLUG_12864J                                                       03/17/2009 18:11:02 PAGE 4   

 180   1              P0 = 0xff;
 181   1              RS = 0;
 182   1              RW = 1;
 183   1              E = 1;
 184   1              while(busy == 1);
 185   1              E = 0;
 186   1      }
 187          /*
 188          void delay_us(unsigned char i)
 189          {
 190                          while(i!=0)i--;
 191          }
 192          
 193          void delay_ms(unsigned char ms)
 194          {
 195                  unsigned char i,j;
 196                  for(i=0;i<ms;i++)
 197                  for(j=0;j<15;j++)
 198                  _nop_();
 199          }*/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    394    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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