欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: proteus仿真單片機貪吃蛇的詳細教程 [打印本頁]

作者: 51黑ff    時間: 2016-9-27 18:47
標題: 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. }
復制代碼


作者: tmy8087    時間: 2016-11-15 22:39
請問我把這個代碼生成hex文件下載到單片機 單片機會什么沒任何反應呀--;求指導
作者: warriors    時間: 2017-5-30 23:25
這個代碼不對

作者: faridzled    時間: 2017-5-31 07:42
thanks for sharing
作者: 愛枷鎖    時間: 2018-11-12 00:12
幫大忙了
作者: 2992179673    時間: 2020-4-5 11:51
按鍵上接電阻是為什么?
作者: Bimmer    時間: 2020-6-10 20:36
2992179673 發表于 2020-4-5 11:51
按鍵上接電阻是為什么?

上拉電阻

作者: 朝與暮    時間: 2020-11-3 20:36
warriors 發表于 2017-5-30 23:25
**** 作者被禁止或刪除 內容自動屏蔽 ****

我也沒搞出來




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1