- UID
- 373967
- 帖子
- 8911
- 主題
- 2609
- 精華
- 0
- 積分
- 1001
- 楓幣
- 0
- 威望
- 978
- 存款
- 35194
- 贊助金額
- 0
- 推廣
- 0
- GP
- 1205
- 閱讀權限
- 70
- 在線時間
- 457 小時
- 註冊時間
- 2023-1-12
- 最後登入
- 2024-12-3
|
以下需要的相關資訊:
零件清單:
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燈按照節奏閃爍。音樂節奏存儲在一個整數數組中,這個範例中使用的音樂是簡單的八度音階。 |
|