生成单片机c51语言代码:1、音乐盒上电或按键复位后能自动显示P.,进入准备工作状态。该音乐盒可以通过键盘选择曲目、切换曲目,数码管显示器显示曲目编号,能够准确的播放音乐。 2、音乐盒可切换到电子琴功能,按键能发出do,re,mi...
时间: 2024-02-13 09:07:34 浏览: 80
实现电子琴功能的c51单片机代码
以下是基于C51的参考代码,实现了音乐盒的基本功能和电子琴功能:
```c
#include <reg52.h> // 引用头文件
#define uchar unsigned char // 定义uchar类型
sbit K1 = P2^0; // 定义按键K1
sbit K2 = P2^1; // 定义按键K2
sbit K3 = P2^2; // 定义按键K3
sbit K4 = P2^3; // 定义按键K4
uchar code music[3][8] = { // 存储音乐数据
{0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80},
{0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01},
{0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA}
};
uchar code music_notes[8] = { // 存储音符数据
0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07
};
uchar mode = 0, music_num = 0, music_pos = 0; // 定义模式、曲目编号、曲目位置
void delayms(uchar ms) { // 延时函数
uchar i, j;
for (i = ms; i > 0; i--)
for (j = 110; j > 0; j--);
}
void display(uchar num) { // 显示函数
uchar i;
P0 = 0xFF; // 清空P0口
switch (num) {
case 0: // 数字0
P0 = ~music_notes[0];
break;
case 1: // 数字1
P0 = ~music_notes[1];
break;
case 2: // 数字2
P0 = ~music_notes[2];
break;
case 3: // 数字3
P0 = ~music_notes[3];
break;
case 4: // 数字4
P0 = ~music_notes[4];
break;
case 5: // 数字5
P0 = ~music_notes[5];
break;
case 6: // 数字6
P0 = ~music_notes[6];
break;
case 7: // 数字7
P0 = ~music_notes[7];
break;
default:
break;
}
for (i = 0; i < 8; i++) { // 循环显示
P1 = music[num][i]; // 输出数据
delayms(5); // 延时
}
}
void main() {
while (1) {
if (mode == 0) { // 音乐盒模式
display(music_num); // 显示曲目编号
if (K1 == 0) { // 按键K1按下
music_pos = 0; // 重置曲目位置
mode = 1; // 进入播放模式
} else if (K2 == 0) { // 按键K2按下
if (music_num > 0) // 切换到上一曲
music_num--;
} else if (K3 == 0) { // 按键K3按下
if (music_num < 2) // 切换到下一曲
music_num++;
} else if (K4 == 0) { // 按键K4按下
mode = 2; // 进入电子琴模式
}
} else if (mode == 1) { // 播放模式
display(music_num); // 显示曲目编号
P1 = music[music_num][music_pos]; // 输出数据
delayms(10); // 延时
music_pos++; // 曲目位置+1
if (music_pos > 7) { // 播放完毕
mode = 0; // 进入音乐盒模式
}
} else if (mode == 2) { // 电子琴模式
display(8); // 显示"8"
if (K1 == 0) { // 按键K1按下
P1 = 0xFE; // 输出数据
} else if (K2 == 0) { // 按键K2按下
P1 = 0xFD; // 输出数据
} else if (K3 == 0) { // 按键K3按下
P1 = 0xFB; // 输出数据
} else if (K4 == 0) { // 按键K4按下
P1 = 0xF7; // 输出数据
} else {
P1 = 0xFF; // 清空P1口
}
}
}
}
```
上述代码实现了音乐盒和电子琴的基本功能,具体实现方式可以根据实际需求进行修改和优化。
阅读全文