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

📄 lcd16b20.lst

📁 12887+1602drive goode luck!!
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE LCD16B20
OBJECT MODULE PLACED IN LCD16B20.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD16B20.C BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <AT89X52.H>
   2          #include <intrins.h>
   3          #include "LCD16B20.H"
   4          #define NOP()   _nop_();_nop_();_nop_();_nop_();_nop_();
   5          /*************************************************
   6          *  函数说明:读取AC地址                          *
   7          *  输出参数: unsigned char AC:  表示AC地址
   8          **************************************************/
   9          #if LCD_EN_readBFAC
  10          unsigned char LCDreadBFAC(void)
  11          {
  12   1       unsigned char redata;
  13   1      #if LCD_DL<8
               unsigned char temp;
              #endif
  16   1      
  17   1       LCD_RS=0;//选择指令寄存器
  18   1       NOP();
  19   1       LCD_RW=1;//读取指令寄存器
  20   1       NOP();
  21   1      #if LCD_DL>4
  22   1       LCD_Data_Port=0xff;
  23   1       LCD_EN=1;
  24   1       NOP();
  25   1       redata=LCD_Data_Port;
  26   1      #elif
               LCD_Data_Port=LCD_Data_Port | 0xf0;
               LCD_EN=1;
               NOP();
               redata=LCD_Data_Port; 
               LCD_EN=0;
               redata=redata & 0xf0;
               NOP();
              
               LCD_EN=1;
               NOP();
               temp=LCD_Data_Port; 
               LCD_EN=0;
               temp=temp>>4;
               temp=temp & 0xf;
               redata=redata | temp;
              #endif
  43   1      
  44   1       return (redata); 
  45   1      }
  46          #endif
  47          
  48          /*************************************************
  49          *  函数说明:等等LCD16B20空闲                    *
  50          **************************************************/
  51          #if LCD_EN_waitForReady
  52          void LCDwaitForReady(void)
  53          {
  54   1       unsigned char i,re;
  55   1       i=100;
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 2   

  56   1       do
  57   1         {
  58   2           re=LCDreadBFAC(); 
  59   2           if((re & 0x80)==0)
  60   2             break;  
  61   2         } while(i--!=0);
  62   1      }
  63          #endif
  64          
  65          
  66          /********************************************************
  67          *  函数说明:向LCD发送指令函数                          *
  68          *  输入:    需要发送的指令                             *
  69          ********************************************************/
  70          #if LCD_EN_SendCommand
  71          void LCDSendCommand(unsigned char Command)
  72          {
  73   1      #if LCD_DL<8
               unsigned char order;
              #endif
  76   1      
  77   1       LCDwaitForReady(); 
  78   1       LCD_RS=0;//选择指令寄存器
  79   1       NOP();
  80   1       LCD_RW=0;//MCU向LCD写入命令数据
  81   1       NOP();
  82   1      
  83   1      #if LCD_DL>4
  84   1       LCD_Data_Port=Command;
  85   1       NOP();
  86   1       LCD_EN=1;
  87   1       NOP();
  88   1       LCD_EN=0;
  89   1      #elif
               order=Command & 0xf0;
               LCD_Data_Port=LCD_Data_Port | order;
               NOP();
               LCD_EN=1;
               NOP();
               LCD_EN=0;
               order=Command & 0xf;
               order=order << 4;
               order=order & 0xf0;
               LCD_Data_Port=LCD_Data_Port | order;
               NOP();
               LCD_EN=1;
               NOP();
               LCD_EN=0;
              #endif
 105   1      }
 106          #endif
 107          
 108          
 109          /*********************************************************************
 110          *  函数说明:LCD清屏,DD RAM的内容被清除,光标回到左上角原点,AC=0    *
 111          **********************************************************************/
 112          #if LCD_EN_clear
 113          void LCDclear(void)
 114          {
 115   1       LCDSendCommand(0x1);
 116   1      }
 117          #endif
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 3   

 118          
 119          
 120          /*******************************************************************************
 121          *  函数说明:LCD软复位,DD RAM的内容不变,但光标和光标所在的字符回到左上角原点  *
 122          ********************************************************************************/
 123          #if LCD_EN_goHome
              void LCDgoHome(void)
              {
               LCDSendCommand(0x2);
              }
              #endif
 129          
 130          /********************************************************
 131          *  函数说明:输入方式设置,设置光标、画面移动方式       *
 132          *  输入参数: bit I_D:表示读写之后AC情况,I_D=1           *
 133          *                              表示AC+1;I_D=0表示AC-1; *
 134          *            bit S:  表示画面是否移动,S=1表示           *
 135          *                              画面平移;S=0表示画面不动 *
 136          ********************************************************/
 137          /*
 138          当S=1且数据写入DD RAM中时候,显示将全部左边移动(I_D=1),或者全部右边移动(I_D=0),即光标不移动
 139          当S=0,画面不动,光标移动(左边移动:I_D=0,右边移动:I_D=1)
 140          */
 141          #if LCD_EN_setInputModel
 142          void LCDsetInputModel(bit I_D,bit S)
 143          {
 144   1       unsigned char order;
 145   1       order=0x4;
 146   1       if(I_D)
 147   1         order=order+0x2;
 148   1       if(S)
 149   1         order=order+0x1;
 150   1       LCDSendCommand(order);
 151   1      }
 152          #endif
 153          
 154          
 155          /***************************************************************
 156          *  函数说明:显示模式设置,设置画面、光标以及光标是否闪烁开关   *
 157          *  输入参数: bit D:  表示画面是否显示                          *
 158          *            bit C:  表示光标是否显示                          *
 159          *            bit B:  表示光标是否闪烁                          *
 160          ****************************************************************/
 161          #if LCD_EN_setDisplayModel
 162          void LCDsetDisplayModel(bit D,bit C,bit B)
 163          {
 164   1       unsigned char order;
 165   1       order=0x8;
 166   1       if(D)
 167   1        order=order+0x4;
 168   1       if(C)
 169   1        order=order+0x2;
 170   1       if(B)
 171   1        order=order+0x1;
 172   1       LCDSendCommand(order); 
 173   1      }
 174          #endif
 175          
 176          
 177          //画面和光标一起右边移动n个字符位置
 178          #if LCD_EN_shiftRight
              void LCDshiftRight(unsigned char n)     //shift by n characters Right
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 4   

              {
               unsigned char i;
               for(i=0;i<n;i++)
                 LCDSendCommand(0x1e);   
              }
              #endif
 186          //-----------------------------------------------------------------
 187          //画面和光标一起左边移动n个字符位置
 188          
 189          #if LCD_EN_shiftLeft
              void LCDshiftLeft(unsigned char n)      //shift by n characters Left
              {
               unsigned char i;
               for(i=0;i<n;i++)
                 LCDSendCommand(0x18); 
              }
              #endif
 197          //-----------------------------------------------------------------
 198          //光标往右边移动n个字符位置
 199          #if LCD_EN_cursorRight
              void LCDcursorRight(unsigned char n)    //shif cursor right by n
              {
               unsigned char i;
               for(i=0;i<n;i++)
                 LCDSendCommand(0x14); 
              }
              #endif
 207          //------------------------------------------------------------------
 208          //光标往左边移动n个字符位置
 209          #if LCD_EN_cursorLeft
              void LCDcursorLeft(unsigned char n)     //Shift cursor left by n
              {
               unsigned char i;
               for(i=0;i<n;i++)
                 LCDSendCommand(0x10); 
              }
              #endif
 217          //------------------------------------------------------------------
 218          
 219          
 220          /*******************************************************************
 221          *  函数说明:设置数据接口位数是4为还是8位,显示行数是一行还是二行,  *
 222                       字体格式是5*7还是5*10                                 *
 223          *  输入参数: bit DL:  表示数据接口长度,DL=1,表示8位;DL=0,表示4为   *
 224          *            bit N:   表示显示行数,N=1,表示两行;N=0,表示一行       *
 225          *            bit F:   表示字体格式,F=1,表示5*10;F=0,表示5*7        *
 226          ********************************************************************/
 227          #if LCD_EN_setFunction
 228          void LCDsetFunction(bit DL,bit N,bit F)
 229          {
 230   1       unsigned char order;
 231   1       order=0x20;
 232   1       if(DL)
 233   1        order=order+0x10;
 234   1       if(N)
 235   1        order=order+0x8;
 236   1       if(F)
 237   1        order=order+0x4;
 238   1       LCDSendCommand(order);
 239   1      }
 240          #endif
 241          
C51 COMPILER V6.23a  LCD16B20                                                              10/16/2008 12:20:45 PAGE 5   

 242          
 243          /**************************************************
 244          *  函数说明:设置CG RAM地址                       *
 245          *  输入参数: unsigned char CG:  表示CG RAM地址    *
 246          ***************************************************/
 247          #if LCD_EN_setCGRAMAddress
              void LCDsetCGRAMAddress(unsigned char CG)
              {
               unsigned char order;
               order=0x40; 
               order=order+CG; 
               LCDSendCommand(order);
              }
              #endif
 256          
 257          
 258          
 259          /*************************************************
 260          *  函数说明:MCU向LCD16B20写入数据               *
 261          *  输入参数: unsigned char DATA                  *
 262          **************************************************/
 263          #if LCD_EN_writeData
 264          void LCDwriteData(unsigned char DATA)
 265          {
 266   1      #if LCD_DL<8
               unsigned char d;
              #endif
 269   1      
 270   1       LCDwaitForReady();
 271   1       LCD_RS=1;//选择数据寄存器
 272   1       NOP();
 273   1       LCD_RW=0;//MCU向LCD写入
 274   1       NOP();
 275   1      #if LCD_DL>4
 276   1       LCD_Data_Port=DATA;
 277   1       NOP();
 278   1       LCD_EN=1;
 279   1       NOP();
 280   1       LCD_EN=0;
 281   1      #elif
               d=DATA & 0xf0;
               LCD_Data_Port=LCD_Data_Port | d;
               NOP();
               LCD_EN=1;
               NOP();
               LCD_EN=0;
              

⌨️ 快捷键说明

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