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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 11969|回復: 8
收起左側

proteus仿真單片機貪吃蛇的詳細教程

  [復制鏈接]
ID:137190 發表于 2016-9-27 18:47 | 顯示全部樓層 |閱讀模式
0.png
一個“貪吃蛇”帶你進入proteus的世界.rar (993.14 KB, 下載次數: 106)
一個“貪吃蛇”帶你進入proteus的世界
首先我也是一個單片機和proteus的菜鳥,初識proteus,完全不知道如何下手,從網上找到一些教程,又覺得特別扯淡,沒有實際用途,沒辦法很快上手。無意中從網上看到了一個貪吃蛇的例程,一下子來了興趣,就在完成這個電路仿真的過程中也慢慢學會了proteus基本的操作。也希望分享給和我一樣剛開始使用的proteus的菜鳥們。
話不多說!開始吧!
首先你得擁有一個proteus,開始我使用的是8.0版本,但是經常會出現自動退出現象,查了很多資料都沒能解決 , 現在使用的是較為穩定的7.5版本。
8.0版本進入后點擊上排的 ISIS圖樣進入原理圖繪制,而7.5版本打開后直接進入原理圖繪制: 1.001.jpg
圈起來的是重點哦!
那個向右邊的三角是元器件放置,點擊它再點擊P即可進入元器件選擇界面 1.002.jpg
在搜索框中輸入你想放置的器件名稱就可以搜索到,我也給大家附上了常用器件的名稱對照表。

1.003.jpg 這個圖標是放置接地 和電源等等的 1.004.jpg

了解這些后你就可以開始繪制一張貪吃蛇的原理圖了,如下(proteus仿真是可以不用接入單片機最小系統的)
1.005.jpg

雙擊單片機,添入hex文件
1.006.jpg


好啦 現在點擊右下角的 1.007.jpg 仿真開始咯?
貪吃蛇走起!
1.008.jpg

  1.   //proteus仿真論壇:proteus.5d6d.com
  2. #include <reg51.h>
  3. #define uchar unsigned char
  4. #define SNAKE 20                 //最大長度
  5. #define TIME 50                 //顯示延時時間
  6. #define SPEED 71               //速度控制

  7. sbit up=P3^3;       //down
  8. sbit down=P3^1;
  9. sbit right=P3^2;
  10. sbit left=P3^4;
  11. uchar x[SNAKE+1];
  12. uchar y[SNAKE+1];         
  13. uchar time,n,i,e;              //延時時間,當前蛇長,通用循環變量,當前速度               
  14. char addx,addy;                //位移偏移量
  15. /********************
  16. 延時程序
  17. *********************/
  18. void delay(char MS)
  19. {
  20. char us,usn;
  21. while(MS!=0)
  22. {
  23. usn = 0;
  24. while(usn!=0)
  25. {
  26. us=0xff;
  27. while (us!=0){us--;};
  28. usn--;
  29. }
  30. MS--;
  31. }
  32. }
  33. /*******************************************
  34. 判斷碰撞
  35. *******************************************/
  36. bit knock()
  37. {bit k;
  38. k=0;
  39. if(x[1]>7||y[1]>7)k=1;                             //撞墻
  40. for(i=2;i<n;i++)if((x[1]==x[i])&(y[1]==y[i]))k=1;  //撞自己
  41. return k;
  42. }
  43. /*****************
  44. 上下左右鍵位處理
  45. *****************/
  46. void turnkey()// interrupt 0 using 2  
  47. {//up=1;
  48. if(!left){addy=0;if(addx!=1)addx=-1; else addx=1;}
  49. if(!right){addy=0;if(addx!=-1)addx=1; else addx=-1;}
  50. if(!up){addx=0;if(addy!=-1)addy=1; else addy=-1;}
  51. if(!down){addx=0;if(addy!=1)addy=-1; else addy=1;}
  52. }
  53. /*****************
  54. 乘方程序
  55. *****************/
  56. uchar mux(uchar temp)
  57. {
  58. if(temp==7)return 128;
  59. if(temp==6)return 64;
  60. if(temp==5)return 32;
  61. if(temp==4)return 16;
  62. if(temp==3)return 8;
  63. if(temp==2)return 4;
  64. if(temp==1)return 2;
  65. if(temp==0)return 1;
  66. return 0;
  67. }
  68. /*****************
  69. 顯示時鐘 顯示程序
  70. *****************/
  71. void timer0(uchar k)
  72. {while(k--)
  73. {for(i=0;i<SNAKE+1;i++)
  74. {P2=mux(x[i]);P1=255-mux(y[i]);
  75. turnkey();                     //上下左右鍵位處理
  76. delay(TIME);                   //顯示延遲
  77. P2=0x00;P1=0xff;
  78. }}
  79. }
  80. /*****************
  81. 主程序
  82. *****************/       
  83. void main(void)
  84. {e=SPEED;
  85. P0=0x00;
  86. P1=0xff;
  87. P2=0x00;
  88. P3=0xff;
  89. while(1)      
  90. {
  91. for(i=3;i<SNAKE+1;i++)x[i]=100;for(i=3;i<SNAKE+1;i++)y[i]=100;//初始化
  92. x[0]=4;y[0]=4;                                                //果子                           
  93. n=3;                                                          //蛇長 n=-1
  94. x[1]=1;y[1]=0;                                                //蛇頭
  95. x[2]=0;y[2]=0;                                                //蛇尾1
  96. addx=0;addy=0;                                                //位移偏移

  97. while(1){if(!left||!right||!up||!down)break;timer0(1);}
  98. while(1)         
  99.   {timer0(e);
  100.    if(knock()){e=SPEED;break;}                          //判斷碰撞
  101.         if((x[0]==x[1]+addx)&(y[0]==y[1]+addy))         //是否吃東西
  102.            {n++;
  103.                    if(n==SNAKE+1)
  104.                    {n=3;e=e-10;
  105.                    for(i=3;i<SNAKE+1;i++)x[i]=100;
  106.            for(i=3;i<SNAKE+1;i++)y[i]=100;
  107.                    }
  108.            x[0]=x[n-2];
  109.            y[0]=y[n-2];
  110.            }
  111.     for(i=n-1;i>1;i--){x[i]=x[i-1];y[i]=y[i-1];}        
  112.    
  113.     x[1]=x[2]+addx;y[1]=y[2]+addy;                     //移動
  114.   }                                               
  115. }                       
  116. }
復制代碼

回復

使用道具 舉報

ID:148153 發表于 2016-11-15 22:39 | 顯示全部樓層
請問我把這個代碼生成hex文件下載到單片機 單片機會什么沒任何反應呀--;求指導
回復

使用道具 舉報

ID:202508 發表于 2017-5-30 23:25 | 顯示全部樓層
這個代碼不對
回復

使用道具 舉報

ID:89286 發表于 2017-5-31 07:42 | 顯示全部樓層
thanks for sharing
回復

使用道具 舉報

ID:424770 發表于 2018-11-12 00:12 | 顯示全部樓層
幫大忙了
回復

使用道具 舉報

ID:421481 發表于 2020-4-5 11:51 | 顯示全部樓層
按鍵上接電阻是為什么?
回復

使用道具 舉報

ID:774404 發表于 2020-6-10 20:36 | 顯示全部樓層
2992179673 發表于 2020-4-5 11:51
按鍵上接電阻是為什么?

上拉電阻
回復

使用道具 舉報

ID:641349 發表于 2020-11-3 20:36 來自手機 | 顯示全部樓層
warriors 發表于 2017-5-30 23:25
**** 作者被禁止或刪除 內容自動屏蔽 ****

我也沒搞出來
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产视频线观看永久免费 | 亚洲狠狠 | 中文字幕在线观看视频网站 | 特级丰满少妇一级aaaa爱毛片 | 91久久久www播放日本观看 | 四虎永久在线精品免费一区二 | 久久久激情视频 | 精品一区二区视频 | 狠狠久久综合 | 免费观看的av毛片的网站 | 国产一区二区三区在线视频 | 一级aaaa毛片 | 成人av免费在线观看 | 国产激情视频在线 | 精品国产乱码久久久久久蜜柚 | 成人在线视频一区二区三区 | 久久九九影视 | 亚洲成人精品 | 亚洲欧美一区二区三区情侣bbw | 二区视频| 中文字幕的av | 精品福利视频一区二区三区 | 中文字幕亚洲一区二区va在线 | 日韩欧美国产成人一区二区 | 欧美一区二区三区四区五区无卡码 | 81精品国产乱码久久久久久 | 91精品国产综合久久久动漫日韩 | 国产一级电影在线 | av黄色在线观看 | 亚洲午夜精品一区二区三区他趣 | 免费成人av网站 | 91精品国产综合久久久久蜜臀 | 高清免费在线 | 91av视频在线播放 | av日韩在线播放 | 欧美三级在线 | 色婷婷综合久久久中文字幕 | 日韩视频专区 | 中文字幕 国产精品 | 偷拍自拍网站 | 国产高清亚洲 |