標(biāo)題: 基于單片機(jī)乒乓球游戲機(jī)控制系統(tǒng) [打印本頁]
作者: bbxyliyang 時間: 2023-7-28 20:04
標(biāo)題: 基于單片機(jī)乒乓球游戲機(jī)控制系統(tǒng)
一、系統(tǒng)方案
首先,我們編寫的這個游戲是一個小型游戲,實現(xiàn)的功能比較簡單,不像大型游戲那樣功能復(fù)雜,它只要LED燈逐個點亮到一方,在最靠近自己的LED點亮?xí)r按下按鍵即可,難度隨著局?jǐn)?shù)的增加而加大,對于實現(xiàn)這樣一個功能,程序不是太復(fù)雜,用一塊單片機(jī)足以達(dá)到目的。
其次,它的按鍵也比較少只有5個功能鍵,這些控鍵在Proteus中用彈跳式按鍵代替即可。
第三,本游戲只需要兩個兩位的數(shù)碼管顯示比分即可,不需要LCD液晶屏,也用不著電腦顯示屏。
第四,就編程語言方面來說,編寫這樣一個簡單的小游戲不需要什么高級的語言,C語言或匯編語言就足以完成,C語言是一種通用型的語言,編程靈活、可讀性強(qiáng)、移植性好;匯編語言是一種直接面向硬件的基礎(chǔ)語言,最接近機(jī)器語言,執(zhí)行速度快(本游戲采用C語言編寫)。由以上幾點可知:單片機(jī)上此游戲在硬件和軟件兩個方面都是可行的。
乒乓球比賽是由甲乙雙方參賽,再加上裁判的三人游戲。乒乓球比賽模擬機(jī)是一種用發(fā)光二極管模擬乒乓球運動的電子游戲機(jī),同時可以容納三人玩耍。
1. 用8個LED排成一條直線,以中點為界,兩邊各代表參賽雙方的位置。其中一只點亮的LED指示球的當(dāng)前位置。點亮的LED依次從左到右,或從右到左移動,其移動速度應(yīng)能進(jìn)行調(diào)節(jié)。
2. 當(dāng)球(點亮的那只LED)運動到某方德最后一位時,參賽者應(yīng)能果斷地按下位于自己一方的按鈕開關(guān),即表示啟動球拍擊球,若擊中則使球向相反方向移動,若未擊中,則對方得一分。
3. 一方得分時,電路自動響鈴3s,這期間發(fā)球無效,等鈴聲停止后方能繼續(xù)比賽。
4. 設(shè)置自動計分電路。甲乙雙方各用兩位數(shù)碼管進(jìn)行計分顯示,每記滿11分為1局。最好考慮雙方各10分之后,領(lǐng)先2分者為勝。
5. 甲乙雙方各設(shè)置一個發(fā)光二極管表示擁有發(fā)球權(quán),每得2分自動交換發(fā)球權(quán),擁有發(fā)球權(quán)的一方發(fā)球才能有效。
1.png (6.22 KB, 下載次數(shù): 43)
下載附件
2023-7-28 20:03 上傳
二、硬件設(shè)計
原理圖如下:
2.png (68.71 KB, 下載次數(shù): 48)
下載附件
2023-7-28 20:03 上傳
三、單片機(jī)軟件設(shè)計
1、首先是系統(tǒng)初始化:
InitTimer(); //初始化定時器
EA=1; //全局中斷開關(guān)
TR0=0;
TR1=0;
ET0=1; //開啟定時器0
ET1=1;
EX0=0;
EX1=0;
2、中斷服務(wù)程序
void timer1(void) interrupt 3 //用于產(chǎn)生報警信號
{
TH1=0x4c;
TL1=0x00; //50ms
TR1=1;
count_1miao++;
if(count_1miao==60)
{
count_1miao=0;
flag_1miao=1;
ALAM=1;
TR1=0;
}
}
3、數(shù)碼管程序
/*****顯示分?jǐn)?shù)子程序*****/
void Disp_score(void) //顯示溫度
{
P0=LEDData[scoreL/10];
P2=0x7F;
Delay(200);
P2=0xFF;
P0=LEDData[scoreL%10];
P2=0xBF;
Delay(200);
P2=0xFF;
P0=LEDData[scoreR/10];
P2=0xDF;
Delay(200);
P2=0xFF;
P0=LEDData[scoreR%10];
P2=0xEF;
Delay(200);
P2=0xFF;
}
4、核心算法程序
if((start==0)&&(run==0)&&flag_1miao==1) //停止?fàn)顟B(tài)下,控下start鍵
{
Disp_score(); //調(diào)用數(shù)碼管顯示
{
if(start==0) //開始按鍵按下
{
if(((scoreL==11)&&(scoreR<10))||((scoreR==11)&&(scoreL<10))||((scoreL>11)&&(scoreL-scoreR==2))||((scoreR>11)&(scoreR-scoreL==2)))
// 判斷左右方到11,另一方小于10,或者大于12,兩方差大于2,這局結(jié)束
{
TR1=0;
ALAM=1;
scoreL=0;
scoreR=0;
}
run=1; // 運行標(biāo)志位置1
jiqiu_l=0;
jiqiu_r=7;
zongjiqiushu=0;
if((scoreL+scoreR)%4<=1) //所得分?jǐn)?shù)和4取余,(比如1+1和為2和4取余余數(shù)為2大于1)余數(shù)小于1就是左側(cè)發(fā)球,大于一就是右側(cè)發(fā)球 ,就是每側(cè)發(fā)球兩次 ,
L_R=0;
else
L_R=1;
if(L_R==0)
{
countt0=0;
P1=PPQdata[0];
EX0=1;
EX1=0;
}
else
{
countt0=7;
P1=PPQdata[7];
EX0=0;
EX1=1;
}
}
}
}
四、proteus仿真設(shè)計
Proteus軟件是一款應(yīng)用比較廣泛的工具,它可以在沒有硬件平臺的基礎(chǔ)上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設(shè)計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達(dá)到我們設(shè)定的目的,避免我們搭建實物的時候,如果當(dāng)初選擇的方案有問題,我們器件都已經(jīng)焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發(fā)者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設(shè)計之初,就使用該軟件進(jìn)行模擬仿真,測試,選擇滿足我們設(shè)計的最優(yōu)方案。最后根據(jù)測試沒問題的仿真圖紙,焊接實物,調(diào)試,最終完成本設(shè)計的作品。
3.png (70.41 KB, 下載次數(shù): 50)
下載附件
2023-7-28 20:04 上傳
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
久草网站|
欧美一区二区三区在线
|
精品亚洲一区二区
|
羞羞视频在线网站观看
|
国产高清视频在线观看播放
|
国产三区视频在线观看
|
一区二区国产精品
|
在线免费观看成人
|
日本成人毛片
|
亚洲精品一区在线观看
|
黄片毛片免费看
|
日本免费在线观看视频
|
久久国产精品色av免费观看
|
天天爱av
|
亚洲欧美日韩在线
|
国产va|
国产精品毛片一区二区在线看
|
一二区成人影院电影网
|
丝袜美腿一区二区三区动态图
|
成人免费观看男女羞羞视频
|
成人在线视频免费观看
|
h小视频|
精品一区免费
|
亚洲国产精品福利
|
一区二区三区欧美
|
蜜桃视频成人
|
国产欧美精品区一区二区三区
|
天天宗合网
|
精品久久久久久久久久久久久久
|
精品国产伦一区二区三区观看说明
|
91成人免费观看
|
久久国产综合
|
欧美 中文字幕
|
黄色大全免费看
|
国产免费一区二区三区
|
91久久久精品国产一区二区蜜臀
|
精品久久久久久久久久久久久久
|
99re在线视频
|
亚洲精品福利视频
|
激情综合五月
|
日韩成人av在线
|