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

📄 lcd1602.lst

📁 51实战工程级源码
💻 LST
字号:
C51 COMPILER V9.02   LCD1602                                                               11/08/2012 21:34:06 PAGE 1   


C51 COMPILER V9.02, COMPILATION OF MODULE LCD1602
OBJECT MODULE PLACED IN ..\output\Lcd1602.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\source\Lcd1602.c OPTIMIZE(6,SPEED) BROWSE DEBUG OBJECTEXTEND PRINT(..\ou
                    -tput\Lcd1602.lst) OBJECT(..\output\Lcd1602.obj)

line level    source

   1          /*
   2          **********************************************************************************************************
             -***
   3          *                                                Kingst-51
   4          *                                        Development board samples
   5          *
   6          *                                 (c) Copyright 2009-2012, Kingst Studio
   7          *                                           All Rights Reserved
   8          *
   9          *                                          http://www.kingst.org
  10          * 文件名:Lcd1602.c
  11          * 描  述:1602液晶驱动文件
  12          * 版本号:1.0.0
  13          **********************************************************************************************************
             -***
  14          */
  15          
  16          #define _LCD_1602_C
  17          #include "config.h"
  18          #include "Lcd1602.h"
  19          
  20          
  21          /*
  22          ********************************************************************************
  23          * ----------------------- Local defines  ---------------------------------------
  24          ********************************************************************************
  25          */
  26          #define  BusDelay()    _nop_()
  27          
  28          
  29          
  30          /*
  31          ********************************************************************************
  32          * ----------------------- Local variables  -------------------------------------
  33          ********************************************************************************
  34          */
  35          static uint8 tempDBUS;
  36          static bit tempADDR0;
  37          static bit tempADDR1;
  38          static bit tempENLED;
  39          static bit tempEA;
  40          
  41          
  42          /*
  43          ***************************************************************************************************
  44          * ---------------------------------- Source codes  ------------------------------------------------
  45          ***************************************************************************************************
  46          */
  47          /*
  48          * 函数名:LcdAccessStart
  49          * 描  述:LCD访问启动函数,暂存需使用资源的当前状态
  50          */
  51          static void LcdAccessStart(void)
  52          {
C51 COMPILER V9.02   LCD1602                                                               11/08/2012 21:34:06 PAGE 2   

  53   1          tempEA = EA;
  54   1          EA = 0;
  55   1          tempDBUS = DBUS;
  56   1          tempADDR0 = ADDR0;
  57   1          tempADDR1 = ADDR1;
  58   1          tempENLED = ENLED;
  59   1          ENLED = 1;
  60   1      }
  61          /*
  62          * 函数名:LcdAccessStop
  63          * 描  述:LCD访问结束函数,回复所使用的资源状态
  64          */
  65          static void LcdAccessStop(void)
  66          {
  67   1          DBUS = tempDBUS;
  68   1          ADDR0 = tempADDR0;
  69   1          ADDR1 = tempADDR1;
  70   1          ENLED = tempENLED;
  71   1          EA = tempEA;
  72   1      }
  73          
  74          /*
  75          * 函数名:Lcd1602WaitReady
  76          * 描  述:检测并等待1602液晶空闲
  77          */
  78          static void Lcd1602WaitReady(void)
  79          {
  80   1          uint8 sta;
  81   1          
  82   1          LCD1602_DB = 0xFF;
  83   1          LCD1602_RS = 0;
  84   1          LCD1602_RW = 1;
  85   1          do {
  86   2              LCD1602_E = 1;
  87   2              BusDelay();
  88   2              sta = LCD1602_DB;
  89   2              LCD1602_E = 0;
  90   2          } while ((sta&0x80) != 0); //BUSY标志位为bit7
  91   1      }
  92          /*
  93          * 函数名:Lcd1602WriteCmd
  94          * 描  述:1602液晶命令写入函数
  95          * 输  入:cmd - 待写入命令
  96          * 输  出:无
  97          */
  98          static void Lcd1602WriteCmd(uint8 cmd)
  99          {
 100   1          LcdAccessStart();
 101   1          Lcd1602WaitReady();
 102   1          LCD1602_RS = 0;
 103   1          LCD1602_RW = 0;
 104   1          LCD1602_E  = 1;
 105   1          LCD1602_DB = cmd;
 106   1          BusDelay();
 107   1          LCD1602_E  = 0;
 108   1          LcdAccessStop();
 109   1      }
 110          /*
 111          * 函数名:Lcd1602WriteDat
 112          * 描  述:1602液晶数据写入函数
 113          * 输  入:dat - 待写入数据
 114          * 输  出:无
C51 COMPILER V9.02   LCD1602                                                               11/08/2012 21:34:06 PAGE 3   

 115          */
 116          static void Lcd1602WriteDat(uint8 dat)
 117          {
 118   1          LcdAccessStart();
 119   1          Lcd1602WaitReady();
 120   1          LCD1602_RS = 1;
 121   1          LCD1602_RW = 0;
 122   1          LCD1602_E  = 1;
 123   1          LCD1602_DB = dat;
 124   1          BusDelay();
 125   1          LCD1602_E  = 0;
 126   1          LcdAccessStop();
 127   1      }
 128          
 129          /*
 130          * 函数名:Lcd1602ShowStr
 131          * 描  述:在1602液晶上显示字符串
 132          * 输  入:str - 待显示字符串指针
 133          *         x - 屏幕显示横坐标
 134          *         y - 屏幕显示纵坐标
 135          * 输  出:无
 136          * 备  注:输入的字符串必须符合C语言规范,即以'\0'-NULL为结束标识符;
 137          */
 138          void Lcd1602ShowStr(const uint8 *str, uint8 x, uint8 y)
 139          {
 140   1          uint8 addr;
 141   1          
 142   1          /* 由输入的显示坐标计算显示RAM的地址 */
 143   1          if (y == 0) {
 144   2              addr = 0x80;
 145   2          }
 146   1          else {
 147   2              addr = 0xC0;
 148   2          }
 149   1          addr |= x;
 150   1          
 151   1          /* 由起始显示RAM地址连续写入字符串 */
 152   1          Lcd1602WriteCmd(addr);
 153   1          while (*str != '\0') {
 154   2              Lcd1602WriteDat(*str);
 155   2              str++;
 156   2          }
 157   1      }
 158          void Lcd1602Clear(uint8 x, uint8 y, uint8 len)
 159          {
 160   1          uint8 addr;
 161   1          
 162   1          /* 由输入的显示坐标计算显示RAM的地址 */
 163   1          if (y == 0) {
 164   2              addr = 0x80;
 165   2          }
 166   1          else {
 167   2              addr = 0xC0;
 168   2          }
 169   1          addr |= x;
 170   1          
 171   1          /* 由起始显示RAM地址连续写入空格 */
 172   1          Lcd1602WriteCmd(addr);
 173   1          while (len > 0) {
 174   2              Lcd1602WriteDat(' ');
 175   2              len--;
 176   2          }
C51 COMPILER V9.02   LCD1602                                                               11/08/2012 21:34:06 PAGE 4   

 177   1      }
 178          
 179          /*
 180          * 函数名:Lcd1602Init
 181          * 描  述:1602液晶初始化函数
 182          */
 183          void Lcd1602Init(void)
 184          {
 185   1              Lcd1602WriteCmd(0x38);  //16*2显示,5*7点阵,8位数据接口
 186   1              Lcd1602WriteCmd(0x0C);  //显示器开、光标开、光标允许闪烁
 187   1              Lcd1602WriteCmd(0x06);  //文字不动,光标自动右移
 188   1              Lcd1602WriteCmd(0x01);  //清屏
 189   1          
 190   1          Lcd1602ShowStr("* Hello World! *", 0, 0);
 191   1          Lcd1602ShowStr("key 0x-- pressed", 0, 1);
 192   1      }
 193          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    223    ----
   CONSTANT SIZE    =     34    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1       5
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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