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

📄 12864.lst

📁 这是一个我以前用AT89S52单片机做的128-64液晶屏的驱动显示程序
💻 LST
字号:
C51 COMPILER V7.50   12864                                                                 12/28/2007 10:53:50 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE 12864
OBJECT MODULE PLACED IN 12864.OBJ
COMPILER INVOKED BY: D:\C51\BIN\C51.EXE 12864.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include<reg52.h>
   2          #include"12864-pin.h"
   3          #include<intrins.h>
   4          
   5          
   6          /*////////////////////////////////////////////////////////////////////////////*/
   7          
   8          void delay(uint ms)
   9          {
  10   1              uint i;                                                                                                                         
  11   1              while(ms--)
  12   1              {
  13   2                      for(i=0;i<100;i++);                                                                                                                                               
  14   2              }
  15   1      }                                                                                       
  16          
  17          /*////////////////////////////////////////////////////////////////////////*/
  18          /* 等待,直到12864液晶模块处于就绪状态 */
  19          
  20          void chk_busy(void)
  21          {
  22   1         /* BF = 1;
  23   1          DI = 0;
  24   1          RW = 1;
  25   1          E  = 1;     //      delay(1);
  26   1      //      while(BF);  
  27   1              E  = 0; 
  28   1      */
  29   1      
  30   1      uchar i;
  31   1      for(i=0;i<10;i++);                      
  32   1      
  33   1      
  34   1      }
  35          
  36                                                                                                                                                                          
  37          
  38          
  39          
  40          /*////////////////////////////////////////////////////////////////////////*/
  41          /* 向12864液晶模块传输指令 */
  42          
  43          void send_i(uchar instrution)
  44          {                                                                                                                                               
  45   1              chk_busy();     
  46   1          DI = 0;
  47   1          RW = 0;
  48   1          DB = instrution; 
  49   1          E = 1;
  50   1      #ifdef NOP
                   _nop_(); // delay(1);  
                   _nop_(); 
              #endif
  54   1          E = 0;
  55   1      }
C51 COMPILER V7.50   12864                                                                 12/28/2007 10:53:50 PAGE 2   

  56          
  57          /*////////////////////////////////////////////////////////////////////////*/
  58          /* 向12864液晶模块传输数据 */
  59          
  60          void send_d(uchar dt)                                                           
  61          {
  62   1          chk_busy();
  63   1          DI = 1;
  64   1          RW = 0;
  65   1          DB = dt;
  66   1          E = 1;
  67   1      #ifdef NOP
                   _nop_();  // delay(1);
                   _nop_(); 
              #endif
  71   1          E = 0;
  72   1      }
  73          
  74           /*/////////////////////////////////////////////////////////////////////////*/
  75           /* 初始化12864液晶模块 */
  76                                                                                                           
  77          void init_LCD(void)
  78          {
  79   1          RST = 0;
  80   1          delay(200);
  81   1          RST = 1;
  82   1      #ifdef NOP
                  _nop_();
              #endif
  85   1              E = 0;
  86   1              CS1 = 1;
  87   1              send_i(0x34);           //扩充指令;
  88   1          send_i(0x30);       //  8位数据,基本指令;
  89   1                                                                                                              
  90   1              send_i(0x01);  //清除显示,DDRAM 填满20H          ;  
  91   1              delay(20);
  92   1              send_i(0x06);    //      游标进入点设定;
  93   1      //      send_i(0x14);  //       游标或显示移位控制
  94   1              send_i(0x0e);   //  显示开关,。
  95   1      
  96   1      }                               
  97          /*////////////////////////////////////////////////////////////////////////*/
  98          /* 设置文本输出位置;x取值范围:0~7;y取值范围:0~3 */
  99          
 100          void gotoxy(uchar x, uchar y)
 101          {                                                                                                                                                                               
 102   1          switch(y)
 103   1          {
 104   2              case 0: send_i(0x80+x);break;
 105   2              case 1: send_i(0x90+x);break;
 106   2              case 2: send_i(0x88+x);break;
 107   2              case 3: send_i(0x98+x);break;
 108   2          }
 109   1      }
 110          
 111          
 112          
 113          
 114          /*////////////////////////////////////////////////////////////////////////*/
 115          /* 连续向LCD发送string指向的num个数据 */
 116          void LCD_puts(Ucode* string, uchar num)                                                                                 
 117          {
C51 COMPILER V7.50   12864                                                                 12/28/2007 10:53:50 PAGE 3   

 118   1          while(num--)
 119   1          {
 120   2              send_d(*string++);
 121   2          }
 122   1      }
 123          
 124          
 125          
 126          /*////////////////////////////////////////////////////////////////////////*/
 127          /* 汉字显示清屏 */
 128          
 129          void clrddram()
 130          {
 131   1          send_i(0X01);delay(6);          //清除显示,DDRAM 填满20H  ;
 132   1              send_i(0x34);                            //扩充指令;
 133   1          send_i(0X30);               //  8位数据,基本指令; 
 134   1      }
 135           /*////////////////////////////////////////////////////////////////////////*/
 136          /* 设置图形模式输出位置;x取值范围(byte):0~7,单位为16位/2个字节,共128位;
 137             y取值范围(bit):0~63                 */
 138          void setxy(uchar x, uchar y)
 139          {
 140   1              send_i(0x34);                            //扩充指令;
 141   1          if(y&0xe0)          // y>=32
 142   1          {
 143   2                      send_i(0x80+y-32);
 144   2              send_i(0x88+x);
 145   2          }
 146   1          else                                   // y<32
 147   1          {
 148   2                      send_i(0x80+y);         //      设定DDRAM 地址,第一行80H~87H,第二行90H~97H 
 149   2              send_i(0x80+x);
 150   2              }
 151   1               send_i(0x30);                   //基本指令;
 152   1      
 153   1      }
 154          
 155          /*////////////////////////////////////////////////////////////////////////*/
 156          /* 显示点阵子程序,以lcd_data填充图形显示空间(GDRAM) */
 157          void fill_GD(uchar x,uchar y,uchar l,uchar w,uchar Data)
 158          {
 159   1              uchar i;
 160   1              while(w--)
 161   1          {   
 162   2                      send_i(0x34);   // setxy()需要工作在扩充指令模式下
 163   2              setxy(x, y++);  // 设置输出到图形缓冲区的地址
 164   2              send_i(0x30);   // send_d()需要工作在基本指令模式下
 165   2              for( i=l;i--;)
 166   2              {
 167   3                  send_d(Data);       
 168   3                  send_d(Data);
 169   3              }
 170   2          }
 171   1              send_i(0x36);                    //  扩充指令,图形显示开 
 172   1          send_i(0x30);                       // 返回基本指令模式
 173   1      }
 174          
 175          /*////////////////////////////////////////////////////////////////////////*/
 176          /* x代表要输出的目标行地址,其取值范围是0~ 7,单位是2个字节,即16位 */
 177          /* y代表要输出的目标列地址,其取值范围是0~63,单位是1位 */
 178          /* l代表图形文件的长度,单位是2个字节,即16位 */
 179          /* w代表图形文件的宽度,单位是1位 */
C51 COMPILER V7.50   12864                                                                 12/28/2007 10:53:50 PAGE 4   

 180          void putsBMP(uchar x, uchar y, uchar l, uchar w,uchar code *p)          //反白;
 181          {
 182   1          uchar i;
 183   1      
 184   1              while(w--)
 185   1          {   
 186   2                      send_i(0x34);   // setxy()需要工作在扩充指令模式下
 187   2              setxy(x, y++);  // 设置输出到图形缓冲区的地址
 188   2              send_i(0x30);   // send_d()需要工作在基本指令模式下
 189   2              for( i=l;i--;)
 190   2              {
 191   3                  send_d(*p++);       
 192   3                  send_d(*p++);
 193   3              }
 194   2          }
 195   1          send_i(0x36);               // 绘图开;
 196   1          send_i(0x30);                       // 返回基本指令模式
 197   1      }
 198          /*////////////////////////////////////////////////////////////////////////*/
 199          /* 清空点阵区           */
 200          void clrgdram()
 201          {
 202   1          fill_GD(0,0,8,64,0);
 203   1      }
 204          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    392    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      13
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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