找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4850|回复: 11
打印 上一主题 下一主题
收起左侧

仿真错误 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)


评分

参与人数 2黑币 +10 收起 理由
darkie + 5 很给力!
关外秀才 + 5 很给力!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶2 踩
回复

使用道具 举报

沙发
ID:345750 发表于 2018-7-19 19:29 | 只看该作者
请问你实物成功了吗?
回复

使用道具 举报

板凳
ID:344694 发表于 2018-7-19 21:35 | 只看该作者
邹meng 发表于 2018-7-19 19:29
请问你实物成功了吗?

因为仿真出来后就准备学校的比赛了,实物并没有做,不过,我把这个程序改成图形解锁实物可以实现。你在实物制作中遇到了问题??等我参加完电赛以后再给你解决问题,可以不 ?
回复

使用道具 举报

地板
ID:370231 发表于 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
回复

使用道具 举报

5#
ID:344694 发表于 2018-7-21 15:30 | 只看该作者
a89588038 发表于 2018-7-20 09:00
程序都出错
compiling main.c...
MAIN.C(88): warning C280: 'i': unreferenced local variable

??我重新看了下,没有错误啊
回复

使用道具 举报

6#
ID:420473 发表于 2018-11-4 14:32 | 只看该作者
很不错的
回复

使用道具 举报

7#
ID:423219 发表于 2018-11-8 20:31 | 只看该作者
貌似很不错额,学习了,感谢分享
回复

使用道具 举报

8#
ID:428888 发表于 2018-11-18 21:24 | 只看该作者
学习了,感谢分享,感谢感谢
回复

使用道具 举报

9#
ID:441372 发表于 2018-12-7 07:33 | 只看该作者
给力!
回复

使用道具 举报

10#
ID:555938 发表于 2019-6-25 11:20 | 只看该作者
仿真怪怪的
回复

使用道具 举报

11#
ID:529757 发表于 2019-7-8 20:09 | 只看该作者
看不到蛇在跑,难道我眼花了
回复

使用道具 举报

12#
ID:992343 发表于 2021-12-17 13:55 | 只看该作者
WQL_X 发表于 2019-7-8 20:09
看不到蛇在跑,难道我眼花了

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

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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