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

📄 lcd1602a.lst

📁 C8051F310单片机应用程序
💻 LST
字号:
C51 COMPILER V7.50   LCD1602A                                                              10/19/2006 16:46:02 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE LCD1602A
OBJECT MODULE PLACED IN lcd1602a.OBJ
COMPILER INVOKED BY: D:\keil\C51\BIN\c51.exe lcd1602a.c DB OE

line level    source

   1          //-----------------------------------------------------------------------------
   2          // Includes
   3          //-----------------------------------------------------------------------------
   4          #include <c8051f310.h>                 // SFR declarations
   5          #include <INTRINS.H>
   6          #include <stdio.h>
   7          //-----------------------------------------------------------------------------
   8          // Global CONSTANTS
   9          //-----------------------------------------------------------------------------
  10          #define  uchar unsigned char
  11          #define  uint  unsigned int
  12          
  13          #define SYSCLK    24500000            // SYSCLK frequency in Hz
  14          
  15          //----------------------------------------------------------------------------
  16          void Write_COM(uchar ins);
  17          void Write_CHAR(uchar d);
  18          void YJ_Init(void);
  19          void writelcd(uchar disdata);
  20          void SPI0_Init (void);
  21          
  22          unsigned char xdata discode;           //开关显示、光标、闪烁的命令字暂存单元
  23          unsigned long x;
  24          unsigned char  virt_port;
  25          
  26          sbit   LCDCS  = P3^3; 
  27                            
  28          //-----------------------------------------------------------------------------
  29          //SPI_INIT
  30          //-----------------------------------------------------------------------------
  31          void SPI0_Init (void)
  32          {
  33   1         SPI0CFG = 0x70;                     // data sampled on 1st SCK rising edge
  34   1                                             // 8-bit data words
  35   1      
  36   1         SPI0CN = 0x09;                      // Master mode; SPI enabled; flags
  37   1                                             // cleared
  38   1         SPI0CKR = 0x03;//SYSCLK/2/3000000-1;// SPI clock <= 8MHz (limited by 
  39   1                                             // EEPROM spec.)
  40   1      }
  41          //-----------------------------------------------------------------------------
  42          //write com
  43          //-----------------------------------------------------------------------------
  44          void Write_COM(uchar ins)
  45               {
  46   1            uchar xdata i,t;
  47   1                uint xdata j;
  48   1               
  49   1                for(j=0;j<500;j++);                   //用延时代替查询
  50   1                virt_port|=ins&0xf0;
  51   1                writelcd(virt_port);
  52   1            //LCDE=1;
  53   1                virt_port|=0x08;
  54   1                writelcd(virt_port);
  55   1            for(i=3;i>0;i--);
C51 COMPILER V7.50   LCD1602A                                                              10/19/2006 16:46:02 PAGE 2   

  56   1            //LCDE=0;
  57   1                virt_port&=~0x08;
  58   1                writelcd(virt_port);
  59   1      
  60   1            virt_port&=0x07;
  61   1                writelcd(virt_port);
  62   1            t=ins<<4;             
  63   1            virt_port|=t&0xf0;           
  64   1                writelcd(virt_port);
  65   1            //LCDE=1;
  66   1                virt_port|=0x08;
  67   1                writelcd(virt_port);
  68   1            for(i=3;i>0;i--);
  69   1            //LCDE=0;
  70   1                virt_port&=~0x08;
  71   1                writelcd(virt_port);
  72   1            virt_port=0;
  73   1                writelcd(virt_port);
  74   1           }
  75          //----------------------------------------------------------------------------------
  76          //write data
  77          //----------------------------------------------------------------------------------
  78          void Write_CHAR(uchar d)
  79              {
  80   1            uchar xdata i,t;
  81   1                uint xdata j;
  82   1               
  83   1            for(j=0;j<500;j++);               //用延时代替查询
  84   1                virt_port|=0x02;
  85   1                writelcd(virt_port);
  86   1            virt_port|=d&0xf0;
  87   1                writelcd(virt_port);
  88   1            virt_port|=0x08;//E=1
  89   1                writelcd(virt_port);
  90   1            for(i=3;i>0;i--);
  91   1            virt_port&=0xf7; //E=0
  92   1                writelcd(virt_port);
  93   1            virt_port&=0x07;                          
  94   1                writelcd(virt_port);
  95   1                     
  96   1            t=d&0x0f;
  97   1            virt_port|=t<<4;
  98   1                writelcd(virt_port);
  99   1      
 100   1                virt_port|=0x08; //E=1
 101   1                writelcd(virt_port);
 102   1            for(i=3;i>0;i--); 
 103   1            virt_port&=0xf7; //E=0
 104   1                writelcd(virt_port);
 105   1            virt_port=0;
 106   1                writelcd(virt_port);
 107   1          }
 108          //------------------------------------------------------------------------------------------
 109          //------------------------------------------------------------------------------------------
 110          void YJ_Init(void)
 111               {
 112   1            uint xdata i;
 113   1      
 114   1      
 115   1            virt_port=0;
 116   1                writelcd(virt_port);
 117   1            virt_port|=0x08;          //E=1,第一步
C51 COMPILER V7.50   LCD1602A                                                              10/19/2006 16:46:02 PAGE 3   

 118   1                writelcd(virt_port);
 119   1            virt_port|=0x30;
 120   1                writelcd(virt_port);
 121   1                for(i=20;i>0;i--); 
 122   1            virt_port&=0xf7;                  //E=0
 123   1                writelcd(virt_port);
 124   1            virt_port=0;
 125   1                writelcd(virt_port);
 126   1            for(i=20000;i>0;i--);
 127   1            for(i=20000;i>0;i--);
 128   1                      
 129   1            virt_port|=0x08;              //E=1,第二步
 130   1                writelcd(virt_port);
 131   1            virt_port|=0x30;
 132   1                writelcd(virt_port);
 133   1                for(i=20;i>0;i--); 
 134   1            virt_port&=0xf7;                  //E=0
 135   1                writelcd(virt_port);
 136   1            virt_port=0;
 137   1                writelcd(virt_port);
 138   1            for(i=1000;i>0;i--);
 139   1      
 140   1            virt_port|=0x08;              //E=1,第三步
 141   1                writelcd(virt_port);
 142   1            virt_port|=0x30;
 143   1                writelcd(virt_port);
 144   1                for(i=20;i>0;i--); 
 145   1            virt_port&=0xf7;                  //E=0
 146   1                writelcd(virt_port);
 147   1            virt_port=0;
 148   1                writelcd(virt_port);
 149   1            for(i=1000;i>0;i--);          //3次延时,重要!
 150   1              
 151   1                for(i=8000;i>0;i--);          //用延时代替查询          
 152   1      
 153   1          
 154   1            virt_port=0;                              //第五步,写入20码,设置为4位总线方式,非常重要!!!!!
 155   1                writelcd(virt_port);
 156   1            virt_port|=0x20;                  //只写高字节
 157   1                writelcd(virt_port);
 158   1            virt_port|=0x08;          //E=1
 159   1                writelcd(virt_port);
 160   1                for(i=20;i>0;i--);
 161   1            virt_port&=0xf7;          //E=0
 162   1                writelcd(virt_port);
 163   1                for(i=10;i>0;i--);
 164   1            virt_port=0;
 165   1                writelcd(virt_port);
 166   1      
 167   1            Write_COM(0x28);              //第六步。。。。
 168   1            for(i=50;i>0;i--);
 169   1      
 170   1                Write_COM(0x01);
 171   1            for(i=50;i>0;i--);
 172   1      
 173   1            Write_COM(0x0e);
 174   1            for(i=50;i>0;i--);     
 175   1      
 176   1            Write_COM(0x06);
 177   1            for(i=50;i>0;i--);
 178   1      
 179   1           }
C51 COMPILER V7.50   LCD1602A                                                              10/19/2006 16:46:02 PAGE 4   

 180          //-----------------------------------------------------
 181          void writelcd(uchar disdata)     //write 595
 182                  {
 183   1              uint xdata i;
 184   1      
 185   1              for(i=0;i<3;i++);
 186   1              LCDCS=1;
 187   1          SPIF = 0;
 188   1          for(x=0;x<50;x++);
 189   1              SPI0DAT=disdata;
 190   1      
 191   1          while (SPIF == 0);                  // 等待写结束
 192   1          for(x=0;x<500;x++);
 193   1              LCDCS=0;
 194   1          for(x=0;x<500;x++); 
 195   1              }
 196          //----------------------------------------------------------
 197          //end of file


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1064    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =      1      12
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       3
   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 + -