久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2756|回復: 2
打印 上一主題 下一主題
收起左側

51單片機8*8點陣貪吃蛇程序

[復制鏈接]
跳轉到指定樓層
樓主


單片機源程序如下:
  1. #include<reg51.h>
  2. #include<intrins.h>
  3. #include<stdlib.h>
  4. typedef unsigned int u16;
  5. typedef unsigned char u8;
  6. sbit SER=P2^4;
  7. sbit up=P2^2;          //上
  8. sbit down=P2^1;          //下
  9. sbit lt=P2^3;          //左
  10. sbit rt=P2^0;          //右
  11. u8 code Hc595_Coordx[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  12. u8 code Hc595_Coordy[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
  13. u8  foodx;
  14. u8   foody;
  15. u8   snake_x[20]={0};
  16. u8   snake_y[20]={0};
  17. u8 length;
  18. u8 direction;
  19. void initSnake();
  20. void delay(u16 i);
  21. void Hc595SendByte(u8 dat);
  22. void move();
  23. void Keypros();
  24. void creatFood();
  25. void snake_Grow(void);
  26. void drawsnake();

  27. void initSnake()
  28. {
  29.    snake_x[0]=0;
  30. snake_y[0]=0;
  31. length=1;
  32. direction=2;
  33. }
  34. void delay(u16 i)
  35. {
  36.   while(i--);
  37. }

  38. void move()
  39. {

  40.     u8 len = length- 1;
  41.     for(len; len > 0; len--)
  42.     {
  43.         snake_x[len] = snake_x[len - 1];
  44.         snake_y[len] = snake_y[len - 1]; //一直到蛇頭
  45.     }
  46.     switch(direction)
  47.     {
  48.     case 1:
  49.         snake_y[0]--;
  50.         break;
  51.     case 2:
  52.         snake_y[0]++;       //再利用蛇頭轉變方向
  53.         break;
  54.     case 3:
  55.         snake_x[0]--;
  56.         break;
  57.     case 4:
  58.         snake_x[0]++;
  59.         break;
  60.     default:
  61.         break;
  62.     }
  63. }

  64. //貪吃蛇的上下左右行動控制
  65. void Keypros()
  66. {
  67. if(up==0)
  68. {
  69.   delay(1000);  //消抖處理
  70.   if(up==0)
  71.   {
  72.     if(direction==3|direction==4)
  73.     direction=1;             //在地址1內寫入數據num
  74.   }
  75.   while(!up);
  76. }
  77. if(down==0)
  78. {
  79.   delay(1000);  //消抖處理
  80.   if(down==0)
  81.   { if(direction==3|direction==4)
  82.    direction=2;   
  83.   }
  84.   while(!down);
  85. }
  86. if(lt==0)
  87. {
  88.   delay(100);  //消抖處理
  89.   if(lt==0)
  90.   {
  91.       if(direction==1|direction==2)
  92.    direction=3;
  93.   }
  94.   while(!lt);
  95. }
  96. if(rt==0)
  97. {
  98.   delay(1000);  //消抖處理
  99.   if(rt==0)
  100.   {
  101.      if(direction==1|direction==2)
  102.      direction=4;
  103.   }
  104.   while(!rt);
  105. }  
  106. }
  107. void creatFood()  //隨機創造食物
  108. {
  109.     u8 i;
  110.     foodx=rand()%8;
  111.     foody=rand()%8;
  112.     for(i=0; i<length; i++)
  113.     {
  114.         if((foodx==snake_x[i])&&(foody==snake_y[i])) //如果食物與蛇的身體重疊,要重新創建
  115.                 {
  116.                     creatFood();
  117.                 }      
  118.     }
  119. }
  120. void snake_Grow(void)
  121. {
  122.     if(snake_x[0] == foodx && snake_y[0] == foody)
  123.     {
  124.         creatFood();
  125.         snake_x[length] = snake_x[length - 1];
  126.         snake_y[length] = snake_y[length - 1];
  127.         length++;
  128.     }
  129. }

  130. void drawsnake()   //點亮蛇和食物
  131. {
  132.      u8 i;
  133.      for(i=0;i<length;i++)
  134. {
  135.     P1=Hc595_Coordy[snake_y[i]];
  136.     P0=Hc595_Coordx[snake_x[i]];
  137.         delay(20);
  138.   P0=0xff;
  139.      P1=Hc595_Coordy[foody];   
  140.      P0=Hc595_Coordx[foodx];
  141.         delay(20);
  142.      P0=0xff;  
  143. }
  144. }
  145. void JudgeDeath(void)
  146. {
  147.     u8 i;
  148.     // 判斷蛇撞墻死亡
  149.     if((snake_x[0]>7)||(snake_y[0]>7))
  150.     {
  151.          Hc595SendByte(0x00);
  152.         while(1);
  153.     }
  154.     // 判斷蛇撞到自己身體死亡
  155.     for(i=4; i<length; i++)
  156.     {
  157.         if((snake_x[0]==snake_x[i])&&(snake_y[0]==snake_y[i]))
  158.         {
  159.             P0=0xFF;
  160.             while(1);
  161.         }
  162.     }
  163. }

  164. void Timer0Init()
  165. {
  166. TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
  167. TH0=0XD8; //給定時器賦初值,定時10ms
  168. TL0=0XF0;
  169. ET0=1;//打開定時器0中斷允許
  170. EA=1;//打開總中斷
  171. TR0=1;//打開定時器   
  172. }
  173. void main()
  174. {   

  175. Timer0Init();
  176. initSnake();
  177. while(1)
  178. {
  179.   drawsnake();
  180.   JudgeDeath();
  181.   snake_Grow();
  182.   Keypros();
  183. }
  184. }
  185. void Timer0() interrupt 1
  186. {
  187. static u16 i;
  188. TH0=0XD8; //給定時器賦初值,定時10ms
  189. TL0=0XF0;
  190. i++;
  191. if(i==50)
  192. {
  193.   i=0;
  194.      move();

  195. }
  196. }
復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:328014 發表于 2020-11-1 16:33 | 只看該作者
有使用573等接口芯片嗎?要是能介紹下原理圖就好了
回復

使用道具 舉報

板凳
ID:382699 發表于 2020-11-1 16:53 來自手機 | 只看該作者
51hei團團 發表于 2020-11-1 16:33
有使用573等接口芯片嗎?要是能介紹下原理圖就好了

什么芯片都不用,直接P0和P1口控制點陣
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久久久久久免费看 | 国产精品久久久久久久久久免费看 | 欧美h视频| 日韩精品1区2区3区 国产精品国产成人国产三级 | 久久久久亚洲av毛片大全 | 激情一区二区三区 | 亚洲一区二区三区在线 | 欧美一区二区免费 | 久久精品视频在线免费观看 | 国产成人在线一区 | 怡红院成人在线视频 | 日韩福利 | 草草网| 色天堂影院 | 欧美精品一区二区三区四区五区 | 国产高清精品一区二区三区 | 国产成人免费视频 | 久久久精品 | 超碰天天| 超碰免费在 | 91精品国产一区二区三区 | 色综合网站 | 日韩成人精品在线观看 | 日韩在线视频一区 | 国产自产c区 | 一级毛片免费视频 | 欧美理论| 欧美一级黄色片在线观看 | 99热电影| 国产精品 欧美精品 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 国产免费一区二区 | 精品一二区 | japanhdxxxx裸体 | 久久久久久久综合色一本 | 九色在线观看 | 欧美淫| 97影院2| 国产一区久久精品 | 中文字幕日韩欧美一区二区三区 | 91精品久久久久久久久久 |