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

📄 lcd.lst

📁 单片机乒乓球游戏机 可以再proteus仿真
💻 LST
字号:
C51 COMPILER V7.06   LCD                                                                   09/23/2008 03:23:32 PAGE 1   


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

stmt level    source

   1          /*************************************
   2           * 控制器:KS0108 
   3           * MCU:AT89C52 ,晶体频率:6MHz 
   4           * 取模方式:纵向字节倒序 
   5           * CS1和CS2为低电平有效  
   6           * copyright:tiany
   7           * time:2008-9-20
   8          **************************************/
   9          #include <reg52.h>
  10          #include "LCD.h"
  11          
  12          //全局变量=====
  13          uchar status;
  14          uchar cbyte;
  15          
  16          void Delay_us(uint DelayTime)        //*******us延时*****//
  17          {
  18   1         while(DelayTime) DelayTime--;
  19   1      }
  20          
  21          
  22          
  23          /*--------------------------
  24          *忙信号检测 
  25          ----------------------------*/ 
  26          void LCD_Check_Busy(void)
  27          {
  28   1        /* while(1)
  29   1              {
  30   1                LCD_EN = 0;
  31   1                LCD_RS = 0;
  32   1                LCD_RW = 1;
  33   1                LCD_BUS = 0xFF;
  34   1                LCD_EN = 1;
  35   1                if(!LCD_Busy) break;   /***在proteus中仿真查忙会引起死循环,程序的BUG!***/
  36   1          // }*/
  37   1         LCD_EN = 0;
  38   1      }
  39            
  40          /*---------------------------------------------------------------------------- 
  41          写入控制指令代码。 
  42          函数入口参数:Command ------ 写入的控制指令代码 。 
  43                        CS_Num  ------ 左右半屏的选数值 
  44          ----------------------------------------------------------------------------*/ 
  45          void LCD_WriteCommand(uchar Command, uchar CS_Num) 
  46          { 
  47   1        LCD_Check_Busy();
  48   1        if(CS_Num==L)                 /*选左半屏*/
  49   1         {
  50   2           LCD_CS1 = 0;
  51   2                 LCD_CS2 = 1;
  52   2              }
  53   1        else if(CS_Num==R)    /*选右半屏*/
  54   1         {
  55   2           LCD_CS1 = 1;
C51 COMPILER V7.06   LCD                                                                   09/23/2008 03:23:32 PAGE 2   

  56   2                 LCD_CS2 = 0;
  57   2              }
  58   1        LCD_EN = 0;           
  59   1        LCD_RS = 0;           
  60   1        LCD_RW = 0;          
  61   1        LCD_BUS = Command;   
  62   1        LCD_EN = 1;          
  63   1        Delay_us(1);         
  64   1        LCD_EN = 0;          
  65   1        LCD_CS1 = 1;         
  66   1        LCD_CS2 = 1;          
  67   1      } 
  68          /*---------------------------------------------------------------------------- 
  69          写入定位信息 
  70          函数入口参数:hang ------ 写入的行位置 
  71                        lie  ------ 写入的列位置 
  72          ----------------------------------------------------------------------------*/ 
  73          void Locatexy(uchar hang,uchar lie)
  74          {
  75   1         uchar  x, y, right;
  76   1         switch(lie&0xc0)
  77   1          {
  78   2          case 0:   { right = L;break;} //置左半屏标志
  79   2          case 0x40:{ right = R;break;}//置右半屏标志
  80   2           }
  81   1         x=lie&0x3f|SETX; //把列数据变成列命令 40
  82   1         y=hang&0x07|SETY;//把行数据变成行命令 b8
  83   1         LCD_WriteCommand(y, right);/***送行命令***/
  84   1         LCD_WriteCommand(x, right);/***送列命令***/
  85   1         
  86   1         if(right==R)
  87   1          status = R;
  88   1         else
  89   1          status = L;//置左又半区标志
  90   1      }
  91          /*---------------------------------------------------------------------------- 
  92          写入显示数据。 
  93          函数入口参数: data    --------写入的显示数据 。 
  94                         hang,lie--------写入定位位置
  95          ----------------------------------------------------------------------------*/ 
  96          void LCD_WriteData(uchar Data,uchar hang,uchar lie) 
  97          { 
  98   1        Locatexy(hang,lie);//定位显示位置
  99   1        if(status==L)          /*选择左半屏*/
 100   1         {
 101   2           LCD_CS1 = 0;
 102   2               LCD_CS2 = 1;
 103   2              }
 104   1        else if(status==R)  /*选择右半屏*/
 105   1         {
 106   2           LCD_CS1 = 1;
 107   2               LCD_CS2 = 0;
 108   2              }
 109   1        LCD_Check_Busy();
 110   1        LCD_EN = 0;
 111   1        LCD_RS = 1;       
 112   1        LCD_RW = 0;       
 113   1        LCD_BUS = Data;  
 114   1        LCD_EN = 1;       
 115   1        Delay_us(1);     
 116   1        LCD_EN = 0;    
 117   1        LCD_CS1= 1;    
C51 COMPILER V7.06   LCD                                                                   09/23/2008 03:23:32 PAGE 3   

 118   1        LCD_CS2= 1;       
 119   1      } 
 120          //=========数据读取====================
 121          /*uchar LCD_ReadData(uchar  hang,uchar lie)
 122          {   
 123             uchar rdata;
 124             Locatexy(hang,lie);//定位显示位置
 125             if(status==L)
 126             {  
 127              LCD_Check_Busy();
 128              LCD_CS1= 0;    
 129              LCD_CS2= 1; 
 130             }
 131             else
 132             {
 133              LCD_Check_Busy();
 134              LCD_CS1= 1;    
 135              LCD_CS2= 0; 
 136             }
 137            P0 =0xFF;   //数据送到P0口
 138            LCD_EN = 0;  
 139            LCD_RS = 1;       
 140            LCD_RW = 1;
 141            LCD_EN = 1; 
 142            Delay_us(1);
 143            rdata=P0;
 144            
 145            LCD_RS = 1;       
 146            LCD_RW = 1; 
 147            //P0 =0xFF;   //数据送到P0口 要读两次,第二次的才正确
 148            Delay_us(1);
 149            rdata=P0;
 150            
 151            LCD_EN = 0;    
 152            LCD_CS1= 1;    
 153            LCD_CS2= 1; 
 154            return rdata;
 155          }*/
 156          /*---------------------------------------------------------------------------
 157          液晶模块的清屏
 158          ---------------------------------------------------------------------------*/
 159          void LCD_CLR(uchar Side_Num)
 160          {
 161   1         uchar i,k;
 162   1         for(i=0;i<8;i++)                               
 163   1         {    
 164   2           if(Side_Num==L)
 165   2                   for(k=0;k<64;k++)
 166   2                    {
 167   3                          LCD_WriteData(0x00,i,k);
 168   3                        }
 169   2               else if(Side_Num==R)
 170   2                   for(k=64;k<128;k++)
 171   2                    {
 172   3                          LCD_WriteData(0x00,i,k);
 173   3                        }
 174   2          }
 175   1      }
 176          
 177          /*---------------------------------------------------------------------------
 178          初始化
 179          ---------------------------------------------------------------------------*/
C51 COMPILER V7.06   LCD                                                                   09/23/2008 03:23:32 PAGE 4   

 180          void LCD_Initial(void) 
 181          {   
 182   1         LCD_WriteCommand(DISPOFF,L);   /*显示关*/
 183   1         LCD_WriteCommand(DISPOFF,R);
 184   1         Delay_us(1);
 185   1         LCD_WriteCommand(DISPON,L);    /*显示开*/
 186   1         LCD_WriteCommand(DISPON,R);  
 187   1         LCD_WriteCommand(DISPFIRST,L);  /*起始行*/
 188   1         LCD_WriteCommand(DISPFIRST,R);                           
 189   1         LCD_CLR(L);
 190   1         LCD_CLR(R);
 191   1      } 
 192          /*---------------------------------------------------------------------------
 193          输出全屏图片: 128*64
 194          ---------------------------------------------------------------------------*/
 195          /*
 196          void put_picture(uchar* pictureName)//128*64
 197          {
 198            uchar i,j;
 199            uint  x;
 200              for(j=0;j<8;j++)
 201                  {
 202               x=j*128; 
 203               for(i=0;i<128;i++)
 204                {
 205                    cbyte=*(pictureName+x);
 206                    LCD_WriteData(cbyte,j,i);
 207                    x++;
 208                }     
 209              }   
 210          }
 211          */
 212          /*---------------------------------------------------------------------------
 213          输出半屏图片: 64*64
 214          ---------------------------------------------------------------------------*/
 215          
 216          void put_picture_half(uchar* pictureName,uchar Side_Num)//64*64
 217          {
 218   1        uchar i,j;
 219   1        uint  x;
 220   1          for(j=0;j<8;j++)
 221   1          {
 222   2            x=j*64; 
 223   2            if(Side_Num==L)
 224   2            {
 225   3             for(i=0;i<64;i++)
 226   3              {
 227   4                cbyte=*(pictureName+x);
 228   4                LCD_WriteData(cbyte,j,i);
 229   4                x++;
 230   4              } 
 231   3            }  
 232   2            else if(Side_Num==R)
 233   2            {
 234   3             for(i=64;i<128;i++)
 235   3              {
 236   4                cbyte=*(pictureName+x);
 237   4                LCD_WriteData(cbyte,j,i);
 238   4                x++;
 239   4              } 
 240   3            }   
 241   2          }
C51 COMPILER V7.06   LCD                                                                   09/23/2008 03:23:32 PAGE 5   

 242   1      }
 243          /*---------------------------------------------------------------------------
 244          输出英文和数字:8*8
 245          ---------------------------------------------------------------------------*/
 246          /*
 247          void put_char(uchar* Data, uchar hang, uchar lie,uchar reverse)//8*8
 248          {
 249             uchar i;
 250             uint x;
 251             x=0;
 252             for(i=0;i<8;i++)
 253              {
 254                if(reverse) cbyte=~(*(Data+x));
 255                 else cbyte=*(Data+x);
 256                 
 257                LCD_WriteData(cbyte,hang,lie);
 258                x++;
 259                lie++;
 260              }
 261          
 262          }*/
 263          /*---------------------------------------------------------------------------
 264          输出汉字: 16*16
 265          ---------------------------------------------------------------------------*/
 266          void put_chinese(uchar* Data, uchar hang, uchar lie,uchar reverse)//16*16
 267          {   
 268   1        uchar i,j,lie0;
 269   1        uint x;
 270   1        x=0;
 271   1        lie0=lie;
 272   1        for(j=0;j<2;j++)
 273   1         {
 274   2           for(i=0;i<16;i++)
 275   2            {
 276   3             if(reverse) cbyte=~(*(Data+x));
 277   3             else cbyte=*(Data+x);  
 278   3              LCD_WriteData(cbyte,hang,lie);
 279   3              x++;
 280   3              lie++;
 281   3            }   
 282   2           lie=lie0;
 283   2           hang++;   
 284   2         } 
 285   1      }
 286          
 287          /*---------------------------------------------------------------------------
 288          输出数字和字母: 16*8
 289          ---------------------------------------------------------------------------*/
 290          void put_num(uchar* Data, uchar hang, uchar lie,uchar reverse)//16*16
 291          {   
 292   1        uchar i,j,lie0;
 293   1        uint x;
 294   1        x=0;
 295   1        lie0=lie;
 296   1        for(j=0;j<2;j++)
 297   1         {
 298   2           for(i=0;i<8;i++)
 299   2            {
 300   3             if(reverse) cbyte=~(*(Data+x));
 301   3             else cbyte=*(Data+x);  
 302   3              LCD_WriteData(cbyte,hang,lie);
 303   3              x++;
C51 COMPILER V7.06   LCD                                                                   09/23/2008 03:23:32 PAGE 6   

 304   3              lie++;
 305   3            }   
 306   2           lie=lie0;
 307   2           hang++;   
 308   2         } 
 309   1      }
 310          //===================================================
 311          //  屏幕向上移动   有问题  ????
 312          //===================================================
 313          /*void MoveUp()
 314          { 
 315             uint hang;
 316             uchar lie;
 317             //uchar hang2;
 318                 for(hang=0;hang<8;hang++)
 319                 {
 320                      for(lie=0;lie<128;lie++)
 321                      { 
 322                         uchar buf; 
 323                         //uchar lie2=lie+1;
 324                         buf =LCD_ReadData(hang,lie);
 325                         //if(hang==0)
 326                          //continue ;
 327                         //else
 328                         // hang2=hang-1; 
 329                         LCD_WriteData(buf,hang,lie);       
 330                      }
 331                     Delay_us(1000);  
 332                 }
 333          }*/
 334          
 335          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    575    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2      32
   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 + -