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

📄 ks0108.lst

📁 单片机版俄罗斯方块游戏
💻 LST
字号:
C51 COMPILER V7.06   KS0108                                                                11/12/2008 09:12:21 PAGE 1   


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

stmt level    source

   1          /*--------------------------------------------------------------KS0108 LCD DIRVER-*/
   2          /*----------------------------------------------write by codekey, codekey@126.com-*/
   3          /*-------------------------------------------------------------------------2008-3-*/
   4          /*---------------------------------------------欢迎使用和修改,但需保留原作者信息-*/
   5          /*--------------------------------------------------------------------------------*/
   6          #include <reg52.h>
   7          #include <intrins.h>
   8          #include <math.h>
   9          #include "KS0108.H"
  10          
  11          UINT8 ReadStatus(UINT8 sel)
  12          {
  13   1              UINT8 status;
  14   1              CS = sel;
  15   1              DI = 0; // ┒
  16   1              RW = 1; // ┛读状态指令
  17   1              E  = 1; // 在E高电平期间,数据被读出
  18   1              _nop_();
  19   1              status = DB;
  20   1              E=0;
  21   1              _nop_();
  22   1              return status;
  23   1      }
  24          
  25          void WaitForUse(UINT8 sel)
  26          {
  27   1              UINT8 status;
  28   1              CS=sel;
  29   1              do
  30   1              {
  31   2                      DB =0xFF;
  32   2                      DI = 0; // ┒
  33   2                      RW = 1; // ┛读状态指令
  34   2                      E  = 1; // 在E高电平期间,数据被读出     
  35   2                      _nop_();
  36   2                      status = DB;
  37   2                      E=0;
  38   2                      _nop_();
  39   2              }
  40   1              while((status&0x80)==0x80);
  41   1      }
  42          
  43          void SetDisplay(UINT8 sel, UINT8 cmd)
  44          {
  45   1              WaitForUse(sel);
  46   1              E = 0;
  47   1              CS = sel;       // 片选
  48   1              DI = 0;         // ┒
  49   1              RW = 0;         // ┛
  50   1              DB = cmd;
  51   1              E  = 1;         // ┒
  52   1              _nop_();
  53   1              E  = 0;     // ┛在下降沿数据被写入
  54   1      }
  55          
C51 COMPILER V7.06   KS0108                                                                11/12/2008 09:12:21 PAGE 2   

  56          void SetDispOnOff(UINT8 sel,UINT8 on)
  57          {
  58   1              if(on){         
  59   2                      SetDisplay(sel,0x3F);
  60   2              }
  61   1              else{
  62   2                      SetDisplay(sel,0x3E);
  63   2              }
  64   1      }
  65          
  66          
  67          void SetDispFirstRow(UINT8 sel, UINT8 row)
  68          {
  69   1              SetDisplay(sel, row|0xC0);
  70   1      }
  71          
  72          void SetDispCurPage(UINT8 sel, UINT8 page)
  73          {
  74   1              SetDisplay(sel, (page&0x07)|0xB8);
  75   1      }
  76          
  77          void SetDispCurCol(UINT8 sel, UINT8 col)
  78          {
  79   1              SetDisplay(sel, (col&0x3F)|0x40);
  80   1      }
  81          
  82          void WriteData(UINT8 sel,UINT8 wdata)
  83          {
  84   1              WaitForUse(sel);
  85   1              CS = sel;       // 片选
  86   1              DI = 1;         // ┒
  87   1              RW = 0;         // ┛读状态指令
  88   1              E  = 0;         
  89   1              DB = wdata;
  90   1              E  = 1;         // ┒
  91   1              _nop_();        // 
  92   1              E  = 0;     // ┛在下降沿数据被写入
  93   1              _nop_();
  94   1      }
  95          
  96          UINT8 ReadData(UINT8 sel)
  97          {
  98   1              UINT8 rdata;
  99   1              WaitForUse(sel);
 100   1              CS = sel;       // 片选  
 101   1              DI = 1;         // ┒
 102   1              RW = 1;         // ┛读状态指令
 103   1              DB = 0xFF; 
 104   1              E  = 1;         // 在E高电平期间,数据被读出
 105   1              _nop_();
 106   1              rdata = DB;
 107   1              E  = 0;         // 归位
 108   1               _nop_();
 109   1              return rdata;
 110   1      }
 111          void DrawAssistFun(UINT8 sel, UINT8 tcp, UINT8 ty1, UINT8 ty2, UINT8 dat, BOOL br, BOOL type) 
 112          {
 113   1              UINT8 rdata=0;
 114   1              SetDispCurPage(sel,tcp);
 115   1              if(!br)
 116   1                      SetDispCurCol(sel,ty1%64);
 117   1              while(ty1<=ty2)
C51 COMPILER V7.06   KS0108                                                                11/12/2008 09:12:21 PAGE 3   

 118   1              {
 119   2                      if(br) // 根据br来确定是否读已经存在的数据
 120   2                      {                // 这样可以节省读取时间(比较耗时)
 121   3                              SetDispCurCol(sel,ty1%64);
 122   3                              rdata=ReadData(sel);
 123   3                              rdata=ReadData(sel);
 124   3                              SetDispCurCol(sel,ty1%64);
 125   3                      }
 126   2                      if(type)
 127   2                              WriteData(sel,dat|rdata);
 128   2                      else
 129   2                              WriteData(sel,dat&rdata);       
 130   2                      ty1++;
 131   2              }
 132   1      }
 133          
 134          /* 画矩形:[(y1,r1),(y2,r2)], 其中y是列,r是行*/
 135          void DrawRect(UINT8 y1, UINT8 r1, UINT8 y2, UINT8 r2, BOOL type) // type为0表示清除
 136          {       
 137   1              UINT8 bp=r1/8; // 开始的page
 138   1              UINT8 ep=r2/8; // 结束的page
 139   1              UINT8 cp=bp+1; // 当前page
 140   1              UINT8 hd,ed,sel; 
 141   1      
 142   1              if( y1>y2 || r1>r2 || y2>127 || r2>63 )
 143   1                      return; 
 144   1      
 145   1              while(cp<ep)  // 先填充中间的page
 146   1              {       
 147   2                      hd = (0==type)? 0: 0xFF;
 148   2                      if( y2<64 || y1>63 )
 149   2                      {
 150   3                              sel=y2/64;  // y2>=y1
 151   3                              DrawAssistFun(sel,cp,y1,y2,hd,0,type);  
 152   3                      }
 153   2                      else
 154   2                      {       
 155   3                              DrawAssistFun(0,cp,y1,63,hd,0,type);
 156   3                              DrawAssistFun(1,cp,0,y2%64,hd,0,type);
 157   3                      }
 158   2                      cp+=1;
 159   2              }       
 160   1              
 161   1              // 中间填充完毕,开始处理两头
 162   1              if( bp==ep )
 163   1              {                       
 164   2                      hd= pow(2,r1%8)-1;
 165   2                      ed= 0xff-pow(2,r2%8+1)+1;
 166   2                      hd = 0xff & (~hd)& (~ed);               
 167   2                      sel=y1/64;
 168   2                      hd = (0==type)? (~hd): hd;
 169   2                      
 170   2                      if( y2<64 || y1>63 ){
 171   3                              DrawAssistFun(sel,bp,y1,y2,hd,1,type);
 172   3                      }
 173   2                      else{
 174   3                              DrawAssistFun(0,bp,y1,63,hd,1,type);
 175   3                              DrawAssistFun(1,bp,0,y2%64,hd,1,type);
 176   3                      }
 177   2              }
 178   1              else
 179   1              {
C51 COMPILER V7.06   KS0108                                                                11/12/2008 09:12:21 PAGE 4   

 180   2                      hd = (pow(2,r1%8)-1);  // 头,           
 181   2                      ed = pow(2,r2%8+1)-1;  // 尾
 182   2                      if(0==type){ 
 183   3                              ed = ~ed; // hd本应该取反,故不变
 184   3                      }
 185   2                      else{ // 填充
 186   3                              hd = ~hd;  // ed 不变
 187   3                      }
 188   2                      if( y2<64 || y1>63 )
 189   2                      {
 190   3                              sel=y2/64;  // y2>=y1
 191   3                              DrawAssistFun(sel,bp,y1,y2,hd,1,type);
 192   3                              DrawAssistFun(sel,ep,y1,y2,ed,1,type);
 193   3                      }
 194   2                      else
 195   2                      {
 196   3                              DrawAssistFun(0,bp,y1,63,hd,1,type);
 197   3                              DrawAssistFun(0,ep,y1,63,ed,1,type);
 198   3                              DrawAssistFun(1,bp,0,y2%64,hd,1,type);
 199   3                              DrawAssistFun(1,ep,0,y2%64,ed,1,type);
 200   3                      }
 201   2              }
 202   1      }
 203          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    845    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      14
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       3
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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