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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2631|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

單片機(jī)+595連88點(diǎn)陣屏的貪吃蛇小游戲 對(duì)595 sendbyte理解不夠,請(qǐng)賜教

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
求助,今天下載了個(gè)大神的單片機(jī)做貪吃蛇小游戲,無(wú)奈和購(gòu)買的硬件連接不一樣,改了一天都沒(méi)改出來(lái),對(duì)595 sendbyte理解不夠,請(qǐng)賜教。。。

手上的板子是共陰88點(diǎn)陣屏連接P0口,陽(yáng)極通過(guò)74HC595連P3^4 - P3^6。4個(gè)獨(dú)立按鍵控制“上下左右”連接P3^0 - P3^3。

單片機(jī)源碼如下:
  1. /***************************************************************/
  2. #include <reg52.h>
  3. #define uchar unsigned char
  4. #define SNAKE 20               //最大長(zhǎng)度
  5. #define TIME 50                //顯示延時(shí)時(shí)間
  6. #define SPEED 71               //速度控制
  7. typedef unsigned char u8;                 // 重命名類型u8簡(jiǎn)化代碼編寫

  8. sbit keyenable=P3;                  //方向使能


  9. sbit up=P3^3;      
  10. sbit down=P3^2;
  11. sbit right=P3^1;
  12. sbit left=P3^0;

  13. sbit SCK = P3^6;                         // SCK上升沿移位
  14. sbit RCK = P3^5;                        // RCK上升沿串行輸出寄存器鎖存
  15. sbit SER = P3^4;                         // SER引腳送字節(jié)數(shù)據(jù)進(jìn)去


  16. uchar x[SNAKE+1];
  17. uchar y[SNAKE+1];         
  18. uchar time,n,i,e;              //延時(shí)時(shí)間,當(dāng)前蛇長(zhǎng),通用循環(huán)變量,當(dāng)前速度               
  19. char addx,addy;                //位移偏移量

  20. /********************
  21. 延時(shí)程序
  22. *********************/

  23. void delay(char MS)
  24. {
  25.         char us,usn;
  26.         while(MS!=0)
  27.         {
  28.                 usn = 0;
  29.                 while(usn!=0)
  30.                 {
  31.                         us=0xff;
  32.                         while (us!=0)
  33.                         {
  34.                                 us--;
  35.                         }
  36.                         usn--;
  37.                 }
  38.                 MS--;
  39.         }
  40. }
  41. /*******************************************
  42. 判斷碰撞
  43. *******************************************/
  44. bit knock()
  45. {
  46.         bit k;
  47.         k=0;
  48.         if(x[1]>7||y[1]>7)k=1;                             //撞墻
  49.         for(i=2;i<n;i++)if((x[1]==x[i])&(y[1]==y[i]))k=1;  //撞自己
  50.         return k;
  51. }
  52. /*****************
  53. 上下左右鍵位處理
  54. *****************/
  55. void turnkey()                                                        // interrupt 0 using 2  
  56. {
  57. if(keyenable)
  58. {
  59.                 if(left)
  60.                 {
  61.                         addy=0;
  62.                         if(addx!=1)
  63.                         addx=-1;
  64.                         else
  65.                         addx=1;
  66.                  }
  67.                 if(right)
  68.                 {
  69.                         addy=0;
  70.                         if(addx!=-1)
  71.                         addx=1;
  72.                         else
  73.                         addx=-1;
  74.                 }
  75.                 if(up)
  76.                 {
  77.                         addx=0;
  78.                         if(addy!=-1)
  79.                         addy=1;
  80.                         else
  81.                         addy=-1;
  82.                 }
  83.                 if(down)
  84.                 {
  85.                         addx=0;
  86.                         if(addy!=1)
  87.                         addy=-1;
  88.                         else
  89.                         addy=1;
  90.                 }

  91. }
  92. }
  93. /*****************
  94. 乘方程序
  95. *****************/
  96. uchar mux(uchar temp)
  97. {
  98.         if(temp==7)return 128;
  99.         if(temp==6)return 64;
  100.         if(temp==5)return 32;
  101.         if(temp==4)return 16;
  102.         if(temp==3)return 8;
  103.         if(temp==2)return 4;
  104.         if(temp==1)return 2;
  105.         if(temp==0)return 1;
  106.         return 0;
  107. }
  108. /*****************
  109. 顯示時(shí)鐘 顯示程序
  110. *****************/
  111. void timer0(uchar k)
  112. {
  113.         while(k--)
  114.         {
  115.                 for(i=0;i<SNAKE+1;i++)
  116.                 {
  117.                         SER=x[i];
  118.                         P0=255-mux(y[i]);
  119.                         turnkey();                     //上下左右鍵位處理
  120.                         delay(TIME);                   //顯示延遲
  121.                         P0=0xff;SER=0x00;
  122.                 }
  123.         }
  124. }


  125. /*********************************************************************
  126. * 函 數(shù) 名       : Hc595SendByte
  127. * 函數(shù)功能                 : 通過(guò)74HC595串行移位發(fā)送一個(gè)字節(jié)出去
  128. * 參數(shù)列表       : dat - 待發(fā)送的字節(jié)數(shù)據(jù)
  129. * 函數(shù)輸出             : 無(wú)
  130. *********************************************************************/
  131. static void Hc595SendByte(x)
  132. {
  133.         u8 i = 0, j = 0;

  134.         SCK = 0;                                // 將移位設(shè)置為初始狀態(tài)
  135.         RCK = 0;                                // 將鎖存設(shè)置為初始狀態(tài)

  136.         for (i=0; i<8; i++)
  137.         {
  138.                 SER = x>>7;
  139.                 x >>= 1;

  140.                 SCK = 1;
  141.                 j++;                                  // 延時(shí)代碼,等同于nop指令
  142.                 j++;                                // 延時(shí)代碼,等同于nop指令
  143.                 SCK = 0;        
  144.         }

  145.         RCK = 1;
  146.         j++;                                        // 延時(shí)代碼,等同于nop指令
  147.         j++;                                        // 延時(shí)代碼,等同于nop指令
  148. }
  149. /*****************
  150. 主程序
  151. *****************/        
  152. void main(void)
  153. {
  154.          e=SPEED;
  155.          P3=0x00;
  156.          P0=0x00;
  157.          SCK=0;
  158.          RCK=0;
  159.          SER=0;
  160.          while(1)      
  161.          {
  162.                  for(i=3;i<SNAKE+1;i++)
  163.                 x[i]=100;
  164.                 for(i=3;i<SNAKE+1;i++)
  165.                 y[i]=100;//初始化

  166.                  x[0]=4;y[0]=4;             //果子                           
  167.                  n=3;                       //蛇長(zhǎng) n=-1                           
  168.             x[1]=1;y[1]=0;             //蛇頭                             
  169.                 x[2]=0;y[2]=0;             //蛇尾1                                
  170.                 addx=0;addy=0;

  171.                  while(1)
  172.                 {
  173.                         if(keyenable)
  174.                         break;
  175.                         timer0(1);
  176.                 }
  177.                                                         //位移偏移
  178.                  while(1)         
  179.                   {
  180.                         timer0(e);
  181.                            if(knock())
  182.                         {
  183.                                 e=SPEED;
  184.                                 break;
  185.                         }                          //判斷碰撞
  186.                 if((x[0]==x[1]+addx)&(y[0]==y[1]+addy))         //是否吃東西
  187.             {
  188.                              n++;
  189.                              if(n==SNAKE+1)
  190.                             {
  191.                                         n=3;
  192.                                         e=e-10;
  193.                                     for(i=3;i<SNAKE+1;i++)x[i]=100;
  194.                             for(i=3;i<SNAKE+1;i++)y[i]=100;
  195.                             }
  196.                                 x[0]=x[n-2];
  197.                 y[0]=y[n-2];
  198.            }
  199.                for(i=n-1;i>1;i--)
  200.                         {
  201.                                 x[i]=x[i-1];
  202.                                 y[i]=y[i-1];
  203.                         }      
  204.                     x[1]=x[2]+addx;y[1]=y[2]+addy;                     //移動(dòng)
  205.                   }                                                
  206.          }                        
  207. }
復(fù)制代碼


巫妖王開(kāi)發(fā)板原理圖V2.0.pdf

135.93 KB, 下載次數(shù): 11

購(gòu)買的開(kāi)發(fā)板

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

使用道具 舉報(bào)

沙發(fā)
ID:343482 發(fā)表于 2018-6-6 13:12 | 只看該作者
自己頂一個(gè)。。。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品欧美乱码久久久久久1区2区 | 国产精品美女久久久久aⅴ国产馆 | 一级做a | 久久一| 91在线视频免费观看 | 羞羞视频在线观看免费观看 | 国产黄色大片网站 | 国产精品视频一区二区三区四蜜臂 | a中文在线视频 | 国产日本精品视频 | 亚洲福利网站 | 欧美性猛交一区二区三区精品 | 亚洲一区二区欧美 | 久久精品国产99国产精品 | 91在线第一页 | 国产精品成av人在线视午夜片 | 日本在线精品视频 | 国产精品伦一区二区三级视频 | 国产精品揄拍一区二区 | 久久av一区 | 午夜av电影| 欧洲成人 | 欧美不卡在线 | 久久精品久久久久久 | 亚洲高清在线免费观看 | 国产成都精品91一区二区三 | 欧美成人a∨高清免费观看 欧美日韩中 | 成人欧美一区二区三区黑人孕妇 | 欧美成人精品激情在线观看 | 九九热精品在线 | 亚洲精品福利在线 | 岛国av一区二区 | 欧美一级欧美三级在线观看 | 在线免费看黄 | 免费亚洲婷婷 | 91久久国产综合久久 | 91在线资源 | 中文字幕在线精品 | 欧美一级毛片久久99精品蜜桃 | 九九九精品视频 | 国产成人a亚洲精品 |