|
||||||||||||||||||
|
||||||||||||||||||
|
摘要:介绍了MIDI数据的格式,讨论了一种使用AT89C51系列单片机完成MIDI信号的实时解码,从中提高音符数据,并随时利用专用LED驱动芯片将音符显示出来的设计方案。该方案经实际产品应用,证明合理可靠。 关键词:MIDI 串行接口 LED显示 MIDI是音乐设备数字接口的简答,是各种电子音乐设备之间数据传输的标准接口,广泛应用于各种电子乐器上,目前较高档的电子琴子均带有MIDI接口。笔者在开发用于音乐教学的产品“音乐电教板”的过程中,遇到了有关MIDI信号解码的问题,产品要求能够接受电子琴传送来的MIDI信号,并将相应的音符显示出来。经过对MIDI协议的研究,用AT89C51单片机和128段LED显示控制芯片BC7281构成的系统完成了设计要求。 1 MIDI信号简介及与单片机的接口 MIDI信号的传输采用异步串行方式, 其中,aa是音符数据,表明所演奏的音符,其范围为0~7fH,这样共有128个音符,足以覆盖整个音域;bb是速度数据,表明击键的速度,又称力度数据,其范围也是0~7fH。 8nH——“音符关”指令,在多数MIDM设备中,该指令中的速度数据bb被忽略。9nH——“音符开”指令,如果速度数据等于0,则等同于8nH指令。在本机中,因为只需要显示音符的开关,而不必考虑其声音的大小,故速度数据被忽略(速度数据不等于0时)。MIDI中有一个特殊的通道即通道10,通道10是节奏乐器的专用通道,与其它通道不同,其它通道中不同的音符表示不同的音高,而在通道1中,不同音符表示不同的节奏乐器,因为节奏乐器是没有音高的,一般如各种鼓等,在本机中,所要显示的是各种旋律的音符,因此,通道10的数据要过滤掉。 2 显示电路 音符的显示,通过一个钢琴键盘的面板,在键盘的每个键上,都有一个LED指示灯,用LED的亮和灭代表音符的开和关。一个完整的钢琴键盘,83个键,再加上系统中用于指示工作状态的指示灯等,本机需要显示LED达100多个。因此,选用了16位数码管(128位LED)及64键键盘接口芯片BC7281,该芯片可以驱动128个独立的LED,同时还可以提供键盘管理,笔者设计的系统中16个按键,完全可以满足要求。而其本身仅为18脚DIP封装,体积小巧。 BC7281中有16位显示寄存器,其每一数据位都对应着显示矩阵中的一个LED,每个数据位都有一个位地址,用以做寻址,样每一个LED的开关都可以单独控制,其地址范围是07FH。将地址0~52H的LED作为音符显示用,69H~7FH的地址作为系统状态指示用,共余LED显示不用。 3 程序设计 因为MIDI数据的传送速率较高,因此,决定采用中断的方式来处理MIDI数据。对于显示部分,则在数据区中设立一个特定的缓冲区,处理MIDI数据的中断程序只负责对缓冲区内的数据进行更新,而不直接完成对显示芯片的操作,这样可以提高中断处理速度。显示的刷新,则放在程序的主循环中来完成。用于处理MIDI数据的串口中断程序,必须完成以下工作:(1)根据状态字节,过滤掉不必要的数据; (2)根据保留下的“音符开”和“音符关”数据,更新显示数据缓冲区。 AT89C51串口中断处理程序流程图如图4。 目前该产品已经批量生产,并已成功进入市场销售一年有余,实践证明该设计方案是合理和可靠的。
|
|||||||||||||||||