生成单片机c51语言代码:1、音乐盒上电或按键复位后能自动显示P.,从而进入准备工作状态。该音乐盒可以通过键盘选择曲目、切换曲目。该音乐盒可以通过数码管显示器显示曲目编号,能够准确的播放音乐。 2、音乐盒可切换到电子琴功能,按键能发出do,re,mi...
时间: 2024-02-19 18:57:59 浏览: 72
以下是基于C51语言的代码实现:
```
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
// 定义IO口
sbit key1 = P1^0;
sbit key2 = P1^1;
sbit key3 = P1^2;
sbit key4 = P1^3;
sbit key5 = P1^4;
sbit key6 = P1^5;
sbit key7 = P1^6;
sbit key8 = P1^7;
sbit beep = P2^3; // 蜂鸣器
uchar code music_table[] = {0x01, 0x02, 0x03, 0x04, 0x05}; // 音乐曲目编号表
uchar code music_note[] = {0x01, 0x02, 0x03, 0x04, 0x05}; // 音乐曲目音符表
uchar music_index = 0; // 当前音乐曲目编号
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
void init()
{
TMOD = 0x01; // 定时器T0工作在模式1
TH0 = 0xFC; // 定时器T0初始值
TL0 = 0x67; // 定时器T0初始值
TR0 = 1; // 启动定时器T0
ET0 = 1; // 打开定时器T0中断
EA = 1; // 打开总中断
}
void play_music()
{
beep = 1; // 发声
delay(10); // 延时
beep = 0; // 停止发声
delay(10); // 延时
}
void main()
{
init(); // 初始化
while(1)
{
// 选择曲目
if(key1 == 0)
{
delay(10);
if(key1 == 0)
{
music_index = 0; // 选择第1个曲目
}
while(!key1);
}
else if(key2 == 0)
{
delay(10);
if(key2 == 0)
{
music_index = 1; // 选择第2个曲目
}
while(!key2);
}
else if(key3 == 0)
{
delay(10);
if(key3 == 0)
{
music_index = 2; // 选择第3个曲目
}
while(!key3);
}
else if(key4 == 0)
{
delay(10);
if(key4 == 0)
{
music_index = 3; // 选择第4个曲目
}
while(!key4);
}
else if(key5 == 0)
{
delay(10);
if(key5 == 0)
{
music_index = 4; // 选择第5个曲目
}
while(!key5);
}
// 播放音乐
if(key6 == 0)
{
delay(10);
if(key6 == 0)
{
uchar note = music_note[music_index]; // 获取当前曲目的音符
uchar i = 0;
for(i = 0; i < note; i++)
{
play_music(); // 播放音乐
}
}
while(!key6);
}
// 切换到电子琴功能
if(key7 == 0)
{
delay(10);
if(key7 == 0)
{
// 切换到电子琴功能
while(1)
{
// 发出do
if(key1 == 0)
{
delay(10);
if(key1 == 0)
{
beep = 1;
delay(10);
beep = 0;
}
while(!key1);
}
// 发出re
else if(key2 == 0)
{
delay(10);
if(key2 == 0)
{
beep = 1;
delay(20);
beep = 0;
}
while(!key2);
}
// 发出mi
else if(key3 == 0)
{
delay(10);
if(key3 == 0)
{
beep = 1;
delay(30);
beep = 0;
}
while(!key3);
}
// 发出fa
else if(key4 == 0)
{
delay(10);
if(key4 == 0)
{
beep = 1;
delay(40);
beep = 0;
}
while(!key4);
}
// 发出sol
else if(key5 == 0)
{
delay(10);
if(key5 == 0)
{
beep = 1;
delay(50);
beep = 0;
}
while(!key5);
}
// 发出la
else if(key6 == 0)
{
delay(10);
if(key6 == 0)
{
beep = 1;
delay(60);
beep = 0;
}
while(!key6);
}
// 发出si
else if(key7 == 0)
{
delay(10);
if(key7 == 0)
{
beep = 1;
delay(70);
beep = 0;
}
while(!key7);
}
// 返回音乐盒功能
else if(key8 == 0)
{
delay(10);
if(key8 == 0)
{
break;
}
while(!key8);
}
}
}
while(!key7);
}
}
}
// 定时器T0中断服务程序
void timer0() interrupt 1
{
TH0 = 0xFC; // 重新设置定时器T0的初始值
TL0 = 0x67; // 重新设置定时器T0的初始值
P0 = music_table[music_index]; // 在数码管上显示当前曲目编号
}
```
以上代码实现了音乐盒的基本功能,包括选择曲目、播放音乐、切换到电子琴功能等。需要注意的是,本代码仅供参考,具体实现可能需要根据实际情况进行调整。
阅读全文