标题: 仿真错误 8*8点阵贪吃蛇的单片机源程序和仿真,开源供大家分享 [打印本页]

作者: 薄荷凉520    时间: 2018-6-4 15:29
标题: 仿真错误 8*8点阵贪吃蛇的单片机源程序和仿真,开源供大家分享
贪吃蛇程序,带仿真图哦
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)


单片机源程序如下:
  1. #include<reg52.h>
  2. #include<stdlib.h>
  3. typedef unsigned char u8;
  4. typedef unsigned int u16;
  5. #include <math.h>




  6. /***************初始化*************/
  7. sbit up=P3^2;
  8. sbit right=P3^1;
  9. sbit left=P3^3;
  10. sbit down=P3^4;



  11. u8 addx,addy;
  12. u8 head_x[40],head_y[40];
  13. u8 poit_x,poit_y;
  14. u8 leng,z=0,col=1;
  15. u8 y_list[8];




  16. /****************延时函数**********/
  17. void delay1s(void)   //误差 0us
  18. {
  19.     unsigned char a,b,c;
  20.     for(c=167;c>0;c--)
  21.         for(b=171;b>0;b--)
  22.             for(a=16;a>0;a--);
  23. }
  24. void delay1ms(u16 num)
  25. {
  26.         u16 x,y;
  27.         for(x=num; x>0; x--)
  28.                 for(y=110; y>0; y--)
  29.                 {
  30.                         ;//延时1ms
  31.                 }
  32. }


  33. /****************控制函数***********/
  34. void judge_swit()
  35. {
  36.   if(up==0)
  37.    {
  38.      addx=0;
  39.      if(addy!=-1)
  40.         addy=1;
  41.      else
  42.         addy=-1;
  43.    }
  44.   if(down==0)
  45.    {
  46.      addx=0;
  47.      if(addy!=1)
  48.         addy=-1;
  49.      else
  50.         addy=1;
  51.    }
  52.   if(right==0)
  53.    {
  54.      addy=0;
  55.      if(addx!=-1)
  56.         addx=1;
  57.      else
  58.         addx=-1;
  59.    }
  60.   if(left==0)
  61.    {
  62.      addy=0;
  63.      if(addx!=1)
  64.         addx=-1;
  65.      else
  66.         addx=1;
  67.    }

  68. }


  69. /***************是否相撞****************/
  70. void judg_out()
  71. {  
  72.   u8 i;
  73.   if(head_x[leng-1]>=8)
  74.    {
  75.          P1=0xff;
  76.         
  77.    }
  78. }

  79. /****************显示函数**************/
  80. void display()
  81. {
  82.   u8 i,j;
  83.   u8 x=0;
  84.   u8 y=0;
  85.   u8 w=0x01;
  86.   for(j=0;j<8;j++)
  87.     y_list[j]=0x00;
  88.   for(i=leng-1;i>=1;i--)
  89.     {

  90.      x=head_x[i];
  91.      y=head_y[i];
  92.      switch(x)
  93.           {
  94.        case 0: y_list[0]=w<<y|y_list[0];
  95.                w=0x01;
  96.                break;
  97.        case 1: y_list[1]=w<<y|y_list[1];
  98.                w=0x01;
  99.                break;
  100.        case 2: y_list[2]=w<<y|y_list[2];
  101.                w=0x01;
  102.                break;
  103.        case 3: y_list[3]=w<<y|y_list[3];
  104.                w=0x01;
  105.                break;
  106.        case 4: y_list[4]=w<<y|y_list[4];
  107.                w=0x01;
  108.                break;
  109.        case 5: y_list[5]=w<<y|y_list[5];
  110.                w=0x01;
  111.                break;
  112.        case 6: y_list[6]=w<<y|y_list[6];
  113.                w=0x01;
  114.                break;
  115.        case 7: y_list[7]=w<<y|y_list[7];
  116.                w=0x01;
  117.                break;
  118. }

  119. }

  120. }
  121. /****************主函数****************/
  122. void main()
  123. {
  124.   u8 i,x,y;
  125. /***********中断初始化*********/
  126.   TMOD = 0x01;
  127.   TL0 = 0x3C;
  128.   TH0 = 0xF6;
  129.   EA = 1;
  130.   ET0 = 1;
  131.   TR0 = 1;


  132.   head_x[1]=0;
  133.   head_y[1]=0;
  134.   head_x[2]=0;
  135.   head_y[2]=0;
  136.   leng=3;
  137.   poit_x=4;
  138.   poit_y=4;
  139. while(1)
  140. {   
  141.     x = rand()%7+1;
  142.     y = rand()%7+1;

  143.     if(!up||!right||!left||!down)
  144.      judge_swit();         
  145.     if(poit_x==head_x[1]+addx&&poit_y==head_y[1]+addy)
  146.       {
  147.         leng++;
  148.          poit_x=x;
  149.          poit_y=y;  
  150.       }
  151.      else if(poit_x==head_x[1]-addx&&poit_y==head_y[1]-addy)
  152.       {
  153.         leng++;
  154.         poit_x=x;
  155.         poit_y=y;
  156.       }
  157.     // judg_out();
  158.     head_x[1]=head_x[1]+addx;
  159.     head_y[1]=head_y[1]+addy;
  160.    
  161.     for(i=leng-1;i>1;i--)
  162.       {
  163.         head_x[i]=head_x[i-1];
  164.         head_y[i]=head_y[i-1];
  165.       }
  166.     display();
  167.     delay1s();

  168. }
  169. ……………………

  170. …………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码

所有资料51hei提供下载:
First_Game.zip (55.31 KB, 下载次数: 116)



作者: 邹meng    时间: 2018-7-19 19:29
请问你实物成功了吗?

作者: 薄荷凉520    时间: 2018-7-19 21:35
邹meng 发表于 2018-7-19 19:29
请问你实物成功了吗?

因为仿真出来后就准备学校的比赛了,实物并没有做,不过,我把这个程序改成图形解锁实物可以实现。你在实物制作中遇到了问题??等我参加完电赛以后再给你解决问题,可以不 ?
作者: a89588038    时间: 2018-7-20 09:00
程序都出错
compiling main.c...
MAIN.C(88): warning C280: 'i': unreferenced local variable
MAIN.C(192): error C100: unprintable character 0xA1 skipped
MAIN.C(192): error C100: unprintable character 0xAD skipped
MAIN.C(192): error C141: syntax error near ''
Target not created
作者: 薄荷凉520    时间: 2018-7-21 15:30
a89588038 发表于 2018-7-20 09:00
程序都出错
compiling main.c...
MAIN.C(88): warning C280: 'i': unreferenced local variable

??我重新看了下,没有错误啊
作者: lzf1451718878    时间: 2018-11-4 14:32
很不错的

作者: lovesky78    时间: 2018-11-8 20:31
貌似很不错额,学习了,感谢分享
作者: jiang7    时间: 2018-11-18 21:24
学习了,感谢分享,感谢感谢
作者: therawr    时间: 2018-12-7 07:33
给力!
作者: 花Q花Q    时间: 2019-6-25 11:20
仿真怪怪的
作者: WQL_X    时间: 2019-7-8 20:09
看不到蛇在跑,难道我眼花了
作者: 最好看的小胖子    时间: 2021-12-17 13:55
WQL_X 发表于 2019-7-8 20:09
看不到蛇在跑,难道我眼花了

我也是,右上角看见一个大方块




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1