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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3633|回復(fù): 6
收起左側(cè)

基于51單片機的跳一跳小游戲 源程序+Proteus仿真電路圖

[復(fù)制鏈接]
ID:670227 發(fā)表于 2020-1-30 12:50 | 顯示全部樓層 |閱讀模式
這段時間學習了LCD12864的無字庫使用方法,借此設(shè)計了一個單片機跳一跳小游戲
主要功能:控制火材人跳動,判斷是否跳在地板上。

不多說直接上圖:

仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
總電圖圖
硬件電路圖.png


游戲電路圖:
游戲界面.png


LED控制電路圖:
LED控制.png


蜂鳴器電路圖:
BGM.png


總流程圖:
總流程圖.png


游戲界面:
游戲開始界面.png 游戲界面顯示.png 游戲結(jié)束.png



具體程序附件在里面:
軟件.png 硬件仿真圖.png
程序.png

單片機源程序如下:
  1. #include "main.h"
  2. unsigned char BGM_choose=1;
  3. //人物,地板的信息
  4. /* ***************************************************** */
  5. extern unsigned char mosaic_j1[3];
  6. extern unsigned char mosaic_width1[3];
  7. extern unsigned char mosaic_j2[3];
  8. extern unsigned char mosaic_width2[3];
  9. extern unsigned char NPC_page,NPC_column;
  10. extern bit NPC_xuli_judge; //判斷遞增與遞減
  11. /* ***************************************************** */

  12. void main()
  13. {
  14. unsigned char i=NOSURE;
  15. LCD12864_winit();           //LCD12864初始化
  16. TOOL_randInit();             //隨機數(shù)初始化
  17. BGM_init();           //BGM初始化

  18. show_start();                     //開始界面
  19. //按鍵按下進入游戲
  20. while(!KEY_Scan()==KEY0SURE);
  21.                   
  22. show_youxi();                     //游戲界面

  23. //顯示火材人
  24. NPC_page=diban_fir-1;
  25. NPC_column=mosaic_j1[show_judgewei(diban_fir)];
  26. show_NPC(NPC_page,NPC_column,NPC_huo);
  27. //游戲BGM
  28. BGM_choose=2;
  29.         
  30. while(1)
  31. {
  32.         BGM_choose=2;
  33. if(KEY_Scan()==LONGTIME_START)
  34. {
  35.   show_NPC(NPC_page,NPC_column,NPC_dun);             //火材人蹲
  36.   if(KEY0_CLR)
  37.   {
  38.      i=LONGTIME_START;
  39.      while(i!=NOSURE)
  40.          {
  41.            if(i==KEY0_LSURE)
  42.            {
  43.             if(NPC_xuli_judge)   {show_NPC_xuli(xuli_inc);}                 //火材人蓄力
  44.                               else                 {show_NPC_xuli(xuli_desc);}   
  45.            }         
  46.            i=KEY_Scanlongtime();
  47.          }
  48.           show_NPC(NPC_page,NPC_column,NPC_disp);  //火材人消失
  49.           NPC_move();                                                                        //火材人位置移動
  50.           show_NPC(NPC_page,NPC_column,NPC_huo);   //火材人顯示
  51.           show_NPC_xuli(xuli_disp);                                   //火材人蓄力消失
  52.           if(!game_judge())                                                       //游戲結(jié)束判斷
  53.           {
  54.                 BGM_choose=3;                      //BGM3
  55.           game_over();                       //游戲結(jié)束顯示
  56.           while(KEY_Scan()==NOSURE);
  57.           show_youxi();                                   //游戲界面刷新

  58.                                        //顯示火材人
  59.     NPC_page=diban_fir-1;
  60.     NPC_column=mosaic_j1[show_judgewei(diban_fir)];
  61.     show_NPC(NPC_page,NPC_column,NPC_huo);
  62.           }

  63.   }
  64.   else {show_NPC(NPC_page,NPC_column,NPC_huo);}
  65. }   
  66. }
  67. }


  68. //BGM
  69. /* ***************************************************** */
  70. //BGM初始化
  71. void BGM_init()
  72. {
  73.     TMOD=0x21;        //設(shè)置定時器0 16位計數(shù)
  74.     TL0 =(-1000)%256;                //設(shè)置定時初值
  75.     TH0 =(-1000)/256;                //設(shè)置定時初值
  76.     EA=1;ET0=1;TR0=1;
  77.           BGM=0;BGM1=0;
  78. }

  79. void BGM_time0(void) interrupt 1
  80. {
  81.         static unsigned char count=0;
  82.   if(BGM_choose==1)           //游戲開始
  83.         {
  84.           TL0 =(-30000)%256;                //設(shè)置定時初值
  85.     TH0 =(-30000)/256;                //設(shè)置定時初值
  86.                 count++;
  87.                 if(count==10){BGM=0;BGM1=1;}
  88.           if(count==30){BGM=1;BGM1=0;}
  89.                 if(count==38){BGM=0;BGM1=1;}
  90.                 if(count==40){BGM=0;BGM1=0;}
  91.                 if(count==50){BGM=0;BGM1=0;count=0;}
  92.         }               
  93.   if(BGM_choose==2)           //游戲
  94.         {
  95.           TL0 =(-20000)%256;                //設(shè)置定時初值
  96.     TH0 =(-20000)/256;                //設(shè)置定時初值
  97.                 count++;
  98.                 if(count==10){BGM=0;BGM1=1;}
  99.                 if(count==20){BGM=1;BGM1=0;count=0;}
  100.         }        
  101.         
  102.          if(BGM_choose==3)           //游戲結(jié)束
  103.         {
  104.           TL0 =(-50000)%256;                //設(shè)置定時初值
  105.     TH0 =(-50000)/256;                //設(shè)置定時初值
  106.                 count++;
  107.                 if(count==10){BGM=0;BGM1=1;}
  108.                 if(count==20){BGM=0;BGM1=0;count=0;}
  109.         }
  110. }
復(fù)制代碼

51hei.png
有什么BUG,歡迎大家提出,一起討論
單片機跳一跳.rar (2.75 MB, 下載次數(shù): 87)

評分

參與人數(shù) 1黑幣 +80 收起 理由
admin + 80 共享資料的黑幣獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:670227 發(fā)表于 2020-1-30 12:52 | 顯示全部樓層
程序運行過程中會有3個警告,意思是有的函數(shù)沒有被用到
沒有太大的影響
回復(fù)

使用道具 舉報

ID:100515 發(fā)表于 2020-1-30 21:30 | 顯示全部樓層
過年還這么勤奮,贊
回復(fù)

使用道具 舉報

ID:266007 發(fā)表于 2020-1-30 22:45 來自觸屏版 | 顯示全部樓層
非常感謝如此有用的教程
回復(fù)

使用道具 舉報

ID:102293 發(fā)表于 2020-2-5 10:40 | 顯示全部樓層
學習學習,謝謝樓主分享。辛苦了!
回復(fù)

使用道具 舉報

ID:654731 發(fā)表于 2020-2-5 11:50 | 顯示全部樓層
愛上lz,游戲做的很不錯
回復(fù)

使用道具 舉報

ID:546864 發(fā)表于 2021-5-19 13:34 來自觸屏版 | 顯示全部樓層
NOSURE未定義阿?
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美乱码精品一区二区三区 | 亚洲免费一区二区 | 91精品国产综合久久香蕉922 | 国产ts人妖一区二区三区 | 精品久久久久久中文字幕 | 精精国产xxxx视频在线野外 | 久久男人天堂 | 美女一区 | 国产一区二区三区四区在线观看 | 在线观看中文字幕 | 91久久视频 | 国产欧美一区二区三区在线播放 | av香蕉| 日韩在线视频免费观看 | 午夜免费影视 | 欧美一区二 | 国产91视频一区二区 | 国产激情91久久精品导航 | aa级毛片毛片免费观看久 | 日韩精品成人 | 欧美精品一区二区三区在线 | 国产丝袜一区二区三区免费视频 | 国产精品一区二区免费 | 久久久久久网站 | 免费看91 | www.国产一区 | 亚洲www啪成人一区二区麻豆 | 亚洲精品视频在线播放 | 亚欧精品| 日本久久精品视频 | 性视频一区 | 精品欧美一区二区三区免费观看 | 在线91| 国产精品免费观看视频 | 日韩喷潮| 精品久久久久香蕉网 | www.国产精| 9999国产精品欧美久久久久久 | 一区二区三区精品在线视频 | 欧美.com| 一区二区三区四区不卡视频 |