這段時間學習了LCD12864的無字庫使用方法,借此設計了一個單片機跳一跳小游戲
主要功能:控制火材人跳動,判斷是否跳在地板上。
不多說直接上圖:
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
總電圖圖
硬件電路圖.png (30.28 KB, 下載次數(shù): 41)
下載附件
2020-1-30 12:39 上傳
游戲電路圖:
游戲界面.png (30.68 KB, 下載次數(shù): 35)
下載附件
2020-1-30 12:39 上傳
LED控制電路圖:
LED控制.png (6.73 KB, 下載次數(shù): 43)
下載附件
2020-1-30 12:39 上傳
蜂鳴器電路圖:
BGM.png (10.34 KB, 下載次數(shù): 38)
下載附件
2020-1-30 12:39 上傳
總流程圖:
總流程圖.png (84.53 KB, 下載次數(shù): 30)
下載附件
2020-1-30 12:41 上傳
游戲界面:
游戲開始界面.png (26.48 KB, 下載次數(shù): 41)
下載附件
2020-1-30 12:40 上傳
游戲界面顯示.png (26.29 KB, 下載次數(shù): 38)
下載附件
2020-1-30 12:40 上傳
游戲結束.png (26.84 KB, 下載次數(shù): 37)
下載附件
2020-1-30 12:40 上傳
具體程序附件在里面:
軟件.png (97.57 KB, 下載次數(shù): 44)
下載附件
2020-1-30 12:49 上傳
硬件仿真圖.png (101.06 KB, 下載次數(shù): 35)
下載附件
2020-1-30 12:49 上傳
程序.png (97.44 KB, 下載次數(shù): 42)
下載附件
2020-1-30 12:40 上傳
單片機源程序如下:
- #include "main.h"
- unsigned char BGM_choose=1;
- //人物,地板的信息
- /* ***************************************************** */
- extern unsigned char mosaic_j1[3];
- extern unsigned char mosaic_width1[3];
- extern unsigned char mosaic_j2[3];
- extern unsigned char mosaic_width2[3];
- extern unsigned char NPC_page,NPC_column;
- extern bit NPC_xuli_judge; //判斷遞增與遞減
- /* ***************************************************** */
- void main()
- {
- unsigned char i=NOSURE;
- LCD12864_winit(); //LCD12864初始化
- TOOL_randInit(); //隨機數(shù)初始化
- BGM_init(); //BGM初始化
-
- show_start(); //開始界面
- //按鍵按下進入游戲
- while(!KEY_Scan()==KEY0SURE);
-
- show_youxi(); //游戲界面
- //顯示火材人
- NPC_page=diban_fir-1;
- NPC_column=mosaic_j1[show_judgewei(diban_fir)];
- show_NPC(NPC_page,NPC_column,NPC_huo);
- //游戲BGM
- BGM_choose=2;
-
- while(1)
- {
- BGM_choose=2;
- if(KEY_Scan()==LONGTIME_START)
- {
- show_NPC(NPC_page,NPC_column,NPC_dun); //火材人蹲
- if(KEY0_CLR)
- {
- i=LONGTIME_START;
- while(i!=NOSURE)
- {
- if(i==KEY0_LSURE)
- {
- if(NPC_xuli_judge) {show_NPC_xuli(xuli_inc);} //火材人蓄力
- else {show_NPC_xuli(xuli_desc);}
- }
- i=KEY_Scanlongtime();
- }
- show_NPC(NPC_page,NPC_column,NPC_disp); //火材人消失
- NPC_move(); //火材人位置移動
- show_NPC(NPC_page,NPC_column,NPC_huo); //火材人顯示
- show_NPC_xuli(xuli_disp); //火材人蓄力消失
- if(!game_judge()) //游戲結束判斷
- {
- BGM_choose=3; //BGM3
- game_over(); //游戲結束顯示
- while(KEY_Scan()==NOSURE);
- show_youxi(); //游戲界面刷新
- //顯示火材人
- NPC_page=diban_fir-1;
- NPC_column=mosaic_j1[show_judgewei(diban_fir)];
- show_NPC(NPC_page,NPC_column,NPC_huo);
- }
- }
- else {show_NPC(NPC_page,NPC_column,NPC_huo);}
- }
- }
- }
- //BGM
- /* ***************************************************** */
- //BGM初始化
- void BGM_init()
- {
- TMOD=0x21; //設置定時器0 16位計數(shù)
- TL0 =(-1000)%256; //設置定時初值
- TH0 =(-1000)/256; //設置定時初值
- EA=1;ET0=1;TR0=1;
- BGM=0;BGM1=0;
- }
- void BGM_time0(void) interrupt 1
- {
- static unsigned char count=0;
- if(BGM_choose==1) //游戲開始
- {
- TL0 =(-30000)%256; //設置定時初值
- TH0 =(-30000)/256; //設置定時初值
- count++;
- if(count==10){BGM=0;BGM1=1;}
- if(count==30){BGM=1;BGM1=0;}
- if(count==38){BGM=0;BGM1=1;}
- if(count==40){BGM=0;BGM1=0;}
- if(count==50){BGM=0;BGM1=0;count=0;}
- }
- if(BGM_choose==2) //游戲
- {
- TL0 =(-20000)%256; //設置定時初值
- TH0 =(-20000)/256; //設置定時初值
- count++;
- if(count==10){BGM=0;BGM1=1;}
- if(count==20){BGM=1;BGM1=0;count=0;}
- }
-
- if(BGM_choose==3) //游戲結束
- {
- TL0 =(-50000)%256; //設置定時初值
- TH0 =(-50000)/256; //設置定時初值
- count++;
- if(count==10){BGM=0;BGM1=1;}
- if(count==20){BGM=0;BGM1=0;count=0;}
- }
- }
復制代碼
51hei.png (3.47 KB, 下載次數(shù): 35)
下載附件
2020-1-30 15:09 上傳
有什么BUG,歡迎大家提出,一起討論
單片機跳一跳.rar
(2.75 MB, 下載次數(shù): 87)
2020-1-30 12:46 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|