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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1894|回復(fù): 0
收起左側(cè)

51單片機貪吃蛇點陣

[復(fù)制鏈接]
ID:313060 發(fā)表于 2018-12-25 13:07 | 顯示全部樓層 |閱讀模式
51貪吃蛇點陣

單片機源程序如下:
  1. #include "reg51.h"                         //此文件中定義了單片機的一些特殊功能寄存器
  2. #include<intrins.h>
  3. #include<math.h>
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. //72,80,75,77是方向鍵對應(yīng)的鍵值
  7. #define UP 5
  8. #define DOWN 6
  9. #define LEFT 7
  10. #define RIGHT 8
  11. #define SANKE 1        //蛇的坐標(biāo)標(biāo)識
  12. #define FOOD 1
  13. #define BAR 0

  14. sbit SRCLK=P3^6;
  15. sbit RCLK=P3^5;
  16. sbit SER=P3^4;
  17. //按鍵
  18. sbit Left = P3^1;
  19. sbit Right = P3^0;
  20. sbit Up = P3^2;
  21. sbit Down = P3^3;
  22. unsigned int NLL=1;
  23. //u8 ledduan[]={0x00,0x00,0x3e,0x41,0x41,0x41,0x3e,0x00};
  24. unsigned char ledwei[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  25. //初始化地圖17*17
  26. unsigned char map[8][8] ={0};
  27. //初始化蛇頭坐標(biāo)
  28. unsigned char snack[20] = {27};
  29. //初始化食物坐標(biāo)
  30. unsigned char food = 17;
  31. //蛇長
  32. char len = 1;
  33. // 存儲坐標(biāo)數(shù)字與x,y的轉(zhuǎn)化函數(shù)
  34. void tran(unsigned char num,unsigned char *x,unsigned char *y);
  35. //打印游戲
  36. void print_game(void);
  37. // 獲取方向函數(shù)(注意當(dāng)蛇身超過一節(jié)時不能回頭)
  38. int get_dir(int old_dir);
  39. //移動蛇身函數(shù)
  40. void move_snack(int dir);
  41. //生產(chǎn)食物的函數(shù)
  42. unsigned char generate_food(void);
  43. //判斷蛇死活的函數(shù)
  44. int isalive(void);
  45. //移動蛇身函數(shù)
  46. /*******************************************************************************
  47. * 函 數(shù) 名         : delay
  48. * 函數(shù)功能                   : 延時函數(shù),i=1時,大約延時10us
  49. *******************************************************************************/
  50. void delay(unsigned int i)
  51. {
  52.         while(i--);        
  53. }

  54. /*******************************************************************************
  55. * 函數(shù)名         : Hc595SendByte(u8 dat)
  56. * 函數(shù)功能                   : 向74HC595發(fā)送一個字節(jié)的數(shù)據(jù)
  57. * 輸入           : 無
  58. * 輸出                  : 無
  59. *******************************************************************************/
  60. void Hc595SendByte(unsigned char dat)
  61. {
  62.         unsigned char a;
  63.         SRCLK=0;
  64.         RCLK=0;
  65.         for(a=0;a<8;a++)
  66.         {
  67.                 SER=dat>>7;
  68.                 dat<<=1;

  69.                 SRCLK=1;
  70.                 _nop_();
  71.                 _nop_();
  72.                 SRCLK=0;        
  73.         }

  74.         RCLK=1;
  75.         _nop_();
  76.         _nop_();
  77.         RCLK=0;
  78. }

  79. /*******************************************************************************
  80. * 函 數(shù) 名       : main
  81. * 函數(shù)功能                 : 主函數(shù)
  82. * 輸    入       : 無
  83. * 輸    出             : 無
  84. *******************************************************************************/
  85. void main()
  86. {
  87.         int dir = UP,n,i=1;

  88.         while(1)
  89.         {        
  90.                 move_snack(dir);               
  91.                 for(n=0;n<50;n++)
  92.                 {
  93.                         print_game();                        
  94.                         dir = get_dir(dir);        
  95.                 }
  96.                 if(!isalive())
  97.                 {
  98.                         break;
  99.                 }
  100.         }        
  101.                
  102. }
  103. void print_game(void)
  104. {
  105.         int i,j;
  106.         unsigned  int zhi=0;

  107.         for(i = 0;i < 8;i ++)
  108.         {
  109.                 zhi = 0;
  110.                 for(j = 0;j < 8;j ++)
  111.                 {
  112.                         if(map[i][j] == 1)
  113.                         {
  114.                                 zhi=zhi+(0x01<<j);
  115.                         }
  116.                 }
  117.                 P0=ledwei[i];                  //位選
  118.                 Hc595SendByte(zhi);
  119.                 delay(100);
  120.                 Hc595SendByte(0x00);        
  121.                
  122.         }
  123.         
  124. }
  125. void move_snack(int dir)
  126. {
  127.         int last = snack[0],current;
  128.         int i,j;
  129.         int grow = 0;
  130.         unsigned char x,y,fx,fy;
  131.         tran(food,&fx,&fy);
  132.         tran(snack[0],&x,&y);
  133.         switch(dir)
  134.         {
  135.                 case UP:
  136.                         y++;
  137.                         break;
  138.                 case DOWN:
  139.                         y--;
  140.                         break;
  141.                 case LEFT:
  142.                         x--;
  143.                         break;
  144.                 case RIGHT:
  145.                         x++;
  146.                         break;
  147.         }
  148. //        snack[0] = ((x ^ 0) << 4) ^ y;
  149.         snack[0] = x*8+y;
  150.         //蛇吃到食物
  151.         if(snack[0] == food)
  152.         {
  153.                 grow = 1;
  154.                 food = generate_food();
  155.         }
  156.         
  157.         for(i = 0;i < len;i ++)
  158.         {
  159.                 if(i == 0)
  160.                         continue;
  161.                 current = snack[i];
  162.                 snack[i] = last;
  163.                 last = current;
  164.         }
  165.         if(grow)
  166.         {
  167.                 snack[len] = last;
  168.                 len++;
  169.         }
  170.         for(j = 0;j < 8; j ++)
  171.         {
  172.                 for(i = 0;i < 8;i ++)
  173.                 {
  174.                         if(i == 0 || i == 7 || j == 0 || j == 7)
  175.                         {
  176.                                 map[i][j] = 1;
  177.                         }
  178.                         else if(i == fx && j == fy)
  179.                         {                                
  180.                                 map[i][j] = 1;
  181.                         }
  182.                         else
  183.                         {
  184.                                 map[i][j] = 0;
  185.                         }
  186.                                 
  187.         
  188.                 }
  189.         }
  190.         for(i = 0;i < len;i ++)
  191.         {
  192.                 tran(snack[i],&x,&y);
  193.                 if(snack[i] > 0)
  194.                 {
  195.                         map[x][y] = SANKE;
  196.                 }
  197.         }

  198. }
  199. //存儲坐標(biāo)數(shù)字與x,y的轉(zhuǎn)換函數(shù)
  200. void tran(unsigned char num,unsigned char *x,unsigned char *y)
  201. {
  202.         // *x = num >> 4;
  203.         // *y = (unsigned char)(num << 4 ) >> 4;
  204.         *x = num / 8;
  205.         *y = num % 8;        
  206. }
  207. //生產(chǎn)食物的函數(shù)
  208. unsigned char generate_food(void)
  209. {
  210.         unsigned char food_,fx,fy;
  211.         unsigned int in_snack=0,i;
  212. //        srand((unsigned int)time(NULL));
  213.                 srand(NLL);
  214.         do
  215.         {        
  216.                 NLL++;
  217.                 in_snack=0;
  218.                 food_ =        rand() % 64;
  219.                 tran(food_,&fx,&fy);
  220.                 for(i = 0;i < len;i ++)
  221.                 {
  222.                         if(food_ == snack[i])
  223.                         {
  224.                                 in_snack = 1;
  225.                         }
  226.                 }
  227.         }while(fx == 0 || fx == 7 || fy == 0 || fy == 7 || in_snack);
  228.         
  229.         return food_;
  230. }
  231. //獲取方向的函數(shù)
  232. int get_dir(int old_dir)
  233. ……………………

  234. …………限于本文篇幅 余下代碼請從51黑下載附件…………
復(fù)制代碼

所有資料51hei提供下載:

單片機貪吃蛇.zip

51.13 KB, 下載次數(shù): 22, 下載積分: 黑幣 -5

貪吃蛇.docx

59.47 KB, 下載次數(shù): 7, 下載積分: 黑幣 -5

HC6800-ES V2.0 新版.pdf

759.71 KB, 下載次數(shù): 9, 下載積分: 黑幣 -5

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 一区二区三区视频在线观看 | 97国产精品视频 | 日韩在线免费观看视频 | 国产精品91网站 | www国产成人免费观看视频,深夜成人网 | 日韩在线不卡视频 | 亚洲视频中文字幕 | 精品视频99 | 欧美精品成人 | 亚洲精品福利视频 | 亚洲高清在线观看 | 久久久久久999 | 国产精品成人一区 | 亚洲一区二区在线视频 | 国产97久久 | 香蕉视频黄色 | 亚洲人在线 | 亚洲第一av | 不卡在线视频 | 久久久久亚洲精品国产 | 超碰一区二区 | 久久专区 | 黄色免费在线观看网站 | 午夜黄色 | 免费午夜剧场 | 亚洲欧美在线观看视频 | 精品欧美一区二区在线观看视频 | 久久久久久成人 | www.色综合 | 午夜视频在线观看网址 | 欧美一区成人 | 精品一区二区观看 | 亚洲视频免费观看 | 国产乱码精品一区二区三区中文 | eeuss国产一区二区三区四区 | 欧美日韩在线高清 | 日韩精品成人一区二区三区视频 | a毛片视频网站 | 亚洲综合色视频在线观看 | 欧美在线一区二区三区 | 噜久寡妇噜噜久久寡妇 |