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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

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

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

這個圖標是放置接地 和電源等等的

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

雙擊單片機,添入hex文件


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

  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. }
復制代碼

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

使用道具 舉報

沙發
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
回復

使用道具 舉報

5#
ID:424770 發表于 2018-11-12 00:12 | 只看該作者
幫大忙了
回復

使用道具 舉報

6#
ID:421481 發表于 2020-4-5 11:51 | 只看該作者
按鍵上接電阻是為什么?
回復

使用道具 舉報

7#
ID:774404 發表于 2020-6-10 20:36 | 只看該作者
2992179673 發表于 2020-4-5 11:51
按鍵上接電阻是為什么?

上拉電阻
回復

使用道具 舉報

8#
ID:641349 發表于 2020-11-3 20:36 來自觸屏版 | 只看該作者
warriors 發表于 2017-5-30 23:25
**** 作者被禁止或刪除 內容自動屏蔽 ****

我也沒搞出來
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 99成人在线视频 | 在线视频亚洲 | 欧美国产视频一区二区 | 一级做a爰片性色毛片16美国 | 不卡一区二区三区四区 | 国产精品一区二区在线 | 中文字幕第三页 | 久久久久久国产 | 国产高清一区二区 | 特级生活片 | 免费在线观看成人 | 琪琪午夜伦伦电影福利片 | 亚洲一区二区在线 | 久久久久国产视频 | 日韩一区精品 | 一区二区三区四区国产 | 免费看国产一级特黄aaaa大片 | 超碰在线人人干 | 成人免费视频在线观看 | 乱码av午夜噜噜噜噜动漫 | 中文字幕一区二区在线观看 | 欧美 日韩 亚洲91麻豆精品 | 天天干天天干 | 久久久成人网 | 国产精品一区二区三区在线 | 久在线| 亚洲国产精品久久久久秋霞不卡 | 亚洲精品91 | 午夜精品久久久久久久久久久久久 | 草樱av| 日韩在线视频网址 | 九九久久国产 | www成人免费视频 | 日韩欧美专区 | 久久久久久久网 | 国产真实精品久久二三区 | 午夜影院在线视频 | www日本高清视频 | 国产激情视频在线观看 | 网址黄 | 国产成人叼嘿视频在线观看 |