冰楓論壇

標題: STC90C52RC製作按照節奏閃光音樂爆閃燈 [打印本頁]

作者: 洪嵐峰    時間: 2023-4-6 06:31
標題: STC90C52RC製作按照節奏閃光音樂爆閃燈
以下需要的相關資訊:

零件清單:

STC90C52RC單片機
8個LED燈
8個220歐姆電阻
電容器:104,22PF
晶體:11.0592MHz
電源:5V
腳位連接圖:


LED燈  STC90C52RC
  1         P1.0
  2         P1.1
  3         P1.2
  4         P1.3
  5         P1.4
  6         P1.5
  7         P1.6
  8         P1.7
程式碼:


#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char

sbit beep = P3^3;    //蜂鳴器接口

void delay(uint z)   //延時函數
{
    uint x, y;
    for (x = z; x > 0; x--)
    {
        for (y = 110; y > 0; y--);
    }
}

void main()
{
    uchar i = 0;     //i為LED燈亮燈次數
    uchar j = 0;     //j為節拍器計數器
    uchar beat = 0;  //節拍器,控制LED燈的閃爍節奏
    uchar music[30] = {0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 7, 6, 5, 4, 3, 2, 1, 0, 0, 1, 2, 3, 4, 5, 6};  //音樂節奏
    P1 = 0x00;       //將P1設置為初始狀態,LED燈全部熄滅
    while (1)
    {
        for (i = 0; i < 8; i++)    //循環控制LED燈亮燈次數
        {
            for (j = 0; j < 3; j++)  //循環控制LED燈的閃爍速度
            {
                P1 = ~(1 << i);     //LED燈i亮燈
                delay(100);         //延時100ms
                P1 = 0x00;          //LED燈全部熄滅
                delay(100);         //延時100ms
            }
        }
        for (j = 0; j < 30; j++)    //循環

    {
        beep = 1;           //蜂鳴器鳴叫
        beat = music[j];    //讀取當前節拍器的節奏
        delay(20 * beat);   //根據節拍器的節奏延時
        beep = 0;           //蜂鳴器停止鳴叫
        P1 = ~(1 << j % 8); //LED燈閃爍
        delay(20 * beat);   //根據節拍器的節奏延時
        P1 = 0x00;          //LED燈全部熄滅
    }
}
}



這段程式碼使用了STC90C52RC單片機的P1口來控制8個LED燈的亮燈次數和閃爍節奏。同時,蜂鳴器用來發出節拍聲,以協助LED燈按照節奏閃爍。音樂節奏存儲在一個整數數組中,這個範例中使用的音樂是簡單的八度音階。




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓