冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 577|回覆: 0
打印 上一主題 下一主題

[討論] STC90C52RC 20顆LED燈電子轉盤遊戲

[複製鏈接]

2609

主題

0

好友

1000

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
8902
主題
2609
精華
0
積分
1000
楓幣
61
威望
977
存款
35042
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
456 小時
註冊時間
2023-1-12
最後登入
2024-11-30

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-9 10:56:04 |只看該作者 |倒序瀏覽
以下是一個使用STC90C52RC和20顆LED燈的電子轉盤遊戲的範例程式碼
使用編碼器來控制LED燈的亮滅
並且在LED燈依次亮起的過程中計算得分:


#include <reg52.h>

sbit CLK=P1^0;   //編碼器的CLK引腳
sbit DT=P1^1;    //編碼器的DT引腳

sbit LATCH=P2^2;  //595芯片的LATCH引腳
sbit CLK595=P2^1; //595芯片的CLK引腳
sbit DATA=P2^0;   //595芯片的DATA引腳

unsigned char code ledChar[] = { //LED燈的顯示字符
    0x3f, 0x06, 0x5b, 0x4f, 0x66,
    0x6d, 0x7d, 0x07, 0x7f, 0x6f
};

unsigned char score = 0;  //得分

void delay(unsigned int x) //延時函數
{
    unsigned int i,j;
    for(i=x;i>0;i--)
        for(j=112;j>0;j--);
}

void sendData(unsigned char dat) //向595芯片傳送數據
{
    unsigned char i;
    for(i=0;i<8;i++)
    {
        DATA=dat&0x80;
        CLK595=0;
        CLK595=1;
        dat<<=1;
    }
}

void latchData() //控制595芯片的LATCH信號
{
    LATCH=0;
    LATCH=1;
    LATCH=0;
}

void main()
{
    unsigned char ledIndex=0; //LED燈的亮起位置
    unsigned char ledShow=0;  //LED燈的顯示值
    unsigned char ledCount=0; //LED燈的計數器

    while(1)
    {
        if(CLK==0 && DT==1)  //編碼器的旋轉方向為正
        {
            ledIndex++;
            if(ledIndex>19)
            {
                ledIndex=0;
                if(ledShow==9) ledShow=0;
                else ledShow++;
            }
            score++;
        }
        if(CLK==0 && DT==0)  //編碼器的旋轉方向為負
        {
            ledIndex--;
            if(ledIndex>19) ledIndex=19;
            if(ledShow==0) ledShow=9;
            else ledShow--;
        }

        sendData(ledChar[ledShow]); //向595芯片傳送LED燈顯示值
        sendData(1<<ledIndex);     //向595芯片傳送LED燈亮起位置
        latchData();               //控制595芯片的LATCH信號

        delay(500);                //延時

        ledCount++;
        if(ledCount>19) ledCount=0;

ledIndex=ledCount;

    if(ledCount%5==0) //每亮起5顆LED燈就加1分
    {
        score++;
    }
}
}



在這個程式碼中,我們使用了STC90C52RC單片機和20顆LED燈,並且使用編碼器來控制LED燈的亮滅,並且在LED燈依次亮起的過程中計算得分。

具體來說,我們使用了P1口的0和1引腳來讀取編碼器的CLK和DT信號,並且使用P2口的0、1和2引腳來控制595芯片的DATA、CLK和LATCH信號,從而控制LED燈的亮滅。

在主函數中,我們不斷地讀取編碼器的CLK和DT信號,並且根據編碼器的旋轉方向來更新LED燈的亮起位置和顯示值,同時使用595芯片來控制LED燈的亮滅和顯示。

在每亮起5顆LED燈時,我們會將得分加1。
[發帖際遇]: 洪嵐峰 非常崇拜「古阿沫」,因此開始學習「二創」,靠著「二次創作」大賺 2 楓幣 幸運榜 / 衰神榜
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1彩票
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-11-30 23:26

回頂部