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

📄 lcd12864.lst

📁 一个关于lcd12864并行的驱动程序
💻 LST
字号:
C51 COMPILER V8.05a   LCD12864                                                             05/01/2009 16:13:02 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE LCD12864
OBJECT MODULE PLACED IN LCD12864.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD12864.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //注意:忙检测在LCD12864并行接口时不能使用,暂时未找到原因
   2          ////////////////////////////////////////////////////////////////////
   3          /////////****************LCD12864并行驱动******************/////////
   4          /////////++++++++++++++   LCD12864.c   ++++++++++++++++++++/////////  
   5          /////////基本功能:静态字符,汉字显示,静态图片显示等     //////////
   6          /////////系统晶振:11.0582MHz                                                 //////////
   7          /////////程序编写:东冬(dqing0625)                                  //////////
   8          /////////修改时间:2009年03月24日                                             //////////
   9          ////////////////////////////////////////////////////////////////////
  10          
  11          #include "stc89c52rc.h"
  12          #include <intrins.h>
  13          #include "MyType.h"
  14          #include "LCD12864.h"
  15          #include "Delaytime.h"
  16          
  17          //======串口模式=======
  18          sbit LCD12864_RS = P2^1;        //片选信号输入
  19          sbit LCD12864_RW = P2^2;        //串行数据输入
  20          sbit LCD12864_EN = P2^4;        //串行移位脉冲输入
  21          sbit LCD12864_PSB = P2^5;       //串并模式选择 0:串口,1:并口
  22          sbit LCD12864_RST = P1^3;       //lcd12864复位
  23          
  24          #define LCD12864_DATA  P0       //数据指令传输并行接口
  25          /******************************************************************
  26          名称:void LCD12864_Wbyte(uchar byte)
  27          功能:向12864写入8位数据
  28          指令:12M晶振,如果用22.1184或者24M晶振,延时要加倍
  29          调用:
  30          返回:无
  31          /******************************************************************/
  32          void LCD12864_Wbyte(uchar byte)
  33          {
  34   1              
  35   1              LCD12864_RW = 0;        //RW(0)写字节
  36   1              _nop_();
  37   1              _nop_();
  38   1              LCD12864_EN = 1;
  39   1              _nop_();
  40   1              LCD12864_DATA = byte;           //写字节        
  41   1              _nop_();
  42   1              _nop_();
  43   1          _nop_();
  44   1              _nop_();
  45   1              LCD12864_EN = 0;
  46   1              _nop_();
  47   1          _nop_();
  48   1              LCD12864_RW = 1;
  49   1      
  50   1      }
  51          /******************************************************************
  52          名称:uchar LCD12864_Rbyte(void)
  53          功能:从12864读出8位数据
  54          指令:
  55          调用:无
C51 COMPILER V8.05a   LCD12864                                                             05/01/2009 16:13:02 PAGE 2   

  56          返回:sdat
  57          /******************************************************************/
  58          uchar LCD12864_Rbyte(void)
  59          {
  60   1              uchar sdat;
  61   1              LCD12864_RW = 0;
  62   1              _nop_();
  63   1              LCD12864_RW = 1;        //RW(1)读字节
  64   1              _nop_();
  65   1              _nop_();
  66   1              LCD12864_EN = 1;
  67   1              _nop_();
  68   1              sdat = LCD12864_DATA;           //读出状态 ,
  69   1              _nop_();
  70   1              _nop_();        
  71   1              LCD12864_EN = 0 ;
  72   1              _nop_();
  73   1              _nop_();
  74   1              LCD12864_RW = 0;        //RW(1)读字节
  75   1                  
  76   1              return sdat;  
  77   1      }
  78          /******************************************************************
  79          名称:void LCD12864_busy( void )
  80          功能:读忙状态,
  81          指令:
  82          调用:
  83          返回:无
  84          /******************************************************************/
  85          void LCD12864_busy( void )
  86          {
  87   1              LCD12864_RS = 1;
  88   1      
  89   1              while(LCD12864_Rbyte()&0x80)//读BF,直到BF == 0*/
  90   1                      {
  91   2                      LCD12864_RS = 0;
  92   2                      }
  93   1      }
  94          /******************************************************************
  95          名称:void LCD12864_W(bit dat_com,uchar byte)
  96          功能:dat_com=0写指令,dat_com=1写数据
  97          指令:
  98          调用:LCD12864_Wbyte();LCD12864_busy();
  99          返回:无
 100          /******************************************************************/
 101          void LCD12864_W (bit dat_com,uchar byte)
 102          {
 103   1      //      LCD12864_busy();                //LCD忙检测
 104   1      
 105   1              LCD12864_RS = dat_com;
 106   1               
 107   1              LCD12864_Wbyte(byte);   //写入字节
 108   1      
 109   1          LCD12864_RS = !dat_com;
 110   1      
 111   1      }
 112          /******************************************************************
 113          名称:void LCD12864_Init(void)
 114          功能:LCD12864初始化
 115          指令:
 116          调用:LCD12864_W();
 117          返回:无
C51 COMPILER V8.05a   LCD12864                                                             05/01/2009 16:13:02 PAGE 3   

 118          /******************************************************************/
 119          void LCD12864_Init(void)
 120          {
 121   1              
 122   1              LCD12864_PSB = 1;       //选择并口模式
 123   1              LCD12864_RST = 1;       //禁止复位
 124   1              LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC);    //基本指令功能.
 125   1              LCD12864_W(LCD12864_COM,LCD12864_PLACE_ROLL);   //允许输入卷动位址
 126   1              LCD12864_W(LCD12864_COM,LCD12864_REST_OFF);             //脱离随眠状态,显示打开,关光标,反白关.
 127   1              LCD12864_W(LCD12864_COM,LCD12864_CLEAR);                //清屏指令.
 128   1              LCD12864_W(LCD12864_COM,LCD12864_CURSOR_RRF);   //AC自动加一,光标右移,整体显示不移动
 129   1      }
 130          /******************************************************************
 131          名称:void LCD12864_Clear(void)
 132          功能:LCD12864清屏
 133          指令:
 134          调用:LCD12864_W();
 135          返回:无
 136          /******************************************************************/
 137          void LCD12864_Clear(void)
 138          {
 139   1              LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC);//基本指令功能.
 140   1              LCD12864_W(LCD12864_COM,LCD12864_CLEAR);        //清屏指令.
 141   1      }
 142          /******************************************************************
 143          名称:void LCD12864_Wbmp(uchar *puts)
 144          功能:LCD12864绘图
 145          指令: 
 146          调用:LCD12864_W();
 147          返回:无
 148          /******************************************************************/
 149          void LCD12864_Wbmp(uchar *puts)
 150          {
 151   1              uint x = 0;
 152   1              uchar i,j;
 153   1      
 154   1              LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_OFF); //扩展指令集动作,绘图显示OFF
 155   1      
 156   1              for(i=0;i<32;i++)
 157   1                      {
 158   2                      LCD12864_W(LCD12864_COM,0x80|i);        //列32行,双屏结构中上半屏 
 159   2                      LCD12864_W(LCD12864_COM,0x80);          //X地址坐标,自动加1.
 160   2      
 161   2                      for(j=0;j<16;j++)                       //16*8=256
 162   2                              LCD12864_W(LCD12864_DAT,puts[x++]);
 163   2                      }
 164   1      
 165   1              for(i=0;i<32;i++)
 166   1                      {
 167   2                      LCD12864_W(LCD12864_COM,0x80|i);
 168   2                      LCD12864_W(LCD12864_COM,0x88); //下半屏
 169   2      
 170   2                      for(j=0;j<16;j++)
 171   2                              LCD12864_W(LCD12864_DAT,puts[x++]);
 172   2                      }
 173   1              LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_ON);  //扩展指令集动作,绘图显示ON
 174   1      
 175   1      }
 176          /******************************************************************
 177          名称:void LCD12864_BMP_Clear( void )
 178          功能:LCD12864清图像
 179          指令:
C51 COMPILER V8.05a   LCD12864                                                             05/01/2009 16:13:02 PAGE 4   

 180          调用:LCD12864_W();
 181          返回:无
 182          /******************************************************************/
 183          void LCD12864_BMP_Clear( void )
 184          {
 185   1           uchar i,j;
 186   1      
 187   1           LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_OFF);    //扩展指令集动作,绘图显示OFF
 188   1       
 189   1           for(i=0;i<32;i++)            //12864实际为256x32
 190   1                      {
 191   2                      LCD12864_W (LCD12864_COM,0x80|i);       //行位置
 192   2                      LCD12864_W (LCD12864_COM,0x80);      //列位置
 193   2      
 194   2                      for (j=0;j<32;j++)              //256/8=32 byte
 195   2                              LCD12864_W(LCD12864_DAT,0);     //全部写入0即清除图像
 196   2                      }
 197   1              LCD12864_W(LCD12864_COM,LCD12864_COM_PLOT_ON);          //扩展指令集动作,绘图显示ON
 198   1      }
 199          /******************************************************************
 200          名称:void LCD12864_WPoss(uchar x,uchar y,uchar *buff)
 201          功能:LCD12864字符位置自定义显示
 202          指令:
 203          调用:LCD12864_W();
 204          返回:无
 205          /******************************************************************/
 206          void LCD12864_WPoss(uchar x,uchar y,uchar *buff)
 207          {
 208   1              uchar addr,i=0;
 209   1              switch (x)
 210   1                      {
 211   2                      case 0:addr=0x80;break;
 212   2                      case 1:addr=0x90;break;
 213   2                      case 2:addr=0x88;break;
 214   2                      case 3:addr=0x98;break;
 215   2                      } 
 216   1              addr=addr+y;
 217   1      
 218   1              LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC);    //8BitMCU,基本指令集合
 219   1              LCD12864_W(LCD12864_COM,addr);                                  //显示在自定义位置
 220   1      
 221   1              while(buff[i]!='\0')
 222   1                      {       
 223   2                      LCD12864_W(LCD12864_DAT,buff[i++]);
 224   2                      if(++y==16)
 225   2                              {
 226   3                              y=0;
 227   3                              if(++x==4) x=0;
 228   3      
 229   3                              switch (x)
 230   3                                      {
 231   4                                      case 0:addr=0x80;break;
 232   4                                      case 1:addr=0x90;break;
 233   4                                      case 2:addr=0x88;break;
 234   4                                      case 3:addr=0x98;break;
 235   4                                      } 
 236   3                              addr=addr+y;
 237   3                              LCD12864_W(LCD12864_COM,addr);
 238   3                              }
 239   2              
 240   2                      }
 241   1      }
C51 COMPILER V8.05a   LCD12864                                                             05/01/2009 16:13:02 PAGE 5   

 242          /******************************************************************
 243          名称:void LCD12864_TXT_Clear( void )
 244          功能:LCD12864清文本
 245          指令:
 246          调用:LCD12864_W();
 247          返回:无
 248          /******************************************************************/
 249          void LCD12864_TXT_Clear( void )
 250          {
 251   1              uchar i;
 252   1      
 253   1              LCD12864_W(LCD12864_COM,LCD12864_COM_BASIC);    //8BitMCU,基本指令集合
 254   1              LCD12864_W(LCD12864_COM,0x80);  //AC归起始位,DDROM起始地址
 255   1      
 256   1              for(i=0;i<64;i++)
 257   1                      LCD12864_W(LCD12864_DAT,0x20);  //字符编码0x20是空白字符
 258   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    493    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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