计算机改成音乐键位,单片机按键切换下一首歌

#include "at89x51.h"

#define uchar unsigned char

#define uint unsinged int

sbit speaker=P1^5;//蜂鸣器。按键默认的是P3.2脚(外部中断0)

uchar t0h,t0l,time,flag;

//--------------------------------------

//单片机晶振采用12MHz

// 频率-半周期数据表 高八位  本软件共保存了四个八度的28个频率数据

uchar code FREQH[]={0x01,                                                                         //0的时候没有音符

0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8,                //低音1234567

0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC,//1,2,3,4,5,6,7,i

0xFC,0xFD,0xFD,0xFD,0xFD,0xFE,                  //高音 234567

0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF};         //超高音 1234567

//-----------------------------------------

// 频率-半周期数据表 低八位

uchar code FREQL[]={0x01,                                                                         //0的时候没有音符

0x42,0xC1,0x17,0xB6,0xD0,0xD1,0xB6,                //低音1234567

0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F,//1,2,3,4,5,6,7,i

0xEE,0x44,0x6B,0xB4,0xF4,0x2D,                   //高音 234567

0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16};        //超高音 1234567

//--------------------------------------

//一个音符有三个数字。前为第几个音、中为第几个八

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于AT89C52单片机实现按键控制蜂鸣器播放和暂停一首音乐的示例程序: ``` #include <reg52.h> #include <intrins.h> sbit buzzer = P1^5; // 定义蜂鸣器控制引脚 sbit key = P3^2; // 定义按键输入引脚 unsigned char music[] = {0x00, 0x00, 0xFB, 0x00, 0x00, // 曲数据以16位为一段,每段前2位表示延时时间,后14位表示频率(占空比50%) 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x00, 0x00, 0xFB, 0x00, 0x00, 0x01, 0x0002, 0x0000}; // 最后一段的延时设为1表示播放结束 void delay(unsigned int ms) // 延时函数 { unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } void beep(unsigned int freq) // 发出指定频率的单音 { unsigned int delay = 500000 / freq; while(delay--) { buzzer = 1; _nop_(); buzzer = 0; _nop_(); } } void play_music() // 播放音乐函数 { unsigned char i = 0; while(1) { if (music[i] == 0x00 && music[i+1] == 0x00) // 播放结束,退出函数 break; delay(music[i++]); // 延时一段时间 beep(music[i++] + (music[i++] << 8)); // 播放一段音符 } } void main() { while(1) { if (key == 0) // 按键按下,开始/暂停播放 { delay(10); // 消抖 if (key == 0) // 再次确认按键按下 { while(key == 0); // 等待按键释放 play_music(); // 开始/暂停播放 } } } } ``` 基本思路是将音乐数据存储在一个数组中,每个元素代表一段音符,通过延时函数和发出单音函数实现播放音乐的功能。按键的检测和播放的开关通过判断标志位和延时函数实现。该示例程序只演示了播放的基本功能,需要根据实际需要进行修和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值