项目九电子琴程序的设计一、设计内容与要求编写一实现电子琴的程序,并实现若干扩展功能。基本功能:用8257键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;扩展功能:1.录音:记录所弹奏曲目2.放录音:任意时刻重放最新记录曲目3.在程序中可预设一曲目,按一键实现播放该曲目。4.在播放录制曲目或预设曲目时,按8279键盘上任意键可以暂停播放,再按一次从暂停处继续播放。5.程序运行时有友好的用户介面二、硬件电路框图1.设计原理(1)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A,即可在其输出端得到一定的电压输出。给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。各音阶标称频率值:(2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:发1频率为261。1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/32=0.12ms.定时时间可以由8253配合8255来实现。按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。2.硬件电路连接2三、软件设计1.主程序流程图开始显示缓存区,初始化8279初始化调用发音子程序调用键盘子程序键盘码送缓存区是否9键是否0键是否S键是否R键录音子程序放录音子程序放歌子程序返回DOSYNNNYYYN342.键盘显示子程序流程图53.显示子程序流程图4.部分参考程序KEYBORDPROCNEAR;键盘子程序MOVDX,PORT1MOVAL,0D1HOUTDX,AL;CLEARDISPLAYWREP:CALLDISPMOVDX,PORT1INAL,DX;读状态ANDAL,07H;判断是否有按键JZWREPKEYN:MOVDX,PORT0;下一次的按键INAL,DX;读数据MOVBL,AL6ANDAL,07HANDBL,38HMOVCL,03SHRBL,CLCMPBL,00HJNZLINE1ADDAL,08HJMPQUIT1LINE1:CMPBL,01HJNZLINE2JMPQUIT1LINE2:ADDAL,10HQUIT1:RETKEYBORDENDPDISPPROCNEAR;显示子程序PUSHSIPUSHCXPUSHDXMOVAX,DATAMOVDS,AXMOVDX,PORT1MOVAL,90HOUTDX,AL;写地址为0000的显示缓存区命令,每次写入后地址自动加1指向下一次写入地址MOVSI,OFFSETSEC1MOVCX,0001MOVBX,OFFSETLEDDISP1:CLDLODSBMOVAH,ALXLAT;键盘码转显示码MOVDX,PORT0OUTDX,AL;显示LOOPDISP1POPDXPOPCXPOPSIQ:RETDISPENDP