摘要:介绍了midi数据的格式,讨论了一种使用at89c51系列单片机完成midi信号的实时解码,从中提高音符数据,并随时利用专用led驱动芯片将音符显示出来的设计方案。该方案经实际产品应用,证明合理可靠。
关键词:midi 串行接口 led显示
因为设计要求所有旋律通道的音符都要显示出来,也就是说,除第10通道外,每个通道的音符都要显示出来。这样就存在着音符重叠的问题,比如第一通道中的c音和第二通道中的c音同时演奏,这时如果单片机收到一个“音符关”指令,则必须判断其它通道中有没有相同的音符处在“开”的状态,如果有,则相应的音符指示灯就不能关闭。为了到达这个目的,将音符显示的缓冲区设置为一个128单元的数组,数组单元和midi的128个音符一一对应(虽然只需要显示其中的8个音符),但是为了简化程序及日后升级的方便,仍将数组设为128单元,只在主程序中显示刷新的部分才将多余的数据忽略),每当收到一个“音符开”指令时,相应的数组单元就加一,而收到“音符关”指令时,则减一,在显示时,只要数组单元不等于零,对应的音符指示led就点亮,而只有在数组单元等于零时,才将已经点亮的led关闭,“音符关”指令不直接控制led,这样就很好地解决了省符重叠的问题。