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

📄 lcd_disp.lst

📁 俄罗斯方块 在Proteus仿真通过 有兴趣的自己下载看看
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE LCD_DISP
OBJECT MODULE PLACED IN LCD_Disp.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE LCD_Disp.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*****************************************************
   2          *文件名称:LCD_Disp.c
   3          *****************************************************/
   4          #include "lCD_PortConfig.h"
   5          #include "LCD_Driver.h"
   6          #include "LCD_Disp.h"
   7          #include "stdlib.h"
   8          #include "sch.h"
   9          
  10          uchar Figure_Date  [4]={0x00,0x0e,0x04,0x00};     //存放从ROM中读取的基本形状显示代码
  11          uchar Figure_Date_New[4]={0x00,0x00,0x00,0x00};     
  12          uchar Figure_Date_Old[4]={0x00,0x0e,0x04,0x00};
  13          uchar Game_Over=1;                  // 1游戏正常运行,0游戏结束
  14          ulong idata Disp_Buff[32];       //定义显示缓存 
  15          uchar X_Coor=25,Y_Coor=0;         //存放X Y坐标
  16          uchar Fig_Type=4;
  17          uchar Clr_Preview[4]={0,0,0,0};   //用于清除预览框
  18          uchar SUM=0;                      //存储总分
  19          uchar speed=0;                    //速度寄存器
  20          
  21          uchar code a[4]={0,0x06,0x06,0}; //"田"字形
  22          
  23          uchar code b[4]={0x04,0x04,0x04,0x04};//"|"字形
  24          uchar code c[4]={0x00,0x00,0x0f,0x00};//"一"字形
  25             
  26          uchar code d[4]={0x00,0x0e,0x04,0x00};
  27          uchar code e[4]={0x04,0x0c,0x04,0x00};
  28          uchar code f[4]={0x04,0x0e,0x00,0x00};
  29          uchar code g[4]={0x04,0x06,0x04,0x00};
  30          
  31          uchar code h[4]={0x00,0x0c,0x06,0x00};
  32          uchar code i[4]={0x02,0x06,0x04,0x00};
  33          
  34          uchar code j[4]={0x00,0x06,0x0c,0x00};
  35          uchar code k[4]={0x08,0x0c,0x04,0x00};
  36          
  37          uchar code fen[]={0x10,0x01,0x30,0x01,0x10,0x02,0x08,0x04,0x08,0x0C,0x04,0x18,0x02,0x70,0xF9,0x27,
  38          0x20,0x04,0x20,0x04,0x20,0x04,0x20,0x04,0x10,0x04,0x08,0x05,0x04,0x02,0x02,0x00}; /*"分",0*/
  39          
  40          uchar code shu[]={0x10,0x04,0x92,0x0C,0x54,0x04,0x38,0x04,0xFF,0x7E,0x38,0x22,0xD4,0x22,0x12,0x23,
  41          0x10,0x14,0xFF,0x14,0x48,0x08,0x2C,0x08,0x30,0x14,0x4C,0x72,0x03,0x21,0x00,0x00};/*"数",1*/
  42          
  43          uchar code su[]={0x00,0x01,0x02,0x01,0xF4,0x3F,0x04,0x01,0x00,0x01,0xE0,0x1F,0x27,0x11,0x24,0x11,
  44          0xE4,0x1F,0x84,0x05,0x44,0x19,0x34,0x11,0x04,0x01,0x0A,0x01,0xF1,0x7F,0x00,0x00};/*"速",2*/
  45          
  46          uchar code du[]={0x80,0x00,0x00,0x01,0xFC,0x7F,0x44,0x04,0x44,0x04,0xF4,0x3F,0x44,0x04,0xC4,0x07,
  47          0x04,0x00,0xE4,0x1F,0x44,0x08,0x84,0x04,0x04,0x03,0x82,0x0C,0x62,0x70,0x19,0x20};/*"度",3*/
  48          
  49          uchar code you[]={0x22,0x04,0x44,0x04,0x44,0x04,0xF0,0x7D,0x21,0x02,0x2A,0x3D,0xEA,0x10,0xA4,0x08,
  50          0xA4,0x08,0xA4,0x7E,0xA3,0x08,0x92,0x08,0x92,0x08,0x92,0x08,0xAA,0x0A,0x42,0x04};/*"游",4*/
  51          
  52          uchar code xi[]={0x00,0x02,0x00,0x0A,0x7E,0x12,0x40,0x12,0x22,0x02,0xA4,0x7F,0x18,0x02,0x10,0x22,
  53          0x30,0x14,0x28,0x0C,0x48,0x04,0x44,0x0A,0x82,0x49,0x60,0x50,0x00,0x60,0x00,0x40};/*"戏",5*/
  54          
  55          uchar code jie[]={0x08,0x04,0x08,0x04,0x04,0x04,0xC4,0x7F,0x12,0x04,0x0F,0x04,0x88,0x3F,0x04,0x00,
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 2   

  56          0x02,0x00,0x9F,0x3F,0x80,0x20,0x80,0x20,0x98,0x20,0x87,0x3F,0x80,0x20,0x00,0x00};/*"结",6*/
  57          
  58          uchar code shu1[]={0x80,0x00,0x80,0x00,0xFF,0x7F,0x80,0x00,0xFC,0x1F,0x84,0x10,0x84,0x10,0xFC,0x1F,
  59          0xC4,0x10,0xA0,0x01,0xA0,0x02,0x90,0x0C,0x8C,0x70,0x83,0x20,0x80,0x00,0x80,0x00};/*"束",7*/
  60          
  61          uchar code num[10][16]={
  62          {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x24,0x18,0x00,0x00},
  63          {0x00,0x00,0x00,0x08,0x0E,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x3E,0x00,0x00},/*"1",0*/
  64          
  65          {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x20,0x20,0x10,0x08,0x04,0x42,0x7E,0x00,0x00},/*"2",1*/
  66          
  67          {0x00,0x00,0x00,0x3C,0x42,0x42,0x20,0x18,0x20,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*"3",2*/
  68          
  69          {0x00,0x00,0x00,0x20,0x30,0x28,0x24,0x24,0x22,0x22,0x7E,0x20,0x20,0x78,0x00,0x00},/*"4",3*/
  70          
  71          {0x00,0x00,0x00,0x7E,0x02,0x02,0x02,0x1A,0x26,0x40,0x40,0x42,0x22,0x1C,0x00,0x00},/*"5",4*/
  72          
  73          {0x00,0x00,0x00,0x38,0x24,0x02,0x02,0x1A,0x26,0x42,0x42,0x42,0x24,0x18,0x00,0x00},/*"6",5*/
  74          
  75          {0x00,0x00,0x00,0x7E,0x22,0x22,0x10,0x10,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00},/*"7",6*/
  76          
  77          {0x00,0x00,0x00,0x3C,0x42,0x42,0x42,0x24,0x18,0x24,0x42,0x42,0x42,0x3C,0x00,0x00},/*"8",7*/
  78          
  79          {0x00,0x00,0x00,0x18,0x24,0x42,0x42,0x42,0x64,0x58,0x40,0x40,0x24,0x1C,0x00,0x00},/*"9",8*/
  80          
  81          };/*"0",9*/                               
  82          
  83          /*--------------------------------------------------
  84          *函数名称:Write_OneDot
  85          *功    能:在屏幕任意坐标描绘一个点
  86          *参    数:X     横坐标(0-63)
  87                    Y     纵坐标(0-63)
  88                    color 要填充的颜色 0:白色 1:黑色
  89          *返    回:无
  90          ---------------------------------------------------*/
  91          void Write_OneDot(uchar X,uchar Y,uchar color)
  92          {
  93   1      
  94   1       uchar Column_H,Column_L ,Page,Offset, RamDate,temp;
  95   1      
  96   1       if(X<128&&Y<64)      //坐标超出显示区域不显示          
  97   1       {
  98   2       Page=Y/8;         //将坐标转换为相应的page,column以及位偏移量
  99   2       Offset=Y%8;
 100   2       Column_L=X&0x0f;
 101   2       Column_H=X>>4;
 102   2       
 103   2       LCD_RegWrite(Page|0xb0);     //设置地址
 104   2       LCD_RegWrite(Column_H|0x10);
 105   2       LCD_RegWrite(Column_L);
 106   2      
 107   2       RamDate=LCD_DateRead();      //读取该地址对应的显示数据
 108   2      
 109   2       if(color)                    //将XY坐标对应的位清零或置一,其余位保持不变
 110   2              {
 111   3               switch (Offset)
 112   3                      {
 113   4                       case 0: temp=0x01; break;
 114   4                       case 1: temp=0x02; break;
 115   4                       case 2: temp=0x04; break;
 116   4                       case 3: temp=0x08; break;
 117   4                       case 4: temp=0x10; break;
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 3   

 118   4                       case 5: temp=0x20; break;
 119   4                       case 6: temp=0x40; break;
 120   4                       case 7: temp=0x80; break;               
 121   4                      }
 122   3          RamDate=RamDate|temp;
 123   3      
 124   3              LCD_DateWrite(RamDate);  
 125   3              }
 126   2       else
 127   2              {
 128   3               switch(Offset)
 129   3                      {
 130   4                       case 0: temp=0xfe;break;
 131   4                       case 1: temp=0xfd;break;
 132   4                       case 2: temp=0xfb;break;
 133   4                       case 3: temp=0xf7;break;
 134   4                       case 4: temp=0xef;break;
 135   4                       case 5: temp=0xdf;break;
 136   4                       case 6: temp=0xbf;break;
 137   4                       case 7: temp=0x7f;break;                
 138   4                      } 
 139   3              RamDate=RamDate&temp;
 140   3      
 141   3              LCD_DateWrite(RamDate);
 142   3              }
 143   2       }
 144   1      }
 145          /*--------------------------------------------------
 146          *函数名称:Write_OneLargeDot
 147          *功    能:预览框更新
 148          *参    数:*p 指向要写入的内容
 149          *返    回:无
 150          ---------------------------------------------------*/
 151          void Write_OneLargeDot(uchar X,uchar Y,uchar color)
 152          {    
 153   1           X=X-10;
 154   1               
 155   1           Write_OneDot(2*X,2*Y,color);
 156   1           Write_OneDot(2*X+1,2*Y,color);
 157   1           Write_OneDot(2*X,2*Y+1,color);
 158   1           Write_OneDot(2*X+1,2*Y+1,color);           
 159   1      }
 160          /*--------------------------------------------------
 161          *函数名称:Write_Preview
 162          *功    能:预览框更新
 163          *参    数:*p 指向要写入的内容
 164          *返    回:无
 165          ---------------------------------------------------*/
 166          void Write_Preview(uchar *p)
 167          {uchar i,j,m,n,temp;
 168   1       uchar x,y;
 169   1       x=70;
 170   1       y=16;
 171   1       for(i=0;i<4;i++)
 172   1              {
 173   2               temp=*p;
 174   2               for(j=0;j<4;j++)
 175   2                      {
 176   3                       if(temp&0x01)
 177   3                              {
 178   4                              for(m=0;m<4;m++)
 179   4                                      {
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 4   

 180   5                                       for(n=0;n<4;n++)
 181   5                                         Write_OneDot(x+n,y-m,1);
 182   5                                      }
 183   4                              }
 184   3                       else
 185   3                              {
 186   4                              for(m=0;m<4;m++)
 187   4                                      {
 188   5                                       for(n=0;n<4;n++)
 189   5                                         Write_OneDot(x+n,y-m,0);
 190   5                                      }
 191   4                              }
 192   3                       temp=temp>>1;
 193   3                       x=x+4;
 194   3                      }
 195   2               p++;
 196   2               x=70;
 197   2               y=y-4;
 198   2              }
 199   1      
 200   1      }
 201          
 202          
 203          /*--------------------------------------------------
 204          *函数名称:Write_4x4Ram
 205          *功    能:在屏幕任意坐标处显示一个4X4区域,
 206                    以坐标点为起始向第一象限延伸
 207          *参    数:X     横坐标(10-41)
 208                    Y     纵坐标(1-31)
 209                    *p    指向存放数据的数组
 210          *返    回:无
 211          ---------------------------------------------------*/
 212          
 213          void Write_4x4Ram(char X,char Y,uchar  *p)
 214          {
 215   1       uchar i,j,temp;
 216   1       for(i=0;i<4;i++)
 217   1              {
 218   2               temp=*p;
 219   2               for(j=0;j<4;j++)
 220   2                      {
 221   3                       if(temp&0x01)
 222   3                              Write_OneLargeDot( X+j,  Y-i, 1);
 223   3                       //else
 224   3                              //Write_OneLargeDot( X+j,  Y-i, 0);
 225   3                       temp=temp>>1;           
 226   3                      }
 227   2           p++;        
 228   2              }
 229   1      }
 230          /*--------------------------------------------------
 231          *函数名称:Write_One_Word
 232          *功    能:指定位置显示一个汉字(16X16)
 233          *参    数:x y *p
 234          *返    回:无
 235          ---------------------------------------------------*/
 236          void Write_One_Word(uchar x,uchar y,uchar code *p)
 237          {
 238   1       uchar i,j,k,temp;
 239   1       for(i=0;i<16;i++)
 240   1              {
 241   2               for(j=0;j<2;j++)
C51 COMPILER V8.01   LCD_DISP                                                              06/17/2008 20:51:00 PAGE 5   

 242   2               {      
 243   3                temp=*p;
 244   3                for(k=0;k<8;k++)
 245   3                      {                
 246   4                       if(temp&0x01)
 247   4                              Write_OneDot(x+k,y+i,1);
 248   4                       else
 249   4                              Write_OneDot(x+k,y+i,0);
 250   4                       temp=temp>>1;
 251   4                      }
 252   3                 p++;
 253   3                 x=x+8;
 254   3                }
 255   2               x=x-16;
 256   2              }
 257   1      }
 258          /*--------------------------------------------------
 259          *函数名称:Disp_Over
 260          *功    能:显示游戏结束
 261          *参    数:无
 262          *返    回:无
 263          ---------------------------------------------------*/
 264          void Disp_Game_Over(void)
 265          {
 266   1       Write_One_Word(0,15,you);
 267   1       Write_One_Word(16,15,xi);
 268   1       Write_One_Word(32,15,jie);
 269   1       Write_One_Word(48,15,shu1);
 270   1      
 271   1      }
 272          /*--------------------------------------------------
 273          *函数名称:Write_One_Byte
 274          *功    能:指定位置显示一个字符(8X16)
 275          *参    数:x y n
 276          *返    回:无
 277          ---------------------------------------------------*/
 278          void Write_One_Byte(uchar x,uchar y,uchar const n)
 279          {uchar *p;
 280   1       uchar i,k,temp;
 281   1       p=&num[n][0];
 282   1       for(i=0;i<16;i++)
 283   1              { temp=*p;
 284   2                for(k=0;k<8;k++)
 285   2                      {                
 286   3                       if(temp&0x01)
 287   3                              Write_OneDot(x+k,y+i,1);
 288   3                       else
 289   3                              Write_OneDot(x+k,y+i,0);
 290   3                       temp=temp>>1;
 291   3                      }
 292   2                 p++;    
 293   2              }

⌨️ 快捷键说明

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