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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1827|回復: 0
收起左側

基于單片機乒乓球游戲機控制系統

[復制鏈接]
ID:190577 發表于 2023-7-28 20:04 | 顯示全部樓層 |閱讀模式
一、系統方案

首先,我們編寫的這個游戲是一個小型游戲,實現的功能比較簡單,不像大型游戲那樣功能復雜,它只要LED燈逐個點亮到一方,在最靠近自己的LED點亮時按下按鍵即可,難度隨著局數的增加而加大,對于實現這樣一個功能,程序不是太復雜,用一塊單片機足以達到目的。
其次,它的按鍵也比較少只有5個功能鍵,這些控鍵在Proteus中用彈跳式按鍵代替即可。
第三,本游戲只需要兩個兩位的數碼管顯示比分即可,不需要LCD液晶屏,也用不著電腦顯示屏。
第四,就編程語言方面來說,編寫這樣一個簡單的小游戲不需要什么高級的語言,C語言或匯編語言就足以完成,C語言是一種通用型的語言,編程靈活、可讀性強、移植性好;匯編語言是一種直接面向硬件的基礎語言,最接近機器語言,執行速度快(本游戲采用C語言編寫)。由以上幾點可知:單片機上此游戲在硬件和軟件兩個方面都是可行的。
乒乓球比賽是由甲乙雙方參賽,再加上裁判的三人游戲。乒乓球比賽模擬機是一種用發光二極管模擬乒乓球運動的電子游戲機,同時可以容納三人玩耍。
1. 用8個LED排成一條直線,以中點為界,兩邊各代表參賽雙方的位置。其中一只點亮的LED指示球的當前位置。點亮的LED依次從左到右,或從右到左移動,其移動速度應能進行調節。
2. 當球(點亮的那只LED)運動到某方德最后一位時,參賽者應能果斷地按下位于自己一方的按鈕開關,即表示啟動球拍擊球,若擊中則使球向相反方向移動,若未擊中,則對方得一分。
3. 一方得分時,電路自動響鈴3s,這期間發球無效,等鈴聲停止后方能繼續比賽。
4. 設置自動計分電路。甲乙雙方各用兩位數碼管進行計分顯示,每記滿11分為1局。最好考慮雙方各10分之后,領先2分者為勝。
5. 甲乙雙方各設置一個發光二極管表示擁有發球權,每得2分自動交換發球權,擁有發球權的一方發球才能有效。
1.png


二、硬件設計
原理圖如下:
2.png


三、單片機軟件設計
1、首先是系統初始化:
        InitTimer();    //初始化定時器
        EA=1;      //全局中斷開關
        TR0=0;
        TR1=0;
        ET0=1;      //開啟定時器0
        ET1=1;
    EX0=0;
    EX1=0;

2、中斷服務程序
void timer1(void) interrupt 3                                //用于產生報警信號
{
        TH1=0x4c;
        TL1=0x00;                 //50ms
        TR1=1;
        count_1miao++;
        if(count_1miao==60)
        {
                count_1miao=0;
                flag_1miao=1;
                ALAM=1;
                TR1=0;
        }
}

3、數碼管程序
/*****顯示分數子程序*****/
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)                        //停止狀態下,控下start鍵
                {
                        Disp_score();         //調用數碼管顯示
                        {
                                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,這局結束
                                        {
                                                TR1=0;
                                                ALAM=1;
                                                scoreL=0;
                                                scoreR=0;
                                        }
                                        run=1;           //         運行標志位置1
                                        jiqiu_l=0;
                                        jiqiu_r=7;
                                        zongjiqiushu=0;
                                        if((scoreL+scoreR)%4<=1)  //所得分數和4取余,(比如1+1和為2和4取余余數為2大于1)余數小于1就是左側發球,大于一就是右側發球         ,就是每側發球兩次        ,
                                        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仿真設計
Proteus軟件是一款應用比較廣泛的工具,它可以在沒有硬件平臺的基礎上通過自身的軟件仿真出硬件平臺的運行情況,這樣就可以通過軟件仿真來驗證我們設計的方案有沒有問題,如果有問題,可以重新選擇器件,連接器件,直到達到我們設定的目的,避免我們搭建實物的時候,如果當初選擇的方案有問題,我們器件都已經焊接好了,再去卸載下去,再去焊接新的方案的器件,測試,這樣會浪費人力和物力,也給開發者帶來一定困惑,Proteus仿真軟件就很好的解決這個問題,我們在設計之初,就使用該軟件進行模擬仿真,測試,選擇滿足我們設計的最優方案。最后根據測試沒問題的仿真圖紙,焊接實物,調試,最終完成本設計的作品。
3.png

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 一级片av| 欧美激情第一区 | 一区二区三区中文字幕 | 日韩一二三区 | 日韩一区二区在线视频 | av网站在线看 | 超碰一区二区 | 国产三级精品视频 | 91亚洲精品久久久电影 | 亚洲一区二区三 | 四虎伊人 | 一级毛片视频在线 | 户外露出一区二区三区 | 亚洲天堂av一区 | 中文字幕在线视频免费观看 | 做a视频 | 亚洲激情第一页 | 欧美亚洲国产一区二区三区 | 黄色毛片免费 | 成人av一区| 国产精品不卡一区 | 中文久久| 天天爱天天操 | 午夜免费视频 | 免费看a | 国产欧美一区二区在线观看 | 91精品国产综合久久精品图片 | 日韩在线视频免费观看 | 久久成人精品 | 69性欧美高清影院 | 国产精品成人国产乱一区 | 一区二区三区在线免费观看 | 中文字幕av一区 | 欧美亚洲激情 | 成人午夜影院 | 久久久蜜桃 | 精品二区 | 精品久久国产老人久久综合 | 国产亚洲一区二区精品 | 亚洲成年在线 | 欧美在线观看一区二区 |