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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

自己做的用單片機控制8*8點陣的貪吃蛇

[復制鏈接]
跳轉到指定樓層
樓主
ID:63839 發表于 2014-8-27 18:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
  1. #include<stc12.h>      //用六個按鍵四個方向鍵 一個暫停鍵 一個重新開始健
  2. #include<stdlib.h>      //P1控制正極 P0控制負極
  3. #define uint unsigned int    //
  4. #define uchar unsigned char
  5. int addx,addy,n,s1,s2,e,a,b,c,d,k;   //addx addy位移改變量  n蛇身長度 s1,s2新果實的位置
  6. uchar x[21];       //a重新開始標志 b暫停標志 e代表蛇身運動速度大小
  7. uchar y[21];       //兩個數組用來儲存蛇身的地址
  8. void key();
  9. void deal();
  10. void move(int);
  11. uchar mux(int);
  12. void delay(uint);
  13. void main()
  14. {
  15. n=3,e=300,addx=0,addy=0,k=0;        //最初游戲設定
  16. x[0]=7;y[0]=2;          //果實
  17. x[1]=7;y[1]=7;               //蛇尾
  18. x[2]=7;y[2]=6;          //蛇身
  19.   x[n]=7;y[n]=5;             //蛇頭
  20. P0=0x7f;P1=0xe4;
  21. while(1)
  22. {
  23.   key();
  24.   if(b==0)
  25.   {
  26.   key();
  27.   move(e);
  28.   deal();
  29.   }
  30.   if(b==1)
  31.   { uint i;             //
  32.       for(i=0;i<=n;i++)         //
  33.         {             //
  34.        P0=255-mux(x[i]);P1=mux(y[i]);     //
  35.        delay(5);          //
  36.        P0=0xff;P1=0x00;              //和數碼管的消影差不多的作用
  37.    }
  38.   }
  39. }
  40. }
  41. void move(int e)  //實現移動
  42. {
  43. uint i;
  44. if(k>0)
  45. {
  46.   while(e--)            //
  47.   {              //
  48.      for(i=0;i<=n;i++)          //
  49.        {              //
  50.       P0=255-mux(x[i]);P1=mux(y[i]);      //
  51.       key();            //
  52.       delay(5);           //
  53.       P0=0xff;P1=0x00;                  //和數碼管的消影差不多的作用
  54.       }
  55.   }                 //
  56.   for(i=1;i<n;i++)          //
  57.   {x[i]=x[i+1];y[i]=y[i+1];}        //
  58.   x[n]=x[i]+addx;y[n]=y[i]+addy;       //              
  59. }
  60. }
  61. void deal()             //判斷函數
  62. {
  63. uint i;
  64. if(x[n]>7|x[n]<0|y[n]>7|y[n]<0)       //撞墻而死
  65. {
  66.   P0=0xef;P1=0x5e;delay(10000);      //游戲結束標志         
  67.   n=3,e=300,addx=0,addy=0,a=0,b=0,k=0;     //最初游戲設定
  68.   x[0]=7;y[0]=2;          //果實
  69.   x[1]=7;y[1]=7;               //蛇尾
  70.   x[2]=7;y[2]=6;          //蛇身
  71.    x[n]=7;y[n]=5;             //蛇頭
  72.   P0=0x7f;P1=0xe4;      
  73. }
  74. for(i=1;i<n;i++)          //撞自己而死
  75. {
  76.   if(x[i]==x[n]&y[i]==y[n])
  77.   {
  78.    P0=0xef;P1=0x5e;delay(30000);      //游戲結束標志
  79.    n=3,e=300,addx=0,addy=0,a=0,b=0,k=0;   //回到最初游戲設定
  80.    x[1]=7;y[1]=7;            //蛇尾
  81.    x[2]=7;y[2]=6;
  82.       x[n]=7;y[n]=5;          //蛇頭
  83.    P0=0x7f;P1=0xe4;
  84.   }         
  85. }
  86. if((x[0]==x[n]+addx)&(y[0]==y[n]+addy))   //判斷是否吃到果實
  87. {
  88.   n=n+1;
  89.   x[n]=x[0];y[n]=y[0];
  90.   if(n==13)         //判斷是否過關
  91.   { e=e-50;          //
  92.    P0=0x00;P1=0xff;delay(30000);      //游戲結束標志
  93.    n=3,addx=0,addy=0,a=0,b=0,k=0;      //回到最初游戲設定
  94.    x[1]=7;y[1]=7;            //蛇尾
  95.    x[2]=7;y[2]=6;
  96.       x[n]=7;y[n]=5;          //蛇頭
  97.    P0=0x7f;P1=0xe0;         
  98.   }
  99.   c=rand(); s1=c%10000%1000%100%10;
  100.   d=rand(); s2=d%10000%1000%100%10;   // 新的果實
  101.   if(s1>6)  s1=s1-3;
  102.   if(s2>6)  s2=s2-3;
  103.   x[0]=s1;y[0]=s2;       //
  104.   for(i=1;i<n;i++)       //判斷是否與蛇身重合
  105.   {
  106.     if((x[0]==x[i])&(y[0]==y[i]))
  107.     {
  108.      c=rand(); s1=c%10000%1000%100%10;
  109.    d=rand(); s2=d%10000%1000%100%10;  
  110.    if(s1>6)  s1=s1-3;
  111.    if(s2>6)  s2=s2-3;
  112.    x[0]=s1;y[0]=s2;      // 新的果實
  113.    i=1;
  114.     }
  115.     }
  116. }
  117. }
  118. void key()             //矩陣按鍵掃描
  119. {
  120. uchar t;
  121. P3=0xdf;
  122. t=P3;
  123. t=t&0x1c;
  124. if(t!=0x1c)
  125. {
  126.   delay(10);
  127.   t=P3;
  128.   t=t&0x1c;
  129.   if(t!=0x1c)
  130.    {
  131.     t=P3;
  132.    switch(t)
  133.    {
  134.     case 0xdb:a=1;break;
  135.     case 0xd7:k=1;break;
  136.     case 0xcf:b++;break;
  137.     default:  break;
  138.    }
  139.    while(t!=0x1c)
  140.    {
  141.     t=P3;
  142.     t=t&0x1c;
  143.    }
  144.    }
  145. }
  146. P3=0xbf;
  147. t=P3;
  148. t=t&0x1c;
  149. if(t!=0x1c)
  150. {
  151.   delay(10);
  152.   t=P3;
  153.   t=t&0x1c;
  154.   if(t!=0x1c)
  155.    {
  156.     t=P3;
  157.    switch(t)
  158.    {
  159.     case 0xbb:k=2;break;
  160.     case 0xb7:k=3;break;
  161.     case 0xaf:k=4;break;
  162.     default:  break;
  163.    }
  164.    while(t!=0x1c)
  165.    {
  166.     t=P3;
  167.     t=t&0x1c;
  168.    }
  169.    }
  170. }
  171. b=b%2;
  172. switch(k)
  173. {
  174.   case 1: addy=-1,addx=0;break;
  175.   case 2: addx=1,addy=0;break;
  176.   case 3: addy=1,addx=0;break;
  177.   case 4: addx=-1,addy=0;break;
  178. }
  179. }
  180. uchar mux(int temp)      //十進制轉化為十六進制
  181. {
  182. if(temp==7)return 128;
  183. if(temp==6)return 64;
  184. if(temp==5)return 32;
  185. if(temp==4)return 16;
  186. if(temp==3)return 8;
  187. if(temp==2)return 4;
  188. if(temp==1)return 2;
  189. if(temp==0)return 1;
  190.            return 0;
  191. }
  192. void delay(uint z)
  193. {
  194. uint x,y;
  195. for(x=z;x>0;x--)
  196.   for(y=110;y>0;y--);
  197. }
復制代碼

評分

參與人數 2威望 +30 黑幣 +25 收起 理由
jiege + 5 + 5 贊一個!
admin + 25 + 20 絕世好帖!

查看全部評分

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

使用道具 舉報

沙發
ID:51088 發表于 2014-8-27 21:01 | 只看該作者

回帖獎勵 +1

樓主能發一個完整的工程文件嗎  好像還差頭文件  最好有電路圖
回復

使用道具 舉報

板凳
ID:63839 發表于 2014-8-28 13:03 | 只看該作者
jiege 發表于 2014-8-27 21:01
樓主能發一個完整的工程文件嗎  好像還差頭文件  最好有電路圖

我不知道如何穿文件 頭文件是根據自己的單片機型號而修改 P1控制點陣的正極 P0控制負極 其他的I/O口可以用作鍵盤
回復

使用道具 舉報

地板
ID:63839 發表于 2014-8-28 13:07 | 只看該作者
我用的鍵盤是矩陣鍵盤 大家可以用獨立鍵盤 我是在我之前的單片機上外接一個8*8的點陣 并沒有做出來實物  但是在面包板上調試一切正常 我就是想暑假無聊做些東西 既然程序ok 就沒必要一定做出硬件
回復

使用道具 舉報

5#
ID:1 發表于 2014-8-28 15:52 | 只看該作者
按照這個步驟即可在回帖的時候上傳圖片(上傳附件就在圖片的旁邊 方法一樣)


選擇圖片的時候可以多選,這樣就能一次性上傳很多圖片(上傳附件就在圖片的旁邊 方法一樣)
回復

使用道具 舉報

6#
ID:63839 發表于 2014-8-28 16:00 | 只看該作者
admin 發表于 2014-8-28 15:52
按照這個步驟即可在回帖的時候上傳圖片(上傳附件就在圖片的旁邊 方法一樣)

謝啦 thanks
回復

使用道具 舉報

7#
ID:63839 發表于 2014-9-1 13:39 | 只看該作者
大家覺得好就給點分
回復

使用道具 舉報

8#
ID:94279 發表于 2015-11-1 12:48 | 只看該作者
看看怎么樣
回復

使用道具 舉報

9#
ID:111188 發表于 2016-3-28 23:02 | 只看該作者
學習一下
回復

使用道具 舉報

10#
ID:148621 發表于 2016-12-1 21:23 | 只看該作者
實際運行的時候它怎么不動呀QAQ
回復

使用道具 舉報

11#
ID:155589 發表于 2016-12-18 18:36 | 只看該作者
只有程序呀
回復

使用道具 舉報

12#
ID:183929 發表于 2017-3-28 18:55 | 只看該作者
贊一個
回復

使用道具 舉報

13#
ID:139785 發表于 2017-5-12 10:42 來自手機 | 只看該作者
我做的 比你做的好玩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人国产精品久久 | 国产成人精品久久二区二区91 | 精品中文字幕在线观看 | 亚洲免费三区 | 国产69精品久久99不卡免费版 | 国产丝袜一区二区三区免费视频 | 在线观看国产 | 91免费观看在线 | 国产99小视频 | 超碰av免费 | 色综合天天天天做夜夜夜夜做 | 中国免费黄色片 | 国产成人精品久久二区二区91 | 国产成人福利在线观看 | 91超碰在线观看 | 久久久久网站 | 欧美日韩亚洲视频 | 99亚洲 | 浴室洗澡偷拍一区二区 | 欧美视频一区 | 99精品国产一区二区三区 | 国产在线高清 | 精品视频网 | 日韩精品极品视频在线观看免费 | 欧美一级免费看 | 亚洲乱码国产乱码精品精的特点 | 欧洲一区视频 | 波多野结衣精品 | 最新中文字幕在线 | 免费久久网站 | 免费一级黄色电影 | 在线看一区二区三区 | 亚洲欧美日本在线 | 一级大片 | 免费观看成人av | 91精品一区 | 日韩三级在线 | 青青草视频免费观看 | 成人自拍视频 | 91精品国产综合久久久久蜜臀 | 亚洲精品一区在线 |