找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1152|回复: 1
收起左侧

大神们,可以看下我单片机贪吃蛇代码,为什么我的蛇不能运行啊

[复制链接]
ID:844692 发表于 2020-11-25 15:37 | 显示全部楼层 |阅读模式
20黑币
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #include<stdlib.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define SHAKE 20//蛇的最大长度
  7. sbit SHANG=P3^4;
  8. sbit XIA=P3^5;
  9. sbit ZUO=P3^6;
  10. sbit YOU=P3^7;
  11. sbit dula=P2^6;
  12. sbit wela=P2^7;
  13. uchar code ly[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};  //P0控制y亮
  14. uchar code lx[]={0xfe,0xfd,0xfb,0xf7,0x7f,0xbf,0xdf,0xef};//P2控制x亮
  15. uchar xx[20]={0};//用来存蛇的x坐标
  16. uchar yy[20]={0};//用来存蛇的y坐标
  17. uchar length;//蛇的长度
  18. uchar direction;//蛇的方向
  19. uchar foodx,foody;

  20. void delay(uchar z)//延迟函数
  21. {
  22.         uchar x,y;
  23.         for(x=z;x>0;x--)
  24.         {
  25.                 for(y=110;y>0;y--)
  26.                 {};
  27.         }
  28. }




  29. void close()//关掉数码管
  30. {
  31.         dula=1;
  32.         P0=0x00;
  33.         dula=0;
  34. }
  35. void init()//蛇的初始化
  36. {
  37.         length=1;
  38.         xx[0]=0;
  39.         yy[0]=0;
  40.         direction=2;
  41. }

  42. void move()//蛇的移动
  43. {
  44.         uchar L=length-1;
  45.         for(L;L>0;L--)
  46.         {
  47.                 xx[L]=xx[L-1];
  48.                 yy[L]=yy[L-1];
  49.         }
  50.         switch(direction)//根据运动方向控制坐标
  51.         {
  52.                         case 1:
  53.                                 yy[0]++;
  54.                                 break;
  55.                         case 2:
  56.                                 yy[0]--;
  57.                                 break;
  58.                         case 3:
  59.                                 xx[0]--;
  60.                                 break;
  61.                         case 4:
  62.                                 xx[0]++;
  63.                                 break;
  64.                         default:
  65.                                 break;
  66.         }
  67. }

  68. void keyword()//通过按键控制运动方向
  69. {
  70.         if(SHANG==0)//上
  71.         {
  72.                 delay(1000);
  73.                 if(SHANG==0)
  74.                 {
  75.                 if(direction==3|direction==4)
  76.                         direction=1;
  77.                 }
  78.                 while(!SHANG);
  79.         }
  80.        
  81.         if(XIA==0)//下
  82.         {
  83.                 delay(1000);
  84.                 if(XIA==0)
  85.                 {
  86.                 if(direction==3|direction==4)
  87.                         direction=2;
  88.                 }
  89.                 while(!XIA);
  90.         }
  91.        
  92.         if(ZUO==0)//左
  93.         {
  94.                 delay(1000);
  95.                 if(ZUO==0)
  96.                 {
  97.                 if(direction==1|direction==2)
  98.                         direction=3;
  99.                 }
  100.                 while(!ZUO);
  101.         }
  102.        
  103.         if(YOU==0)//右
  104.         {
  105.                 delay(1000);
  106.                 if(YOU==0)
  107.                 {
  108.                 if(direction==1|direction==2)
  109.                         direction=4;
  110.                 }
  111.                 while(!YOU);
  112.         }
  113. }

  114. void food()//创造食物
  115. {
  116.                 uchar i;
  117.         foodx=rand()%7;
  118.         foody=rand()%7;
  119.         for(i=0;i<length;i++)
  120.         {
  121.                 if((xx[i]==foodx)&&(yy[i]==foody))
  122.                 {
  123.                         food();
  124.                 }
  125.         }
  126. }

  127. void grow()//蛇的增长函数
  128. {
  129.         if((xx[0]==foodx)&&(yy[0]==foody))
  130.         {
  131.                 food();
  132.                 xx[length]=xx[length-1];
  133.                 yy[length]=yy[length-1];
  134.                 length++;
  135.         }
  136. }
  137. void light()//点亮蛇和食物
  138. {
  139.         uchar i;
  140.         for(i=0;i<length;i++)
  141.         {
  142.                 P2=lx[xx[i]];
  143.                 P0=ly[yy[i]];
  144.                
  145.                 delay(10);
  146.                
  147.                 P2=lx[foodx];
  148.                 P0=ly[foody];
  149.        
  150.                 delay(10);
  151.         }
  152. }

  153. void pick()//判断蛇是否撞墙和撞到自己
  154. {
  155.         uchar i;
  156.         if(xx[0]>7||yy[0]>7)
  157.         {
  158.                
  159.                 while(1);
  160.         }
  161.        
  162.         for(i=4;i<length;i++)
  163.         {
  164.                 if(xx[0]==xx[i]&&yy[0]==yy[i])
  165.                 {
  166.                
  167.                         while(1);
  168.                
  169.                 };
  170.         }
  171. }


  172. void main()
  173. {
  174.         init();
  175.         move();
  176.         while(1)
  177.         {
  178.                 close();
  179.                 light();
  180.                 food();
  181.                 pick();
  182.                 grow();
  183.                 keyword();
  184.                
  185.                
  186.         }
  187. }
复制代码

回复

使用道具 举报

ID:328014 发表于 2020-11-25 15:50 | 显示全部楼层
你这个程序没有错误,可能是你硬件的问题吧,由于没有电路图也不好分析
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表