洪嵐峰 發表於 2023-4-9 10:56:04

STC90C52RC 20顆LED燈電子轉盤遊戲

以下是一個使用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); //向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。
頁: [1]
查看完整版本: STC90C52RC 20顆LED燈電子轉盤遊戲