生成单片机c51语言代码:1、音乐盒上电或按键复位后能数码管显示器自动显示P.,从而进入准备工作状态。该音乐盒可以通过键盘选择曲目、切换曲目。该音乐盒可以通过数码管显示器显示曲目编号,能够准确的播放音乐。2、音乐盒可切换到电子琴功能,按键能发出do,re,mi...
时间: 2024-02-20 18:00:15 浏览: 78
以下是一个基本的C51语言代码实现上述功能:
```
#include <reg51.h>
// 定义IO口
sbit btn1 = P2^0; // 按键1
sbit btn2 = P2^1; // 按键2
sbit btn3 = P2^2; // 按键3
sbit btn4 = P2^3; // 按键4
sbit buzzer = P1^0; // 蜂鸣器
sbit dula = P1^1; // 数码管位选
sbit wela = P1^2; // 数码管段选
// 定义曲目数组
unsigned char music[3][8] = {
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08}, // 曲目1
{0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10}, // 曲目2
{0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18} // 曲目3
};
// 定义变量
unsigned char mode = 0; // 模式:0为音乐盒,1为电子琴
unsigned char musicIndex = 0; // 当前曲目编号
// 数码管显示函数
void display(unsigned char num) {
unsigned char code table[] = {
0xC0, // '0'
0xF9, // '1'
0xA4, // '2'
0xB0, // '3'
0x99, // '4'
0x92, // '5'
0x82, // '6'
0xF8, // '7'
0x80, // '8'
0x90 // '9'
};
wela = 1; // 打开段选
P0 = table[num / 10]; // 显示十位
dula = 1; // 打开位选
dula = 0;
P0 = table[num % 10]; // 显示个位
dula = 1; // 打开位选
dula = 0;
wela = 0; // 关闭段选
}
// 延时函数
void delay(unsigned int time) {
unsigned int i, j;
for(i = time; i > 0; i--)
for(j = 110; j > 0; j--);
}
// 主函数
void main() {
// 初始化
display(0);
while(btn1 && btn2 && btn3 && btn4); // 等待按键释放
delay(10);
// 进入准备工作状态
display('P');
while(1) {
// 切换模式
if(!btn1) {
delay(10);
if(!btn1) {
mode = !mode;
if(mode == 0) { // 音乐盒模式
display(musicIndex + 1);
} else { // 电子琴模式
display(0);
}
while(!btn1); // 等待按键释放
delay(10);
}
}
// 选择曲目
if(mode == 0 && !btn2) {
delay(10);
if(!btn2) {
musicIndex++;
if(musicIndex >= 3) {
musicIndex = 0;
}
display(musicIndex + 1);
while(!btn2); // 等待按键释放
delay(10);
}
}
// 播放音乐
if(mode == 0 && !btn3) {
delay(10);
if(!btn3) {
unsigned char i;
for(i = 0; i < 8; i++) {
buzzer = 1; // 发声
P0 = music[musicIndex][i]; // 显示当前音符
display(i + 1);
delay(50);
buzzer = 0; // 停止发声
delay(10);
}
while(!btn3); // 等待按键释放
delay(10);
}
}
// 电子琴
if(mode == 1) {
if(!btn2) { // 发出do
buzzer = 1;
P0 = 0x01;
display(1);
} else if(!btn3) { // 发出re
buzzer = 1;
P0 = 0x02;
display(2);
} else if(!btn4) { // 发出mi
buzzer = 1;
P0 = 0x03;
display(3);
} else { // 停止发声
buzzer = 0;
display(0);
}
}
}
}
```
注意:以上代码仅供参考,具体实现可能需要根据硬件和需求进行修改。
阅读全文
相关推荐








