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

📄 main.lst

📁 自己做的单片机Proteus仿真实例
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V8.02   MAIN                                                                  05/24/2012 19:52:39 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: F:\新建文件夹\新建文件夹 (2)\C51\BIN\C51.EXE main.c OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //版本:V1.0
   2          //作品:贪吃蛇+万年历+俄罗斯方块
   3          //作者所属院校:南阳理工学院
   4          //作者QQ: 497259320
   5          //申明:转载请标明作品来源 知识产权归作者本人所有!
   6          //工作之余,写下此程序,程序、设计中有很多不足之处,风格、命名也很乱,这是下一个版本要改进的
   7          //在V1.1版本中还会增加矩阵键盘和科学计算器等功能,此程序已成功移植于AVR单片机。硬件上实现要修改底层驱动!
   8          #include <at89x51.h>
   9          #include "18b20.h"
  10          #include "1302.h"
  11          #include "12864.h"
  12          #include "zifu.h"
  13          uchar k,direction;
  14          bit flag;
  15          bit flag5=0;                       //flag5是外部中断1的标志位 flag1是步进标志
  16          uchar p,dengji;               //定时次数 
  17          bit flag1=0;
  18          systemtime realtime;
  19          bit first=1;                               //中断次数控制
  20          void dingshi() interrupt 1  using 1  //定时程序.产生步进时间
  21          {
  22   1         if(p--)
  23   1         {
  24   2          TL0=0;
  25   2              TH0=0xa0;
  26   2              flag1=0;
  27   2         }
  28   1         else
  29   1         {
  30   2           flag1=1;
  31   2               TL0=0;
  32   2               TH0=0x00;
  33   2               p=20-(dengji>>1);
  34   2         }
  35   1       }
  36          /*开始确认暂停键的判断*/
  37          void zhongduan1() interrupt 2 using 2
  38          {
  39   1         if(!flag5)
  40   1         {
  41   2           flag5=1;
  42   2         }
  43   1         else
  44   1         {
  45   2           flag5=0;
  46   2         }
  47   1      }
  48          void zhongduan() interrupt 0 using 0 
  49            {
  50   1          uchar i=0;
  51   1              if(first)              //FIRST=1;打开方向按键判断标志
  52   1              {
  53   2              first=0;            
  54   2              k=(P2>>6);         
  55   2              k=k&0x03;                               
C51 COMPILER V8.02   MAIN                                                                  05/24/2012 19:52:39 PAGE 2   

  56   2              if(flag)
  57   2                {
  58   3                  if(k==1)     direction=3;//左
  59   3                  if(k==2)     direction=1;//右
  60   3                }
  61   2                else
  62   2                {
  63   3                  if(k==0)     direction=4;//上
  64   3                  if(k==3)     direction=2;//下
  65   3                }
  66   2              }
  67   1        }
  68           /*显示四个小格的方块*/
  69          void playbuf(uchar buff,char offsetx,char offsety)        
  70          {
  71   1        //i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
  72   1        change1((((*(moxing+((buff&0xf0)+((buff&0x0f)<<2))))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((buff&0
             -x0f)<<2)))))&0x0f)+offsety);
  73   1        change1((((*((moxing+((buff&0xf0)+((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx,((*(((moxing+((buff&0xf0)|((b
             -uff&0x0f)<<2))))+1))&0x0f)+offsety);
  74   1        change1((((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+2))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((
             -buff&0x0f)<<2)))+2))&0x0f)+offsety);
  75   1        change1((((*(((moxing+((buff&0xf0)|((buff&0x0f)<<2))))+3))&0xf0)>>4)+offsetx,((*((moxing+((buff&0xf0)|((
             -buff&0x0f)<<2)))+3))&0x0f)+offsety);
  76   1      
  77   1      }
  78          /*判断方块停止向下运动*/
  79          bit tingzhixia(uchar buff,char offsetx,char offsety)
  80          {
  81   1         char x0,y0,x1,y1,x2,y2,x3,y3;
  82   1         bit tz=0;
  83   1         x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
  84   1         x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
  85   1         x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
  86   1         x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
  87   1         y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
  88   1         y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
  89   1         y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
  90   1         y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
  91   1         
  92   1         if(readfk(x0+1,y0))
  93   1         {
  94   2            if(!((((x0+1)==x1)&&(y0==y1))|(((x0+1)==x2)&&(y0==y2))|(((x0+1)==x3)&&(y0==y3))))
  95   2               { 
  96   3                tz=1;
  97   3                }
  98   2         }
  99   1          if(readfk(x1+1,y1))
 100   1         {
 101   2            if(!((((x1+1)==x0)&&(y1==y0))|(((x1+1)==x2)&&(y1==y2))|(((x1+1)==x3)&&(y1==y3))))
 102   2               { 
 103   3                tz=1;
 104   3               }
 105   2         }
 106   1         if(readfk(x2+1,y2))
 107   1         {
 108   2            if(!((((x2+1)==x0)&&(y2==y0))|(((x2+1)==x1)&&(y2==y1))|(((x2+1)==x3)&&(y2==y3))))
 109   2                {
 110   3                 tz=1;
 111   3                }
 112   2         }
 113   1         if(readfk(x3+1,y3))
C51 COMPILER V8.02   MAIN                                                                  05/24/2012 19:52:39 PAGE 3   

 114   1         {
 115   2            if(!((((x3+1)==x0)&&(y3==y0))|(((x3+1)==x1)&&(y3==y1))|(((x3+1)==x2)&&(y3==y2))))
 116   2                {
 117   3                 tz=1;
 118   3                }
 119   2         }
 120   1         return(tz);
 121   1      }
 122          /*判断一行是否可以消除*/
 123          bit hangman(uchar x)
 124          {
 125   1       uchar i;
 126   1       bit   man=1;
 127   1       for(i=0;i<15;i++)
 128   1       {
 129   2              man=man&(readfk(x,i));
 130   2              if(!man)
 131   2              break;
 132   2       }
 133   1       return(man);
 134   1      }
 135          /*消除一行*/
 136          void xiaohang(uchar x)
 137          {
 138   1        uchar i,j;
 139   1        for(i=0;i<15;i++)
 140   1        {
 141   2          clear1(x,i);
 142   2        }
 143   1        for(i=1;i<=x;i++)
 144   1        {
 145   2         for(j=0;j<15;j++)
 146   2         {
 147   3           if(readfk(x-i,j))
 148   3               {
 149   4                change1(x-i+1,j);
 150   4                clear1(x-i,j);
 151   4               }
 152   3         }
 153   2        }
 154   1      }
 155          /*判断是否停止向右*/
 156          bit tingzhiyou(uchar buff,char offsetx,char offsety)
 157          {
 158   1         char x0,y0,x1,y1,x2,y2,x3,y3;
 159   1         bit tz=0;
 160   1         x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
 161   1         x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
 162   1         x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
 163   1         x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
 164   1         y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
 165   1         y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
 166   1         y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
 167   1         y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
 168   1         if(readfk(x0,y0-1))
 169   1         {
 170   2            if(!(((x0==x1)&&((y0-1)==y1))|((x0==x2)&&((y0-1)==y2))|((x0==x3)&&((y0-1)==y3))))
 171   2               { 
 172   3                 tz=1;
 173   3                }
 174   2         }
 175   1         if(readfk(x1,y1-1))
C51 COMPILER V8.02   MAIN                                                                  05/24/2012 19:52:39 PAGE 4   

 176   1           {
 177   2            if(!(((x1==x0)&&((y1-1)==y0))|((x1==x2)&&((y1-1)==y2))|((x1==x3)&&((y1-1)==y3))))
 178   2               { 
 179   3                tz=1;    
 180   3               }
 181   2       }
 182   1          if(readfk(x2,y2-1))
 183   1         {
 184   2            if(!(((x2==x0)&&((y2-1)==y0))|((x2==x1)&&((y2-1)==y1))|((x2==x3)&&((y2-1)==y3))))
 185   2                {
 186   3                 tz=1;
 187   3                }
 188   2         }
 189   1            if(readfk(x3,y3-1))
 190   1         {
 191   2            if(!(((x3==x0)&&((y3-1)==y0))|((x3==x1)&&((y3-1)==y1))|((x3==x2)&&((y3-1)==y2))))
 192   2                {
 193   3                 tz=1;
 194   3                }
 195   2         }
 196   1         return(tz);
 197   1      }
 198          /*判断是否停止向左*/
 199          bit tingzhizuo(uchar buff,char offsetx,char offsety)
 200          {
 201   1         char x0,y0,x1,y1,x2,y2,x3,y3;
 202   1         bit tz=0;
 203   1         x0=(((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0xf0)>>4)+offsetx;
 204   1         x1=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2))+1)))&0xf0)>>4)+offsetx;
 205   1         x2=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0xf0)>>4)+offsetx;
 206   1         x3=(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0xf0)>>4)+offsetx;
 207   1         y2=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety;
 208   1         y3=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+3))&0x0f)+offsety;
 209   1         y0=((*(moxing+((buff&0xf0)|((buff&0x0f)<<2))))&0x0f)+offsety;
 210   1         y1=((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+1))&0x0f)+offsety;
 211   1         if(readfk(x0,y0+1))
 212   1         {
 213   2            if(!(((x0==x1)&&((y0+1)==y1))|((x0==x2)&&((y0+1)==y2))|((x0==x3)&&((y0+1)==y3))))
 214   2               { 
 215   3                 tz=1;
 216   3                }
 217   2         }
 218   1         if(readfk(x1,y1+1))
 219   1           {
 220   2            if(!(((x1==x0)&&((y1+1)==y0))|((x1==x2)&&((y1+1)==y2))|((x1==x3)&&((y1+1)==y3))))
 221   2               { 
 222   3                tz=1;    
 223   3               }
 224   2       }
 225   1          if(readfk(x2,y2+1))
 226   1         {
 227   2            if(!(((x2==x0)&&((y2+1)==y0))|((x2==x1)&&((y2+1)==y1))|((x2==x3)&&((y2+1)==y3))))
 228   2                {
 229   3                 tz=1;
 230   3                }
 231   2         }
 232   1            if(readfk(x3,y3+1))
 233   1         {
 234   2            if(!(((x3==x0)&&((y3+1)==y0))|((x3==x1)&&((y3+1)==y1))|((x3==x2)&&((y3+1)==y2))))
 235   2                {
 236   3                 tz=1;
 237   3                }
C51 COMPILER V8.02   MAIN                                                                  05/24/2012 19:52:39 PAGE 5   

 238   2         }
 239   1         return(tz); 
 240   1      }
 241          /*清除一个方块*/
 242          void clearbuf(uchar dat,char setx,char sety)
 243          {
 244   1        uchar *i;
 245   1        i=(moxing+((dat&0xf0)|((dat&0x0f)<<2)));
 246   1        clear1(((((*i)&0xf0)>>4)+setx),(((*i)&0x0f)+sety));
 247   1        clear1(((((*(i+1))&0xf0)>>4)+setx),(((*(i+1))&0x0f)+sety));
 248   1        clear1(((((*(i+2))&0xf0)>>4)+setx),(((*(i+2))&0x0f)+sety));
 249   1        clear1(((((*(i+3))&0xf0)>>4)+setx),(((*(i+3))&0x0f)+sety));  
 250   1      }
 251          /*俄罗斯方块子程序*/
 252          void fangkuai(void)
 253          {
 254   1        uchar fenshu=0;
 255   1        char offsety,offsetx;
 256   1        char offsety_buff,offsetx_buff;
 257   1        uchar buff=0x10;               
 258   1        bit ting=0;                                                           
 259   1        uchar i;
 260   1        //flag5=1;
 261   1        TMOD=1;         //定时器工作方式
 262   1        IT0=1;          //边延有效
 263   1        IT1=1;
 264   1        EA=1;           //开CPU中断
 265   1        ET0=1;          //开定时器中断
 266   1        EX0=1;          //开外部中断
 267   1        EX1=1;
 268   1        TL0=0x00;
 269   1        TH0=0x00;       //定时器初值
 270   1        TR0=1;          //启动定时器
 271   1        k=5;
 272   1        choose12864(2);
 273   1        clear12864();
 274   1        play16(0,0,0,els);
 275   1        play16(0,0,1,els+32);
 276   1        play16(0,0,2,els+64);
 277   1        play16(0,2,0,els+96);
 278   1        play16(0,2,1,els+128);
 279   1        play8(0,0,3,shu0);
 280   1        play8(0,1,3,shu0);
 281   1        vertical(1,60,30);
 282   1        vertical(1,60,127);
 283   1        for(i=0;i<98;i++)
 284   1        {
 285   2          dot(30+i,1);
 286   2              dot(30+i,62);
 287   2        }
 288   1        offsety=7;
 289   1        offsetx=-3;
 290   1        for(;;)
 291   1       {
 292   2         if(P3&0x04)
 293   2         first=1;
 294   2         if((k==0x02)&&((P3&0x04)==0x04))
 295   2         {
 296   3           offsety_buff=offsety;
 297   3               ting=tingzhiyou(buff,offsetx,offsety);
 298   3              if(!ting)
 299   3               {
C51 COMPILER V8.02   MAIN                                                                  05/24/2012 19:52:39 PAGE 6   

 300   4                if(((*((moxing+((buff&0xf0)|((buff&0x0f)<<2)))+2))&0x0f)+offsety)
 301   4            offsety--;
 302   4                clearbuf(buff,offsetx_buff,offsety_buff);
 303   4                playbuf(buff,offsetx,offsety);

⌨️ 快捷键说明

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