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

📄 lcd2222.lst

📁 c8051f350如何使用键盘中断, 实验目的:熟悉2*2键盘操作.按键后会在液晶屏上 显示所按下的键号,如按S1键,在液晶上显示S1.
💻 LST
字号:
C51 COMPILER V7.00  LCD2222                                                                02/08/2009 09:03:38 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE LCD2222
OBJECT MODULE PLACED IN lcd2222.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\c51.exe lcd2222.c DB OE

stmt level    source

   1          //连上J15短路环.
   2          //-----------------------------------------------------------------------------
   3          // Includes
   4          //-----------------------------------------------------------------------------
   5          #include <c8051f350.h>                 // SFR declarations
   6          #include <INTRINS.H>
   7          #include <stdio.h>
   8          //-----------------------------------------------------------------------------
   9          // Global CONSTANTS
  10          //-----------------------------------------------------------------------------
  11          #define  uchar unsigned char
  12          #define  uint  unsigned int
  13          
  14          #define SYSCLK    24500000            // SYSCLK frequency in Hz
  15          
  16          //----------------------------------------------------------------------------
  17          
  18          void writelcd(uchar disdata);
  19          
  20          unsigned char xdata discode;           //开关显示、光标、闪烁的命令字暂存单元
  21          unsigned long x;
  22          unsigned char  virt_port;
  23          
  24          unsigned char xdata tab1[16]   ={0x20,0x20,0x42,0x54,0x20,0x46,0x33,0x33,0x30,0x20,0x56,0x31,0x2e,0x30
  25                                            ,0x20,0x20};
  26          unsigned char xdata Netdata[16]={0x77,0x77,0x77,0x2e,0x78,0x68,0x6c,0x2e,0x63,0x6f,
  27                                            0x6d,0x2e,0x63,0x6e,0x20,0x20}; 
  28          
  29          sbit   LCDCS  = P1^2; 
  30                            
  31          
  32          //-----------------------------------------------------------------------------
  33          // PORT_Init
  34          //-----------------------------------------------------------------------------
  35          
  36          
  37          void PORT_Init (void)
  38          {  P0SKIP    = 0x7E;
  39   1          
  40   1         XBR0 = 0x02;                       // Enable SMBus pins
  41   1         XBR1 = 0x40;                       // Enable crossbar and weak pull-ups
  42   1      
  43   1         P0MDOUT |= 0x01;                    // All P0 pins open-drain output
  44   1         P1MDOUT = 0x05;
  45   1       
  46   1      
  47   1      }
  48          //-----------------------------------------------------------------------------
  49          //SPI_INIT
  50          //-----------------------------------------------------------------------------
  51          void SPI0_Init (void)
  52          {
  53   1         SPI0CFG = 0x70;                     // data sampled on 1st SCK rising edge
  54   1                                             // 8-bit data words
  55   1      
C51 COMPILER V7.00  LCD2222                                                                02/08/2009 09:03:38 PAGE 2   

  56   1         SPI0CN = 0x09;                      // Master mode; SPI enabled; flags
  57   1                                             // cleared
  58   1         SPI0CKR = 0x03;//SYSCLK/2/3000000-1;// SPI clock <= 8MHz (limited by 
  59   1                                             // EEPROM spec.)
  60   1      }
  61          //-----------------------------------------------------------------------------
  62          //write com
  63          //-----------------------------------------------------------------------------
  64          void Write_COM(uchar ins)
  65               {
  66   1            uchar xdata i,t;
  67   1                uint xdata j;
  68   1               
  69   1                for(j=0;j<500;j++);                   //用延时代替查询
  70   1                virt_port|=ins&0xf0;
  71   1                writelcd(virt_port);
  72   1           
  73   1                virt_port|=0x08;
  74   1                writelcd(virt_port);
  75   1            for(i=3;i>0;i--);
  76   1           
  77   1                virt_port&=~0x08;
  78   1                writelcd(virt_port);
  79   1      
  80   1            virt_port&=0x07;
  81   1                writelcd(virt_port);
  82   1            t=ins<<4;             
  83   1            virt_port|=t&0xf0;           
  84   1                writelcd(virt_port);
  85   1          
  86   1                virt_port|=0x08;
  87   1                writelcd(virt_port);
  88   1            for(i=3;i>0;i--);
  89   1          
  90   1                virt_port&=~0x08;
  91   1                writelcd(virt_port);
  92   1            virt_port=0;
  93   1                writelcd(virt_port);
  94   1           }
  95          //----------------------------------------------------------------------------------
  96          //write data
  97          //----------------------------------------------------------------------------------
  98          void Write_CHAR(uchar d)
  99              {
 100   1            uchar xdata i,t;
 101   1                uint xdata j;
 102   1               
 103   1            for(j=0;j<500;j++);               //用延时代替查询
 104   1                virt_port|=0x02;
 105   1                writelcd(virt_port);
 106   1            virt_port|=d&0xf0;
 107   1                writelcd(virt_port);
 108   1            virt_port|=0x08;//E=1
 109   1                writelcd(virt_port);
 110   1            for(i=3;i>0;i--);
 111   1            virt_port&=0xf7; //E=0
 112   1                writelcd(virt_port);
 113   1            virt_port&=0x07;                          
 114   1                writelcd(virt_port);
 115   1                     
 116   1            t=d&0x0f;
 117   1            virt_port|=t<<4;
C51 COMPILER V7.00  LCD2222                                                                02/08/2009 09:03:38 PAGE 3   

 118   1                writelcd(virt_port);
 119   1      
 120   1                virt_port|=0x08; //E=1
 121   1                writelcd(virt_port);
 122   1            for(i=3;i>0;i--); 
 123   1            virt_port&=0xf7; //E=0
 124   1                writelcd(virt_port);
 125   1            virt_port=0;
 126   1                writelcd(virt_port);
 127   1          }
 128          //---------------------------------------------------------------------------------------
 129          void lcdaddr(uchar DDRAM)
 130               {
 131   1           if (DDRAM<=16)
 132   1              {
 133   2              Write_COM(0x80+DDRAM-1);
 134   2              }
 135   1           else 
 136   1              {    
 137   2              Write_COM(0x80+DDRAM+0x2f);
 138   2              }
 139   1           }
 140          //---------------------------------------------------------------------------------------
 141          void cursoropen(uchar position)//开光标,关闪烁
 142          {
 143   1                lcdaddr(position);
 144   1                discode|=0x02;
 145   1                discode&=~0x01;
 146   1                Write_COM(discode);
 147   1       }
 148          //----------------------------------------------------------------------------------------
 149          void flickeropen(uchar position)//开光标、开闪烁
 150                    {
 151   1               
 152   1                lcdaddr(position);
 153   1                discode|=0x02;
 154   1                discode|=0x01;
 155   1                Write_COM(discode);
 156   1                }     
 157          //-----------------------------------------------------------------------------------------        
 158          void cursorclose(void)          //关光标、关闪烁
 159                    {
 160   1            
 161   1                discode&=~0x02;
 162   1                discode&=~0x01;
 163   1                Write_COM(discode); 
 164   1                }
 165          
 166          //------------------------------------------------------------------------------------------
 167          void YJ_Init(void)
 168               {
 169   1            uint xdata i;
 170   1                                           // setting (24500000)
 171   1         PORT_Init ();                        // initialize crossbar and GPIO
 172   1         SPI0_Init ();
 173   1            virt_port=0;
 174   1                writelcd(virt_port);
 175   1            virt_port|=0x08;          //E=1,第一步
 176   1                writelcd(virt_port);
 177   1            virt_port|=0x30;
 178   1                writelcd(virt_port);
 179   1                for(i=20;i>0;i--); 
C51 COMPILER V7.00  LCD2222                                                                02/08/2009 09:03:38 PAGE 4   

 180   1            virt_port&=0xf7;                  //E=0
 181   1                writelcd(virt_port);
 182   1            virt_port=0;
 183   1                writelcd(virt_port);
 184   1            for(i=20000;i>0;i--);
 185   1            for(i=20000;i>0;i--);
 186   1                      
 187   1            virt_port|=0x08;              //E=1,第二步
 188   1                writelcd(virt_port);
 189   1            virt_port|=0x30;
 190   1                writelcd(virt_port);
 191   1                for(i=20;i>0;i--); 
 192   1            virt_port&=0xf7;                  //E=0
 193   1                writelcd(virt_port);
 194   1            virt_port=0;
 195   1                writelcd(virt_port);
 196   1            for(i=1000;i>0;i--);
 197   1      
 198   1            virt_port|=0x08;              //E=1,第三步
 199   1                writelcd(virt_port);
 200   1            virt_port|=0x30;
 201   1                writelcd(virt_port);
 202   1                for(i=20;i>0;i--); 
 203   1            virt_port&=0xf7;                  //E=0
 204   1                writelcd(virt_port);
 205   1            virt_port=0;
 206   1                writelcd(virt_port);
 207   1            for(i=1000;i>0;i--);          //3次延时,重要!
 208   1              
 209   1                for(i=8000;i>0;i--);          //用延时代替查询          
 210   1      
 211   1          
 212   1            virt_port=0;                              //第五步,写入20码,设置为4位总线方式,非常重要!!!!!
 213   1                writelcd(virt_port);
 214   1            virt_port|=0x20;                  //只写高字节
 215   1                writelcd(virt_port);
 216   1            virt_port|=0x08;          //E=1
 217   1                writelcd(virt_port);
 218   1                for(i=20;i>0;i--);
 219   1            virt_port&=0xf7;          //E=0
 220   1                writelcd(virt_port);
 221   1                for(i=10;i>0;i--);
 222   1            virt_port=0;
 223   1                writelcd(virt_port);
 224   1      
 225   1            Write_COM(0x28);              //第六步。。。。
 226   1            for(i=50;i>0;i--);
 227   1      
 228   1                Write_COM(0x01);
 229   1            for(i=50;i>0;i--);
 230   1      
 231   1            Write_COM(0x0e);
 232   1            for(i=50;i>0;i--);     
 233   1      
 234   1            Write_COM(0x06);
 235   1            for(i=50;i>0;i--);
 236   1      
 237   1           }
 238          //-----------------------------------------------------
 239          void writelcd(uchar disdata)     //write 595
 240                  {
 241   1              uint xdata i;
C51 COMPILER V7.00  LCD2222                                                                02/08/2009 09:03:38 PAGE 5   

 242   1      
 243   1              for(i=0;i<3;i++);
 244   1              LCDCS=1;
 245   1          SPIF = 0;
 246   1          for(x=0;x<50;x++);
 247   1              SPI0DAT=disdata;
 248   1      
 249   1          while (SPIF == 0);                  // 等待写结束
 250   1          for(x=0;x<500;x++);
 251   1              LCDCS=0;
 252   1          for(x=0;x<500;x++); 
 253   1              }
 254          //----------------------------------------------------------
 255          //end


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1156    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =     33      12
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      5       4
   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 + -