保存桌面快捷方式 - - 设为首页 - 手机版
凹丫丫旗下网站:四字成语大全 - 故事大全 - 范文大全
您现在的位置: 范文大全 >> 理工论文 >> 电子通信论文 >> 正文

MIDI信号的解码及实时音符显示


0多个。因此,选用了16位数码管(128位LED)及64键键盘接口芯片BC7281,该芯片可以驱动128个独立的LED,同时还可以提供键盘管理,笔者设计的系统中16个按键,完全可以满足要求。而其本身仅为18脚DIP封装,体积小巧。


    该芯片与MCU之间采用串行通信,只需要3根引线,为简单起见,这里只给出本系统中键盘、显示部分的电路框图如图3。

BC7281中有16位显示寄存器,其每一数据位都对应着显示矩阵中的一个LED,每个数据位都有一个位地址,用以做寻址,样每一个LED的开关都可以单独控制,其地址范围是07FH。将地址0~52H的LED作为音符显示用,69H~7FH的地址作为系统状态指示用,共余LED显示不用。

3 程序设计

因为MIDI数据的传送速率较高,因此,决定采用中断的方式来处理MIDI数据。对于显示部分,则在数据区中设立一个特定的缓冲区,处理MIDI数据的中断程序只负责对缓冲区内的数据进行更新,而不直接完成对显示芯片的操作,这样可以提高中断处理速度。显示的刷新,则放在程序的主循环中来完成。

用于处理MIDI数据的串口中断程序,必须完成以下工作:

(1)根据状态字节,过滤掉不必要的数据;

(2)根据保留下的“音符开”和“音符关”数据,更新显示数据缓冲区。

    因为设计要求所有旋律通道的音符都要显示出来,也就是说,除第10通道外,每个通道的音符都要显示出来。这样就存在着音符重叠的问题,比如第一通道中的C音和第二通道中的C音同时演奏,这时如果单片机收到一个“音符关”指令,则必须判断其它通道中有没有相同的音符处在“开”的状态,如果有,则相应的音符指示灯就不能关闭。为了到达这个目的,将音符显示的缓冲区设置为一个128单元的数组,数组单元和MIDI的128个音符一一对应(虽然只需要显示其中的8个音符),但是为了简化程序及日后升级的方便,仍将数组设为128单元,只在主程序中显示刷新的部分才将多余的数据忽略),每当收到一个“音符开”指令时,相应的数组单元就加一,而收到“音符关”指令时,则减一,在显示时,只要数组单元不等于零,对应的音符指示LED就点亮,而只有在数组单元等于零时,才将已经点亮的LED关闭,“音符关”指令不直接控制LED,这样就很好地解决了省符重叠的问题。

AT89C51串口中断处理程序流程图如图4。

目前该产品已经批量生产,并已成功进入市场销售一年有余,实践证明该设计方案是合理和可靠的。

《MIDI信号的解码及实时音符显示(第2页)》
本文链接地址:http://www.oyaya.net/fanwen/view/153134.html

★温馨提示:你可以返回到 电子通信论文 也可以利用本站页顶的站内搜索功能查找你想要的文章。