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

📄 lcd.lst

📁 C51红外收发
💻 LST
字号:
C51 COMPILER V7.06   LCD                                                                   10/24/2006 12:59:48 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---------P1.5(前半屏选通,低电平有效)
   8                    CSB---------P1.6(后半屏选通,低电平有效)
   9                    DB0~DB7----D0~D7
  10          *******************************************************************************/
  11          
  12          
  13          #include "Lcd.h"
  14          #include "ASCII.h"
  15          
  16          
  17          /*******************************************************************************
  18          函数:LcdWaitBusy()
  19          功能:读取LCD的Busy标志,如果LCD忙则等待,如果空闲则返回
  20          说明:每次操作之前都应当确认LCD处于空闲状态
  21          *******************************************************************************/
  22          void LcdWaitBusy()
  23          {
  24   1              while ( (XBYTE[0xA002] & 0x80) != 0 );
  25   1      }
  26          
  27          
  28          /*******************************************************************************
  29          函数:LcdOn()
  30          功能:打开LCD显示
  31          *******************************************************************************/
  32          void LcdOn()
  33          {
  34   1              LcdWaitBusy();
  35   1              XBYTE[0xA000] = 0x3F;
  36   1      }
  37          
  38          
  39          /*******************************************************************************
  40          函数:LcdOff()
  41          功能:关闭LCD显示
  42          *******************************************************************************/
  43          void LcdOff()
  44          {
  45   1              LcdWaitBusy();
  46   1              XBYTE[0xA000] = 0x3E;
  47   1      }
  48          
  49          
  50          /*******************************************************************************
  51          函数:LcdStartLine()
  52          功能:设置显示起始行
  53          参数:line是行号,取值0~63
  54          *******************************************************************************/
  55          void LcdStartLine(unsigned char line)
C51 COMPILER V7.06   LCD                                                                   10/24/2006 12:59:48 PAGE 2   

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

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

 180          void LcdPutchar(unsigned char c)
 181          {
 182   1              unsigned char i;
 183   1              unsigned char n;
 184   1              unsigned char code *p;
 185   1      //检查是否为可显示字符
 186   1              if ( c < ' ' )  //如果是控制字符
 187   1              {
 188   2                      if ( c == '\r' )        //如果是回车符
 189   2                      {
 190   3                              LcdCursorX = 0;
 191   3                      }
 192   2                      else if ( c == '\n' )   //如果是换行符
 193   2                      {
 194   3                              LcdCursorY++;
 195   3                              if ( LcdCursorY >= 4 )
 196   3                              {
 197   4                                      LcdCursorY = 0;
 198   4                              }
 199   3                      }
 200   2                      return;
 201   2              }
 202   1      //计算字符点阵位置
 203   1              p = ASCII_TAB + (c - ' ') * 16;
 204   1      //确定显示位置在左半屏还是右半屏
 205   1              if ( LcdCursorX < 8 )
 206   1              {
 207   2                      LCD_CSB = 0;
 208   2      //              x = 0;
 209   2              }
 210   1              else
 211   1              {
 212   2                      LCD_CSA = 0;
 213   2      //              x = 64;
 214   2              }
 215   1      //显示ASCII码
 216   1              for ( i=0; i<2; i++ )
 217   1              {
 218   2                      LcdSetP(LcdCursorY*2+i);        //设置页地址
 219   2                      LcdSetY(LcdCursorX*8);          //设置Y地址
 220   2                      n = 8;
 221   2                      do
 222   2                      {
 223   3                              LcdWriteDat(*p++);              //写入显示数据
 224   3                      } while ( --n != 0 );
 225   2              }
 226   1      //取消选中
 227   1              if ( LcdCursorX < 8 )
 228   1              {
 229   2                      LCD_CSB = 1;
 230   2              }
 231   1              else
 232   1              {
 233   2                      LCD_CSA = 1;
 234   2              }
 235   1      //光标移到下个位置
 236   1              LcdCursorX++;
 237   1              if ( LcdCursorX >= 16 )
 238   1              {
 239   2                      LcdCursorX = 0;
 240   2                      LcdCursorY++;
 241   2                      if ( LcdCursorY >= 4 )
C51 COMPILER V7.06   LCD                                                                   10/24/2006 12:59:48 PAGE 5   

 242   2                      {
 243   3                              LcdCursorY = 0;
 244   3                      }
 245   2              }
 246   1      }
 247          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    300    ----
   CONSTANT SIZE    =   1536    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       2
   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 + -