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

📄 lcd.lst

📁 ps2键盘在c51中的驱动程序
💻 LST
字号:
C51 COMPILER V7.06   LCD                                                                   10/25/2006 16:06:08 PAGE 1   


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

stmt level    source

   1          /*******************************************************************************
   2          程序名称:LCD驱动程序
   3          显示功能:显示ASCII码
   4          硬件接法:D/I---------A0
   5                    R/W---------A1
   6                    E-----------读写0xA000~0xA003时,选中
   7                    CSA---------(前半屏选通,低电平有效)
   8                    CSB---------(后半屏选通,低电平有效)
   9                    DB0~DB7----D0~D7
  10          *******************************************************************************/
  11          
  12          
  13          #include "Lcd.h"
  14          #include "ASCII.h"
  15          #include "uniondef.h"
  16          
  17          
  18          //定义I/O接口
  19          unsigned char bdata XIO = 0;
  20          #define LCD_SET_CSA()   {XIO|=0x10;XBYTE[0x8000]=XIO;}
  21          #define LCD_CLR_CSA()   {XIO&=0xEF;XBYTE[0x8000]=XIO;}
  22          #define LCD_SET_CSB()   {XIO|=0x20;XBYTE[0x8000]=XIO;}
  23          #define LCD_CLR_CSB()   {XIO&=0xDF;XBYTE[0x8000]=XIO;}
  24          
  25          
  26          /*******************************************************************************
  27          函数:LcdWaitBusy()
  28          功能:读取LCD的Busy标志,如果LCD忙则等待,如果空闲则返回
  29          说明:每次操作之前都应当确认LCD处于空闲状态
  30          *******************************************************************************/
  31          void LcdWaitBusy()
  32          {
  33   1              while ( (XBYTE[0xA002] & 0x80) != 0 );
  34   1      }
  35          
  36          
  37          /*******************************************************************************
  38          函数:LcdOn()
  39          功能:打开LCD显示
  40          *******************************************************************************/
  41          void LcdOn()
  42          {
  43   1              LcdWaitBusy();
  44   1              XBYTE[0xA000] = 0x3F;
  45   1      }
  46          
  47          
  48          /*******************************************************************************
  49          函数:LcdOff()
  50          功能:关闭LCD显示
  51          *******************************************************************************/
  52          /*
  53          void LcdOff()
  54          {
  55                  LcdWaitBusy();
C51 COMPILER V7.06   LCD                                                                   10/25/2006 16:06:08 PAGE 2   

  56                  XBYTE[0xA000] = 0x3E;
  57          }
  58          */
  59          
  60          
  61          /*******************************************************************************
  62          函数:LcdStartLine()
  63          功能:设置显示起始行
  64          参数:line是行号,取值0~63
  65          *******************************************************************************/
  66          void LcdStartLine(unsigned char line)
  67          {
  68   1              LcdWaitBusy();
  69   1              XBYTE[0xA000] = line | 0xC0;
  70   1      }
  71          
  72          
  73          /*******************************************************************************
  74          函数:LcdSetP()
  75          功能:设置页地址
  76          参数:page取值0~7
  77          *******************************************************************************/
  78          void LcdSetP(unsigned char page)
  79          {
  80   1              LcdWaitBusy();
  81   1              XBYTE[0xA000] = (page & 0x07) | 0xB8;
  82   1      }
  83          
  84          
  85          /*******************************************************************************
  86          函数:LcdSetY()
  87          功能:设置Y地址
  88          参数:y取值0~63
  89          *******************************************************************************/
  90          void LcdSetY(unsigned char y)
  91          {
  92   1              LcdWaitBusy();
  93   1              XBYTE[0xA000] = (y & 0x3F) | 0x40;
  94   1      }
  95          
  96          
  97          /*******************************************************************************
  98          函数:LcdWriteDat()
  99          功能:写显示数据
 100          参数:dat为显示数据
 101          说明:写完后,Y地址自动加1
 102          *******************************************************************************/
 103          void LcdWriteDat(unsigned char dat)
 104          {
 105   1              LcdWaitBusy();
 106   1              XBYTE[0xA001] = dat;
 107   1      }
 108          
 109          
 110          /*******************************************************************************
 111          函数:LcdReadDat()
 112          功能:读显示数据
 113          返回:读到的数据
 114          *******************************************************************************/
 115          /*
 116          unsigned char LcdReadDat()
 117          {
C51 COMPILER V7.06   LCD                                                                   10/25/2006 16:06:08 PAGE 3   

 118                  LcdWaitBusy();
 119                  return XBYTE[0xA003];
 120          }
 121          */
 122          
 123          
 124          void _LcdClear_()
 125          {
 126   1              unsigned char p,y;
 127   1              for ( p=0; p<8; p++ )
 128   1              {
 129   2                      LcdSetP(p);
 130   2                      LcdSetY(0);
 131   2                      for ( y=0; y<64; y++ )
 132   2                      {
 133   3                              LcdWriteDat(0x00);
 134   3                      }
 135   2              }
 136   1      }
 137          
 138          
 139          //定义光标的横纵坐标
 140          unsigned char LcdCursorX;
 141          unsigned char LcdCursorY;
 142          
 143          
 144          /*******************************************************************************
 145          函数:LcdGotoXY()
 146          功能:把光标移到(x,y)处
 147          参数:(x,y)为屏幕坐标,x=0~15,y=0~4
 148          *******************************************************************************/
 149          /*
 150          void LcdGotoXY(unsigned char x, unsigned char y)
 151          {
 152                  LcdCursorX = x & 0x0F;
 153                  LcdCursorY = y & 0x03;
 154          }
 155          */
 156          
 157          
 158          /*******************************************************************************
 159          函数:LcdClear()
 160          功能:LCD清屏
 161          *******************************************************************************/
 162          void LcdClear()
 163          {
 164   1              LCD_CLR_CSA();
 165   1              _LcdClear_();
 166   1              LCD_SET_CSA();
 167   1              LCD_CLR_CSB();
 168   1              _LcdClear_();
 169   1              LCD_SET_CSB();
 170   1              LcdCursorX = 0;
 171   1              LcdCursorY = 0;
 172   1      }
 173          
 174          
 175          /*******************************************************************************
 176          函数:LcdInit()
 177          功能:LCD初始化
 178          *******************************************************************************/
 179          void LcdInit()
C51 COMPILER V7.06   LCD                                                                   10/25/2006 16:06:08 PAGE 4   

 180          {
 181   1              LCD_SET_CSA();
 182   1              LCD_SET_CSB();
 183   1              LcdStartLine(0);
 184   1              LcdClear();
 185   1              LcdOn();
 186   1      }
 187          
 188          
 189          /*******************************************************************************
 190          函数:LcdPutchar()
 191          功能:在LCD上显示ASCII码
 192          *******************************************************************************/
 193          void LcdPutchar(unsigned char c)
 194          {
 195   1              bit BS_Flag = 0;
 196   1              unsigned char i;
 197   1              unsigned char n;
 198   1              unsigned char code *p;
 199   1      //检查是否为可显示字符
 200   1              if ( c < ' ' )  //如果是控制字符
 201   1              {
 202   2                      if ( c == '\r' )        //如果是回车符
 203   2                      {
 204   3                              LcdCursorX = 0;
 205   3                      }
 206   2                      else if ( c == '\n' )   //如果是换行符
 207   2                      {
 208   3                              LcdCursorY++;
 209   3                              if ( LcdCursorY >= 4 )
 210   3                              {
 211   4                                      LcdCursorY = 0;
 212   4                              }
 213   3                      }
 214   2                      else if ( c == '\b' )   //如果是退格
 215   2                      {
 216   3                              if ( LcdCursorX == 0 )
 217   3                              {
 218   4                                      return;
 219   4                              }
 220   3                              else
 221   3                              {
 222   4                                      LcdCursorX--;
 223   4                                      BS_Flag = 1;
 224   4                                      c = ' ';
 225   4                                      goto Start;
 226   4                              }
 227   3                      }
 228   2                      return;
 229   2              }
 230   1      Start:
 231   1      //计算字符点阵位置
 232   1              p = ASCII_TAB + (c - ' ') * 16;
 233   1      //确定显示位置在左半屏还是右半屏
 234   1              if ( LcdCursorX < 8 )
 235   1              {
 236   2                      LCD_CLR_CSB();
 237   2      //              x = 0;
 238   2              }
 239   1              else
 240   1              {
 241   2                      LCD_CLR_CSA();
C51 COMPILER V7.06   LCD                                                                   10/25/2006 16:06:08 PAGE 5   

 242   2      //              x = 64;
 243   2              }
 244   1      //显示ASCII码
 245   1              for ( i=0; i<2; i++ )
 246   1              {
 247   2                      LcdSetP(LcdCursorY*2+i);        //设置页地址
 248   2                      LcdSetY(LcdCursorX*8);          //设置Y地址
 249   2                      n = 8;
 250   2                      do
 251   2                      {
 252   3                              LcdWriteDat(*p++);              //写入显示数据
 253   3                      } while ( --n != 0 );
 254   2              }
 255   1      //取消选中
 256   1              if ( LcdCursorX < 8 )
 257   1              {
 258   2                      LCD_SET_CSB();
 259   2              }
 260   1              else
 261   1              {
 262   2                      LCD_SET_CSA();
 263   2              }
 264   1      //光标移到下个位置
 265   1              if ( BS_Flag ) return;
 266   1              LcdCursorX++;
 267   1              if ( LcdCursorX >= 16 )
 268   1              {
 269   2                      LcdCursorX = 0;
 270   2                      LcdCursorY++;
 271   2                      if ( LcdCursorY >= 4 )
 272   2                      {
 273   3                              LcdCursorY = 0;
 274   3                      }
 275   2              }
 276   1      }
 277          
 278          
 279          //输出一个字符串
 280          /*
 281          void LcdPuts(unsigned char *s)
 282          {
 283                  unsigned char c;
 284                  for (;;)
 285                  {
 286                          c = *s;
 287                          if ( c == '\0' ) break;
 288                          s++;
 289                          LcdPutchar(c);
 290                  }
 291          }
 292          */
 293          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    347    ----
   CONSTANT SIZE    =   1536    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
C51 COMPILER V7.06   LCD                                                                   10/25/2006 16:06:08 PAGE 6   

END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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