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

📄 lcd.lst

📁 51单片机及其C语言程序开发实例光盘资料.rar
💻 LST
字号:
C51 COMPILER V7.09   LCD                                                                   08/24/2007 09:37:37 PAGE 1   


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

line level    source

   1          #include<reg51.h>
   2          #include"Config.h"
   3          #include"IOCfg.c"
   4          #include"TimeDLY.h"
   5          #include"IIC_PCA8574.h"
   6          #include"LCD.h"
   7          
   8          bit x;
   9          
  10          //IO输入输出控制
  11          void InitLCDData(bit i) 
  12          {
  13   1              if(i==1) x=PCA8574_PutOne(0x41,0xff);
  14   1              else     x=PCA8574_PutOne(0x41,0x00);
  15   1              } 
  16          
  17          //指令/数据选择函数:SetLCD_RS()
  18          void  SetLCD_RS(bit i)
  19          {
  20   1              if(i==1) x=PCA8574_PutOne(0x40,0x20);
  21   1              else     x=PCA8574_PutOne(0x40,0x00);
  22   1              }
  23          
  24          //读写操作控制信号:SetLCD_RW()
  25          void SetLCD_RW(bit i)
  26          {
  27   1              if(i==1) x=PCA8574_PutOne(0x40,0x40);
  28   1              else     x=PCA8574_PutOne(0x40,0x00);
  29   1              }
  30          
  31          //使能信号:SetLCD_EN()
  32          void SetLCD_EN(bit i)
  33          {
  34   1              if(i==1) x=PCA8574_PutOne(0x40,0x10);
  35   1              else     x=PCA8574_PutOne(0x40,0x00);
  36   1              }       
  37                  
  38          //复位:SetLCD_RST()
  39          void SetLCD_RST(bit i)
  40          {
  41   1              if(i==1) x=PCA8574_PutOne(0x40,0x80);
  42   1              else     x=PCA8574_PutOne(0x40,0x00);
  43   1              }
  44          
  45          //读状态函数:ReadStatus()
  46          INT8U ReadStatus(void)
  47          {
  48   1        INT8U i;
  49   1        InitLCDData(1);
  50   1        SetLCD_RW(1);
  51   1        SetLCD_RS(0);
  52   1        SetLCD_EN(0);
  53   1        nNop(10);
  54   1        SetLCD_EN(1);
  55   1        nNop(20);
C51 COMPILER V7.09   LCD                                                                   08/24/2007 09:37:37 PAGE 2   

  56   1        x=PCA8574_GetOne(0x41,i);
  57   1        nNop(40);
  58   1        SetLCD_EN(0);
  59   1        return(i);
  60   1      }
  61          
  62          //读一字节数据函数:ReadOneByte()
  63          INT8U ReadOneByte(void)
  64          {
  65   1        INT8U i;
  66   1        InitLCDData(1);
  67   1        SetLCD_RW(1);
  68   1        SetLCD_RS(1);
  69   1        SetLCD_EN(0);
  70   1        nNop(10);
  71   1        SetLCD_EN(1);
  72   1        nNop(20);
  73   1        x=PCA8574_GetOne(0x41,i);
  74   1        nNop(40);
  75   1        SetLCD_EN(0);
  76   1        return(i);
  77   1      }
  78          
  79          //写指令函数:WriteInstruc()
  80          void WriteInstruc(INT8U Instruction)
  81          {
  82   1        while((ReadStatus() & 0x80)!= 0x00);
  83   1        InitLCDData(0);
  84   1        SetLCD_RW(0);
  85   1        SetLCD_RS(0);
  86   1        SetLCD_EN(0);
  87   1        x=PCA8574_PutOne(0x41,Instruction);
  88   1        nNop(100);
  89   1        SetLCD_EN(1);
  90   1        nNop(100);
  91   1        SetLCD_EN(0);  
  92   1      }
  93          
  94          //写一字节数据函数:WriteOneByte()
  95          void WriteOneByte(INT8U Data)
  96          {
  97   1        while((ReadStatus() & 0x80)!= 0x00);
  98   1        InitLCDData(0);
  99   1        SetLCD_RW(0);
 100   1        SetLCD_RS(1);
 101   1        SetLCD_EN(0);
 102   1        x=PCA8574_PutOne(0x41,Data);
 103   1        nNop(100);
 104   1        SetLCD_EN(1);
 105   1        nNop(100);
 106   1        SetLCD_EN(0);
 107   1      }
 108          
 109          //复位函数:ResetLCD()
 110          void ResetLCD(void)
 111          {
 112   1        LDelay(40);
 113   1        SetLCD_RST(0);
 114   1        LDelay(1);
 115   1        SetLCD_RST(1);
 116   1        LDelay(1);
 117   1      }
C51 COMPILER V7.09   LCD                                                                   08/24/2007 09:37:37 PAGE 3   

 118          
 119          //初始化函数:InitLCD()
 120          void InitLCD(void)
 121          {
 122   1        ResetLCD();
 123   1        FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
 124   1        LDelay(1);
 125   1        FunctionSet(0x30); // Function Set: 8_bits_Data, Base_Instrution
 126   1        LDelay(1);
 127   1        Disp_OnOff(0x0c);  // Disp_ON: The Whole ALL_ON
 128   1        LDelay(1);
 129   1        ClearLCD();        // Clear LCD
 130   1        LDelay(1);
 131   1        PointSet(0x06);    // Entry Mode Set: DDRAM Address Counter(AC) + 1
 132   1        LDelay(1);
 133   1      }
 134          
 135          //显示一个汉字(16x16)函数:DispOneWord()
 136          void DispOneWord(INT8U X,INT8U Y,INT16U Word)
 137          {
 138   1        INT8U Disp_Address;
 139   1        INT8U Address_H;
 140   1        INT8U Address_L;
 141   1        
 142   1        if((X == 0x00)||(X == 0x02)) // 0,2行
 143   1              Address_H = 0x80;
 144   1        else // 1,3行
 145   1              Address_H = 0x90;
 146   1              
 147   1        if((X == 0x00)||(X == 0x01)) // 0,1行
 148   1              Address_L = Y;
 149   1        else // 2,3行
 150   1              Address_L = Y + 0x08;
 151   1        Disp_Address = (Address_H | Address_L) & 0xff;
 152   1        SetDDRAM_Add(Disp_Address);                           // Set DDRAM(Disp_Address)
 153   1        WriteOneByte(((Word & 0xff00) >> 8) & 0xff); // H_Byte
 154   1        WriteOneByte(Word & 0xff);             // L_Byte  
 155   1      }
 156          
 157          
 158          //显示两个字符(8x16)函数:DispTwoCharacter()
 159          void DispTwoCharacter(INT8U X,INT8U Y,INT8U Character1,INT8U Character2)
 160          {
 161   1        INT8U Disp_Address;
 162   1        INT8U Address_H;
 163   1        INT8U Address_L;
 164   1        
 165   1        if((X == 0x00)||(X == 0x02)) // 0,2行
 166   1              Address_H = 0x80;
 167   1        else // 1,3行
 168   1              Address_H = 0x90;
 169   1              
 170   1        if((X == 0x00)||(X == 0x01)) // 0,1行
 171   1              Address_L = Y;
 172   1        else // 2,3行
 173   1              Address_L = Y + 0x08;
 174   1        Disp_Address = Address_H | Address_L;
 175   1        SetDDRAM_Add(Disp_Address); // Set DDRAM(Disp_Address)
 176   1        WriteOneByte(Character1);
 177   1        WriteOneByte(Character2);
 178   1       }

C51 COMPILER V7.09   LCD                                                                   08/24/2007 09:37:37 PAGE 4   


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


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

⌨️ 快捷键说明

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