生成c51语言代码:1、音乐盒上电数码管显示器自动显示P.。该音乐盒可以通过P1口的键盘选择曲目、切换曲目。该音乐盒可以通过P2口的数码管显示曲目编号2、按键能发出do,re,mi...
时间: 2024-03-24 19:37:41 浏览: 51
项目名称:彩灯数控音乐盒 项目内容: 基于proteus 8用数码管显示当前被按下的按键 ;LED 流水灯;通过按键实现歌曲切换
以下是使用 C51 语言编写的代码,实现音乐盒的功能:
```
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar code music_table[] = {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D}; // 数码管显示0~6对应的编码
// 延时函数
void delay(uint ms) {
uint i, j;
for(i = ms; i > 0; i--)
for(j = 110; j > 0; j--);
}
// 显示数码管
void display(uchar num) {
P2 = music_table[num];
}
// 按键扫描
uchar key_scan(void) {
uchar key = 0xFF;
P1 = 0x0F; // 第一列置低
if(P1 != 0x0F) { // 判断是否有键按下
delay(5);
if(P1 != 0x0F) {
key = P1;
while(P1 != 0x0F); // 等待键松开
switch(key) {
case 0x0E: return 1; // 第1行第1个键对应1曲目
case 0x0D: return 2; // 第1行第2个键对应2曲目
case 0x0B: return 3; // 第1行第3个键对应3曲目
case 0x07: return 4; // 第1行第4个键对应4曲目
default: return 0xFF;
}
}
}
P1 = 0xF0; // 第二列置低
if(P1 != 0xF0) { // 判断是否有键按下
delay(5);
if(P1 != 0xF0) {
key = P1;
while(P1 != 0xF0); // 等待键松开
switch(key) {
case 0xE0: return 5; // 第2行第1个键对应5曲目
case 0xD0: return 6; // 第2行第2个键对应6曲目
case 0xB0: return 7; // 第2行第3个键对应7曲目
case 0x70: return 8; // 第2行第4个键对应8曲目
default: return 0xFF;
}
}
}
return 0xFF;
}
// 发声函数
void beep(uchar tone) {
uint i;
for(i = 0; i < 1000 / tone; i++) {
P0 = 0x00;
delay(tone);
P0 = 0x01;
delay(tone);
}
}
// 主函数
void main(void) {
uchar key, song = 1;
display(song); // 显示当前曲目编号
while(1) {
key = key_scan(); // 扫描按键
if(key != 0xFF) { // 如果有键按下
switch(key) {
case 1: song = 1; break;
case 2: song = 2; break;
case 3: song = 3; break;
case 4: song = 4; break;
case 5: song = 5; break;
case 6: song = 6; break;
case 7: song = 7; break;
case 8: song = 8; break;
default: break;
}
display(song); // 更新数码管上的曲目编号
}
if(P3_2 == 0) { // 如果按下了发声按键
switch(song) { // 根据当前曲目编号发出对应音调
case 1: beep(523); break; // do
case 2: beep(587); break; // re
case 3: beep(659); break; // mi
case 4: beep(698); break; // fa
case 5: beep(784); break; // sol
case 6: beep(880); break; // la
case 7: beep(988); break; // si
case 8: beep(1047); break; // do
default: break;
}
}
}
}
```
上述代码使用 P2 口控制数码管的显示,使用 P1 口控制键盘的扫描,使用 P0 口控制发声器的发声。用户可以通过键盘选择曲目,然后按下发声键就可以发出相应的音调。
阅读全文