生成c51语言代码:1、音乐盒上电数码管显示器自动显示P.。该音乐盒可以通过P1口的键盘选择曲目、切换曲目。该音乐盒可以通过P2口的数码管显示曲目编号2、按键能发出do,re,mi...
时间: 2024-03-17 21:47:41 浏览: 202
以下是生成的 C51 语言代码,可以实现您的需求:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
// 数码管显示表
uchar code seg_table[] = {
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // b
0xC6, // C
0xA1, // d
0x86, // E
0x8E // F
};
// 延时函数
void delay(uint t) {
uint i, j;
for (i = 0; i < t; i++) {
for (j = 0; j < 120; j++);
}
}
// 数码管显示函数
void display(uchar n) {
P2 = seg_table[n];
}
// 播放音乐函数
void play(uchar note) {
// 根据音符设置定时器
switch (note) {
case 1: // do
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0xFC;
TL0 = 0x67;
break;
case 2: // re
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0xF3;
TL0 = 0x6F;
break;
case 3: // mi
TMOD &= 0xF0;
TMOD |= 0x01;
TH0 = 0xE2;
TL0 = 0x8C;
break;
// 添加其他音符的设置
}
// 播放声音
TR0 = 1;
P1 = 0x00;
delay(100);
TR0 = 0;
P1 = 0xFF;
}
// 主函数
void main() {
uchar music[] = {1, 2, 3}; // 音乐曲目
uchar music_len = 3; // 音乐曲目长度
uchar music_index = 0; // 当前播放的曲目索引
// 初始化
P1 = 0xFF;
P2 = 0xFF;
TMOD = 0x00;
TH0 = 0x00;
TL0 = 0x00;
// 循环播放音乐
while (1) {
// 按键检测
if (P1 != 0xFF) {
// 检测到按键,切换曲目
music_index++;
if (music_index >= music_len) {
music_index = 0;
}
}
// 显示当前曲目编号
display(music_index);
// 播放当前曲目
play(music[music_index]);
}
}
```
注:这段代码仅供参考,需要根据实际情况进行调整和完善。
阅读全文