电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

用通用单片机实现MIDI键盘2

用通用单片机实现MIDI键盘2_第1页
1/8
用通用单片机实现MIDI键盘2_第2页
2/8
用通用单片机实现MIDI键盘2_第3页
3/8
5.2 如何用单片机实现MIDI 键盘功能 用51 系列单片机实现MIDI 键盘功能,实际上就是要解决3 个方面的问提,那就是: 如何产生符合MIDI 协议的串行通讯数据,如何扫描键盘和实现力度响应,如何适当的进行电器连接,本节将介绍前两个问题, 最后一个问题将放在下一节介绍。 5.2.1 如何产生符合MIDI 协议的串行信号 绝大多数51系列单片机都有串行通讯控制器(UART),配合合适的晶振,正确地设置 UART 的工作参数,就能够自动产生所需的串行数据。 在51单片机做串行通讯时,可以用定时/计数器1(T/C1)作为波特率发生器。将串行口设置为方式1工作状态(10位异步收发,波特率由定时器控制),使用6MHz 晶振,T/C1 设为自动装入8位计数器状态(TMOD 置为 2xH),SMOD=1,TH=FFH,此时正好发生波特率为 31.25K 的串行通讯数据,适用于 MIDI 协议。 串口及定时/计数器初始化如下:(C 语言例程,下同) void format(); { TMOD=0x21; //T/C1 工作于8位自动装入状态// TL1=0xff; TH1=0xff ; // T/C1 常数,确定波特率// SCON=0x50 ; //设串口工作于方式1,// PCON=0x80 ; //相当于 SMOD=1;// TR1=1; //T/C1 开始计数// } 由 51 系列单片机UART 的工作方式可推知, 当外部晶振的频率为 6MHz 的倍数时,正确地设置特殊功能寄存器,可以精确的发生31.25K 的波特率,见表 5-3: 表 5-3 用不同的晶振频率产生波特率 31.25K 的寄存器值 晶振频率 TMOD SCON PCON TL1 TH1 6MHz 0x21 0x50 0x80 0xFF 0xFF 12MHz 0x21 0x50 0x80 0xFE 0xFE 0x00 0xFF 0xFF 24MHz 0x21 0x50 0x80 0xFD 0xFD 0x00 0xFE 0xFE 上一节已经介绍了 MIDI 命令的格式,发送一个音符的开关命令,可调用如下函数: void send(uchar cc,kk,vv) { TR1=1; //开计数器// SBUF=cc; //发送 cc// while(TI==0); //等待发送结束// TI=0; //清发送标志// SBUF=kk; while(TI==0); TI=0; SBUF=vv; while(TI==0); TI=0; TR1=0; } 参数 cc,kk,vv 的含义已在 MIDI 协议中介绍,不再重复。 对于 1 字节和 2 字节命令,只需将上述函数简化即可,由于在演奏中主要执行的都是3 字节命令,为提高运行速度,不在发送函数中判断命令长度,因为那样做的话固然可以减少一两个函数,但让单片机过多执行不必要的代码,得不偿失。 5.2.2 键盘扫描 电子乐器的键盘...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

用通用单片机实现MIDI键盘2

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部