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

📄 lcd.lst

📁 这是关于按键显示的基本程序
💻 LST
字号:
C51 COMPILER V7.20   LCD                                                                   11/20/2007 08:22:13 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE LCD
OBJECT MODULE PLACED IN .\lcd.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ..\pub\lcd.c BROWSE INCDIR(.\;C:\KEIL\C51\Include) DEBUG OBJECTEXTEND PRINT
                    -(.\lcd.lst) OBJECT(.\lcd.obj)

line level    source

*** WARNING C500 IN LINE 1 OF ..\PUB\LCD.C: MISSING DEVICE (SECURITY KEY NOT FOUND)
   1          /*******************************************************************
   2           *  lcd.c 
   3           *
   4           *  LCD utility for SST89E58/SST89E516 Experimental BOARD 
   5           *  
   6           *
   7           *  Copyright(C) 2007, Finley ZHU, HUST
   8           *  All rights reserved.
   9           *
  10           *   History
  11           *   2007.11.18  ver 1.00
  12           *
  13           *******************************************************************/
  14          
  15          #include <SST/SST89x5x4.H>
  16          
  17          #include "..\pub\board.h"
  18          #include "LCD.h"
  19          
  20          sbit LCD_RS = DEF_LCD_RS;
  21          sbit LCD_RW = DEF_LCD_RW;
  22          
  23          
  24          /*******************************************************************
  25           *
  26           * Internal routines
  27           *
  28           *******************************************************************/
  29          /*
  30           *      Lcd_ReadStatus
  31           * 功能: LCD读状态
  32           * 参数: 无
  33           * 返回: 状态
  34           */
  35          unsigned char iLcd_ReadStatus()
  36          {
  37   1              unsigned char rt ;
  38   1      
  39   1              LCD_SetCmdMode();       /* 1. 设置LCD为命令状态模式 */
  40   1              LCD_SetReadMode();      /* 2. 设置LCD为读模式 */
  41   1              P0 = 0xff ;             /* 3. 释放P0口 */
  42   1              LCD_Enable();           /* 4. 选中LCD, 多次选中等待LCD就绪 */
  43   1              LCD_Enable();
  44   1              LCD_Enable();
  45   1              LCD_Enable();
  46   1              rt = P0 ;               /* 5. 通过P0端口读值 */
  47   1              LCD_Disable();          /* 6. 锁存 */
  48   1              return rt ;
  49   1      }       
  50          
  51          /*
  52           *      Lcd_ReadData
  53           * 功能: LCD读数据
C51 COMPILER V7.20   LCD                                                                   11/20/2007 08:22:13 PAGE 2   

  54           * 参数: 无
  55           * 返回: 数据
  56           */
  57          unsigned char iLcd_ReadData()
  58          {
  59   1              unsigned char rt ;
  60   1      
  61   1              LCD_SetDataMode();      /* 1. 设置LCD为数据模式 */
  62   1              LCD_SetReadMode();      /* 2. 设置LCD为读出模式 */
  63   1              P0 = 0xff ;             /* 3. 释放P0口 */
  64   1              LCD_Enable();           /* 4. 选中LCD, 多次选中等待LCD就绪 */
  65   1              LCD_Enable();
  66   1              LCD_Enable();
  67   1              LCD_Enable();
  68   1              rt = P0 ;               /* 5. 通过P0端口读值 */
  69   1              LCD_Disable();          /* 6. 锁存 */
  70   1              return rt ;
  71   1      }
  72          
  73          /*
  74           *      Lcd_WriteCmd
  75           * 功能: LCD写命令
  76           * 参数:
  77           *      value:  写的具体值
  78           *      attrib: 0 - 不检测忙信号
  79           *              1 - 监测忙信号
  80           * 返回: 无
  81           */
  82          void Lcd_WriteCmd(unsigned char value , unsigned char attrib)
  83          {
  84   1              if(attrib) 
  85   1                      while( iLcd_ReadStatus()&0x80 );        /* 1. 等待LCD就绪状态 */
  86   1              LCD_SetCmdMode();                       /* 2. 设置LCD为命令模式 */
  87   1              LCD_SetWriteMode();                     /* 3. 设置LCD为写入模式 */
  88   1              LCD_Enable();                           /* 4. 选中LCD */
  89   1              P0 = value ;                            /* 5. 通过P0端口写值 */
  90   1              LCD_Disable();                          /* 6. 锁存 */
  91   1      }
  92          
  93          /*
  94           *      Lcd_WriteData 
  95           * 功能: LCD写数据
  96           * 参数:
  97           *      value:  写的具体值
  98           *      attrib: 0 - 不检测忙信号
  99           *              1 - 监测忙信号
 100           * 返回: 无
 101           */
 102          void Lcd_WriteData(unsigned char value , unsigned char attrib)
 103          {
 104   1              if(attrib) 
 105   1                      while( iLcd_ReadStatus()&0x80 );        /* 1. 等待LCD就绪状态 */
 106   1              LCD_SetDataMode();                      /* 2. 设置LCD为数据模式 */
 107   1              LCD_SetWriteMode();                     /* 3. 设置LCD为写入模式 */
 108   1              LCD_Enable();                           /* 4. 选中LCD */
 109   1              P0 = value ;                            /* 5. 通过P0端口写值 */
 110   1              LCD_Disable();                          /* 6. 锁存 */
 111   1      }
 112          
 113          #define Lcd_WriteCmdNoWait(x)   Lcd_WriteCmd((x),  0)
 114          #define Lcd_WriteCmdWait(x)     Lcd_WriteCmd((x),  1)
 115          #define Lcd_WriteDataNoWait(x)  Lcd_WriteData((x), 0)
C51 COMPILER V7.20   LCD                                                                   11/20/2007 08:22:13 PAGE 3   

 116          #define Lcd_WriteDataWait(x)    Lcd_WriteData((x), 1)
 117          
 118          
 119          /*******************************************************************
 120           *
 121           * published routines
 122           *
 123           *******************************************************************/
 124          
 125          /*
 126           *      LCD_Init
 127           * 功能: LCD初始化
 128           * 参数: 无
 129           * 返回: 无
 130           */
 131          void LCD_Init(void)
 132          {
 133   1              Delay500Ms();   
 134   1      
 135   1              /* 写指令0x38连续3次, 不检测忙信号*/
 136   1              Lcd_WriteCmdNoWait(LCD_CMD_SETDISPMODE);
 137   1              Delay5Ms();
 138   1      
 139   1              Lcd_WriteCmdNoWait(LCD_CMD_SETDISPMODE);
 140   1              Delay5Ms();
 141   1      
 142   1              Lcd_WriteCmdNoWait(LCD_CMD_SETDISPMODE);
 143   1              Delay5Ms();
 144   1      
 145   1              /* 以后的读写操作均要判断忙信号 */
 146   1              Lcd_WriteCmdWait(LCD_CMD_SETDISPMODE);
 147   1      
 148   1              /* 先设置关屏 */
 149   1              Lcd_WriteCmdWait(LCD_CMD_CURSOR);
 150   1      
 151   1              /* 清屏 */
 152   1              Lcd_WriteCmdWait(LCD_CMD_CLEAR);
 153   1      
 154   1              /* 设置光标显示模式 */
 155   1              Lcd_WriteCmdWait(LCD_CMD_CURPOS|LCD_CMD_CURPOS_INC);
 156   1      
 157   1              /* 开屏, 显示光标, 闪烁 */
 158   1              Lcd_WriteCmdWait(LCD_CMD_CURSOR|LCD_CMD_CURSOR_ON|
 159   1                      LCD_CMD_CURSOR_SHOW|LCD_CMD_CURSOR_HILIGHT);    
 160   1      }
 161          
 162          /*
 163           *      LCD_Clear
 164           * 功能: LCD清屏
 165           * 参数: 无
 166           * 返回: 无
 167           */
 168          void LCD_Clear()
 169          {
 170   1              Lcd_WriteCmdWait(LCD_CMD_CLEAR);
 171   1      }
 172          
 173          /*
 174           *      LCD_Cursor
 175           * 功能: LCD定位光标
 176           * 参数: 
 177           *         x - 列
C51 COMPILER V7.20   LCD                                                                   11/20/2007 08:22:13 PAGE 4   

 178           *         y - 行
 179           * 返回: 无
 180           */
 181          void LCD_Cursor(char x , char y)
 182          {
 183   1              unsigned char temp;
 184   1      
 185   1              temp = x & 0xf;                 /* 列有效范围为 0-15 */
 186   1              if ( y&0x01 )                   /* 行有效范围为 0, 1 */
 187   1                      temp |= 0x40;
 188   1              Lcd_WriteCmdWait(LCD_CMD_SETDP|temp);
 189   1      }
 190          
 191          /*
 192           *      LCD_TTYOut
 193           * 功能: LCD以TTY方式显示字符
 194           * 参数: 
 195           *         aChar - 字符
 196           *         
 197           * 返回: 无
 198           */
 199          void LCD_TTYOut(char aChar)
 200          {
 201   1              Lcd_WriteDataWait(aChar);
 202   1      }
 203          
 204          /*
 205           *      LCD_PutChar
 206           * 功能: LCD在指定位置显示字符
 207           * 参数: 
 208           *         x - 列
 209           *         y - 行
 210           *         aChar - 字符
 211           *         
 212           * 返回: 无
 213           */
 214          void LCD_PutChar(char x , char y , char aChar)
 215          {
 216   1              LCD_Cursor(x,y);
 217   1              Lcd_WriteDataWait(aChar);
 218   1      }
 219          
 220          /*
 221           *      LCD_PutStr
 222           * 功能: LCD在指定开始位置处显示字符串
 223           * 参数: 
 224           *         x - 列
 225           *         y - 行
 226           *         aChar - 字符
 227           *         
 228           * 返回: 无
 229           */
 230          void LCD_PutStr(char x , char y , char* str)
 231          {
 232   1              unsigned char i,len=0;
 233   1              /* 计算字符串长度 */
 234   1              while (str[len] >31)
 235   1                      len++;
 236   1              
 237   1              /* 显示字符串 */
 238   1              for (i=0;i<len;i++) 
 239   1              {
C51 COMPILER V7.20   LCD                                                                   11/20/2007 08:22:13 PAGE 5   

 240   2                      LCD_PutChar(x++,y,str[i]);
 241   2                      if ( x == 16 )
 242   2                      {
 243   3                              x = 0; y ^= 1;
 244   3                      }
 245   2              }
 246   1      }
 247          
 248          /*
 249           *      LCD_ReadData
 250           * 功能: LCD读数据
 251           * 参数: 无
 252           * 返回: 数据
 253           */
 254          unsigned char LCD_ReadData()
 255          {
 256   1              /* 监测忙状态 */
 257   1              while( iLcd_ReadStatus()&0x80 );
 258   1              return iLcd_ReadData();
 259   1      }
 260          
 261          /************* END of FILE *****************************************/


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    343    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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