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

📄 lcd.lst

📁 利用c语言在keil下编写的关于lcd的驱动程序
💻 LST
字号:
C51 COMPILER V7.09   LCD                                                                   07/03/2006 09:19:46 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN LCD.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*
   2                  LCD.C
   3                  128×64 LCD驱动程序
   4          */
   5          
   6          
   7          #include <INTRINS.H>
   8          #include <ABSACC.H>
   9          #include "LCD.H"
  10          
  11          
  12          //定义屏幕光标(取值0~63,光标本身不可见)
  13          unsigned char LcdCursor;
  14          
  15          
  16          /*
  17          函数:LcdLightOn()
  18          功能:点亮背光灯
  19          */
  20          void LcdLightOn()
  21          {
  22   1              LCD_BL = 1;
  23   1      }
  24          
  25          
  26          /*
  27          函数:LcdLightOff()
  28          功能:熄灭背光灯
  29          */
  30          void LcdLightOff()
  31          {
  32   1              LCD_BL = 0;
  33   1      }
  34          
  35          
  36          /*
  37          函数:LcdGetBF()
  38          功能:读出状态位BF
  39          返回:
  40                  BF=1,表示忙,不可进行任何操作
  41                  BF=0,表示不忙,可以进行正常操作
  42          */
  43          bit LcdGetBF()
  44          {
  45   1              unsigned char dat;
  46   1              dat = XBYTE[0xD002];    //XBYTE的定义见<ABSACC.H>
  47   1              return (bit)(dat & 0x80);
  48   1      }
  49          
  50          
  51          /*
  52          函数:LcdWriteCmd()
  53          功能:向LCD发送命令
  54          参数:
  55                  cmd:命令字,详见器件的数据手册
C51 COMPILER V7.09   LCD                                                                   07/03/2006 09:19:46 PAGE 2   

  56          */
  57          void LcdWriteCmd(unsigned char cmd)
  58          {
  59   1              while ( LcdGetBF() );
  60   1              XBYTE[0xD000] = cmd;
  61   1      }
  62          
  63          
  64          /*
  65          函数:LcdWriteDat()
  66          功能:向LCD写入数据
  67          参数:dat,要写入的数据
  68          说明:目标地址由地址计数器AC隐含指定,写完后AC自动加1
  69          */
  70          void LcdWriteDat(unsigned char dat)
  71          {
  72   1              while ( LcdGetBF() );
  73   1              XBYTE[0xD001] = dat;
  74   1      }
  75          
  76          
  77          /*
  78          函数:LcdReadDat()
  79          功能:从LCD读出数据
  80          返回:读出的数据
  81          */
  82          /*
  83          unsigned char LcdReadDat()
  84          {
  85                  volatile unsigned char dat;
  86                  while ( LcdGetBF() );
  87                  dat = XBYTE[0xD003];
  88                  dat = XBYTE[0xD003];    //需要连续执行两次才能够读出真正的数据
  89                  return dat;
  90          }
  91          */
  92          
  93          
  94          /*
  95          函数:LcdSetAC()
  96          功能:设置DDRAM(显示数据RAM)的AC(地址计数器)值
  97          参数:
  98                  ac:地址计数器值,范围0~63
  99          */
 100          void LcdSetAC(unsigned char ac)
 101          {
 102   1              ac &= 0x3F;
 103   1              ac |= 0x80;
 104   1              LcdWriteCmd(ac);
 105   1      }
 106          
 107          
 108          /*
 109          函数:LcdClear()
 110          功能:LCD清屏,并使光标回到0
 111          */
 112          void LcdClear()
 113          {
 114   1              LcdWriteCmd(0x01);      //清屏命令
 115   1              LcdCursor = 0;
 116   1      }
 117          
C51 COMPILER V7.09   LCD                                                                   07/03/2006 09:19:46 PAGE 3   

 118          
 119          /*
 120          函数:LcdDelay()
 121          功能:延时(t*100)个机器周期
 122          */
 123          void LcdDelay(unsigned char t)
 124          {
 125   1              unsigned char n;
 126   1              do
 127   1              {
 128   2                      n = 49;
 129   2                      while ( --n != 0 );
 130   2              } while ( --t != 0 );
 131   1      }
 132          
 133          
 134          /*
 135          函数:LcdInit()
 136          功能:LCD初始化
 137          */
 138          void LcdInit()
 139          {
 140   1              LcdWriteCmd(0x30);      //设置基本指令集
 141   1              LcdDelay(3);
 142   1              LcdWriteCmd(0x30);      //设置基本指令集(需要再执行一次)
 143   1              LcdDelay(1);
 144   1              LcdWriteCmd(0x0C);      //开启显示
 145   1              LcdDelay(3);
 146   1              LcdClear();                     //清屏
 147   1              LcdDelay(250);
 148   1              LcdWriteCmd(0x06);      //设置进入点
 149   1              LcdDelay(10);
 150   1      }
 151          
 152          
 153          /*
 154          函数:LcdCheckAC()
 155          功能:根据光标位置调整AC
 156          */
 157          void LcdCheckAC()
 158          {
 159   1              switch ( LcdCursor )
 160   1              {
 161   2              case 16:
 162   2                      LcdSetAC(16);
 163   2                      break;
 164   2              case 32:
 165   2                      LcdSetAC(8);
 166   2                      break;
 167   2              case 48:
 168   2                      LcdSetAC(24);
 169   2                      break;
 170   2              case 64:
 171   2                      LcdCursor = 0;
 172   2                      LcdSetAC(0);
 173   2                      break;
 174   2              default:
 175   2                      break;
 176   2              }
 177   1      }
 178          
 179          
C51 COMPILER V7.09   LCD                                                                   07/03/2006 09:19:46 PAGE 4   

 180          /*
 181          函数:LcdPutChar()
 182          功能:显示ASCII码
 183          参数:
 184                  c为可显示的ASCII码(0x20~0x7F)
 185          */
 186          void LcdPutChar(unsigned char c)
 187          {
 188   1              LcdWriteDat(c);
 189   1              LcdCursor++;
 190   1              LcdCheckAC();
 191   1      }
 192          
 193          
 194          /*
 195          函数:LcdPutHZ()
 196          功能:显示汉字
 197          参数:
 198                  ch,cl:汉字编码
 199          */
 200          void LcdPutHZ(unsigned char ch, unsigned char cl)
 201          {
 202   1              if ( LcdCursor & 0x01 )
 203   1              {//显示汉字时,必须偶地址对准,即光标不能是奇数
 204   2                      LcdPutChar(' ');        //额外输出一个空格
 205   2              }
 206   1              LcdWriteDat(ch);
 207   1              LcdWriteDat(cl);
 208   1              LcdCursor += 2;
 209   1              LcdCheckAC();
 210   1      }
 211          
 212          
 213          /*
 214          函数:LcdPuts()
 215          功能:显示字符串
 216          参数:
 217                  *s:要显示的字符串(可同时包含ASCII码和汉字)
 218          */
 219          void LcdPuts(unsigned char *s)
 220          {
 221   1              unsigned char ch, cl;
 222   1              for (;;)
 223   1              {
 224   2                      ch = *s++;
 225   2                      if ( ch == '\0' ) break;
 226   2                      if ( ch < 0x80 )
 227   2                      {
 228   3                              LcdPutChar(ch);
 229   3                      }
 230   2                      else
 231   2                      {
 232   3                              cl = *s++;
 233   3                              LcdPutHZ(ch,cl);
 234   3                      }
 235   2              }
 236   1      }
 237          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    249    ----
C51 COMPILER V7.09   LCD                                                                   07/03/2006 09:19:46 PAGE 5   

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       3
   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 + -