电子琴课程设计报告电子版(微机) .doc
自动化专业课程设计报告微机原理及应用课程设计 题目:计算机仿真电子琴班 级 姓 名 学 号 时 间 2011/12/192011/12/23 地 点 电信实验中心第六实验室 指 导 教 师 大 连 水 产 学 院 信 息 工 程 学 院 自 动 化 教 研 室题目:计算机仿真电子琴. 一、课程设计的目的与要求1、教学目的本课程的课程设计是自动化专业学生学习完微机原理及应用课程后,进行的一次以汇编语言为主,硬件设计为辅的综合训练。本课程设计的其目的在于加深对微机原理基本知识的理解,掌握汇编语言程序设计的基本方法;掌握运用微机原理开发系统的基本方法。2、 教学要求从课程设计的目的出发,通过设计工作的各个环节,达到以下要求:1) 掌握汇编语言程序设计的基本方法。2) 进一步理解各种接口电路的应用。例如8255并行接口,8253定时器等。3) 掌握利用PC机扬声器发出不同频率声音的方法。二、课程设计课题的分析1、主要技术指标编写程序(1)在程序运行时使PC即成为一架可弹奏的电子琴。当按下数字健1-8时,依次发出1,2,3,4,5,6,7,I这8个音调。自行设计按下某一键则退出电子琴状态。(2)在程序运行时使PC自动演奏一首乐曲。2、设计思路通过编程,建立一个DOS界面,建立简单的菜单选项,可是实现电子琴的基本弹奏功能。可以通过按键“1、3、4、5、6、7”实现音调的低音输入,按键“Q、W、E、R、T、Y、U”实现对音调的中音输入,按键“A、S、D、F、G、H、J”实现音调的高音输入,可以按“ESC”或“ENTER”键退出、“P”进入播放音乐模式,有两个音乐可以选择,1是水手,2是新年好。3、硬件参数及硬件接线电路图(1)地址和初值8255口地址:PA口=60HPB口=61HPC口=62H控制口=63H8253口地址:计数器0=40H计数器1=41H计数器2=42H控制寄存器=43H8253初值:600Hz声音,1.19MHz/600=1983(2)接线电路图PC机扬声器电路以及相关接口电路:(如图1)图1 接线电路图4、作原理PC中的定时电路有三个通道,通道3用于发声,通道1用于控制系统内部的时钟。通道1的工作方式和通道3一样,但是系统启动时设定其发出一个频率固定为18.2Hz的信号,这个信号直接送到系统中的"中断控制器"。每一个"Hz"都产生一个硬件中断,一般称这个硬中断为"IRQ0",对应的中断号是08H。在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。由于PC计算机的时钟晶振为1.MHz,根据频率的公式:f=1/T 则频率周期为T=1/f 定时器的计数器为16位计数器,则最大的计数值为65536,那么其定时时间为:t=65536*T=65536/f=0.(秒) 即:PC定时器每秒可中断18.2065次。5、程序流程图(见图2)开 始显示缓存区,变量初始化扫描键盘调用发音子程序是否Esc或Enter是否是P键是否是Q键返回DOSN播放音乐菜单播放音乐程序键盘扫描是否Enter键停止是否Esc或Enter返回DOSYYNYNYNYN图2 程序流程图三、课程设计的结果程序开始,显示提示信息,对缓存区初始化。按键扫描,接着调用发音子程序在把AL送缓存区,发出与按键相对应频率的声音,从而实现计算机仿真电子琴的功能。并不停地对Esc键、Enter键、P键扫描,当Esc键或Enter键按下时,就退出程序。当按下P时,显示播放音乐目录。当按下数字选择键时,播放程序中预设的曲目,中途可以通过Enter键,终止音乐播放。当检测到Q时,退出到计算机仿真电子琴演奏状态。1、程序代码:STACKSEGMENTSTACK DW 64 DUP(?)STACKENDSDATASEGMENTASSUME DS:DATA STR_1 DB 0DH,0AH,'<<-WELCOME YOU TO USING->> $' STR_2 DB 0DH,0AH,' Author:SunFh Date:2011/12/20 $'STR_3 DB 0DH,0AH,'This is an electric piano!$'STR_4 DB 0DH,0AH,'LOW:1-2-3-4-5-6-7$'STR_5 DB 0DH,0AH,'MID:Q-W-E-R-T-Y-U$'STR_6 DB 0DH,0AH,'HIG:A-S-D-F-G-H-J$'STR_7 DB 0DH,0AH,'You can press play it that likes a piano.' DB 0DH,0AH,'And you can press ''ESC'' or ''ENTER'' to EXIT.$'STR_8 DB 0DH,0AH,'What''s more,' DB 0DH,0AH,' you can press ''P'' to play some musics!$'STR_9 DB 0DH,0AH,'Please selectT the music (Press ''Q'' to exit this MENU):$'STR_10 DB 0DH,0AH,'1. Shui Shou$'STR_11 DB 0DH,0AH,'2. Xin Nian Hao' DB 0DH,0AH,'You can press "ENTER" to stop play.$'STR_12 DB 0DH,0AH,'INPUT ERROR!$'STR_13 DB 0DH,0AH,'Please input again!$'STR_21 DB 0DH,0AH,' $'NOTE_TDW 262,294,330,349,392,440,494DW 523,587,659,698,784,880,988DW 1046,1175,1318,1397,1568,1760,1975 DW 0 KEY_T DB '1','2','3','4','5','6','7' DB 'q','w','e','r','t','y','u' DB 'a','s','d','f','g','h','j' DB '0'MUSIC_N1 DB '6','e','w','e','w','e','r','t','r','w','e','0','r' DB 'r','r','r','w','q','w','e','w','w','e','q','7','6','q','7'DB '6','e','w','e','w','e','r','r','r','e','w','e'DB 'r','e','w','q','w','q','w','e','7','7','6','5','6','6'DB 'w','w','w','w','r','r','e','w','w','w','e','w','q','w','q','6',0MUSIC_D1 DB 8,4,4,8,4,4,6,2,4,4,4,6,2DB 4,2,2,4,4,4,2,2,4,4,4,4,4,4,16DB 8,4,4,8,4,4,4,2,2,4,4,16DB 6,2,4,4,6,2,4,4,4,4,4,2,2,16DB 6,2,4,4,4,2,2,4,2,2,4,4,4,2,2,16MUSIC_N2 DB '1','1','1','t','3','3','3','1','1','3','5','5','4','3','2','2','3' DB '4','4','3','2','3','1','1','3','2','t','u','2','1',0MUSIC_D2 DB 4,4,8,8,4,4,8,8,4,4,8,8,4,4,16,4,4DB 8,8,4,4,8,8,4,4,8,8,4,4,32JIEPAI DB ? SPEED DB 2JIANGE DB 1DATAENDSCODESEGMENT ASSUME CS:CODE SHOWMACROSTRLEADX,STR MOVAH,09H INT21HENDM MAINPROCFAR MOVAX,DATA MOVDS,AX SHOW STR_21SHOW STR_1 SHOW STR_2SHOW STR_3SHOW STR_4SHOW STR_5SHOW STR_6SHOW STR_7SHOW STR_8SHOW STR_21MOV BX,0 KEY_SCAN:MOV AL,6MOV JIEPAI,AL MOV BX,0000H MOV AH, 00H INT 16HCMP AL, 0DHJZ EXITCMP AL, 1BHJZ EXITCMP AL, 'p'JZ PLAYLOOKUP:CMP KEY_TBX,AL JE NEXTINC BXJMP LOOKUPNEXT:SHL BX,1MOV CX,NOTE_TBXCALL BEEP JMP KEY_SCAN EXIT:MOV AH,4CHINT 21HERROR:SHOW STR_12SHOW STR_13JMP PLAYPLAY:SHOW STR_21SHOW STR_9SHOW STR_10SHOW STR_11INPUT:MOV AH, 00HINT 16HCMP AL, 'q'JZ STARTCMP AL, 0DH JZ EXITCMP AL, 1BH JZ EXIT CMP AL, '1'JZ NEXT6CMP AL, '2'JZ NEXT7 CALL ERROR JMP INPUT NEXT6:CALL PLAY_M1NEXT7:CALL PLAY_M2START:CALL MAINSTOP:PUSH AXMOV AH,00HINT 16HCMP AL,0DHJZ PLAYRETPLAY_M1PROC NEARNEXT5:MOV BX,0NEXT3:MOV AL,MUSIC_N1BX PUSH AXMOVAL,MUSIC_D1BX MOV JIEPAI,ALPOP AXPUSH AXMOV AH,11INT 21HCMP AL,0FFHJZ STOPPOP AXCMP AL, 0JE INPUTPUSH BX MOV BX,0LOOK1:CMP KEY_TBX,ALJE NEXT1INC BXAND BX,0FFHJMP LOOK1 NEXT1:SHL BX,1 MOV CX,NOTE_TBX CMP CX,0JE NEXT4CALL BEEP CALL PAUSE POP BXINC BXJMP NEXT3NEXT4:CALL NOBEEPCALL PAUSEPOP BXINC BXJMP NEXT3PLAY_M1 ENDPIN:JMP INPUTPLAY_M2 PROC NEARNEX5:MOV BX,0NEX3:MOV AL,MUSIC_N2BXPUSH AX MOV AL,MUSIC_D2BX MOV JIEPAI,AL POP AXPUSH AXMOV AH,11INT 21HCMP AL,0FFHJZ STOPPOP AXCMP AL, 0 JE INPUSH BX MOV BX,0LOO1:CMP KEY_TBX,ALJE NEX1INC BXAND BX,0FFHJMP LOO1 NEX1:SHL BX,1MOV CX,NOTE_TBX CMP CX,0JE NEX4CALL BEEP CALL PAUSEPOP BXINC BXJMP NEX3NEX4:CALL NOBEEPCALL PAUSE POP BXINC BXJMP NEX3PLAY_M2ENDPMAIN ENDPBEEP PROC NEARMOV DX,0012HMOV AX,34DCHDIV CXOUT 42H,AL MOV AL,AHOUT 42H,AL CALL SPK_ON MOV AH,00H INT 1AHMOV AL,JIEPAIADD AL,SPEEDCBW ADDAX,DX MOV BX,AXDELAY1:MOV AH,00HINT 1AH CMP BX,DXJNZ DELAY1 CALL SPK_OFFRETBEEP ENDPNOBEEP PROC NEARCALL SPK_OFF MOV AH,00H INT 1AHMOV AL,JIEPAIADD AL,SPEEDCBWADD AX,DX MOV BX,AXDELAY2:MOV AH,00HINT 1AH CMP BX,DXJNZ DELAY2RETNOBEEP ENDPPAUSE PROC NEARCALL SPK_OFF MOV AH,00HINT 1AHMOV AL,JIANGECBWADD AX,DX MOV BX,AXDELAY3:MOV AH,00HINT 1AHCMP BX,DXJNZ DELAY3 RETPAUSE ENDPSPK_ON PROC NEARPUSH AXIN AL,61H OR AL,03H OUT 61H,AL POP AXRETSPK_ON ENDPSPK_OFF PROC NEARPUSH AX IN AL,61HAND AL,0FCH OUT 61H,AL POP AX RETSPK_OFF ENDPCODE ENDSEND MAIN 2、实验现象(1)程序正常运行,如图3图3 程序正常运行(2)音乐播放菜单(按P键),如图4图4 音乐播放菜单(3)输入错误按键,显示错误,键盘重新输入,如图5图5 输入错误按键(4)音乐播放终止,可以重新选择播放音乐或者返回,如图6图6 音乐终止画面(5)返回主菜单界面(按Q键),如图7图7 返回主菜单界面四、课程设计的心得与体会一个星期的课程设计,让我尝试了失败的打击,和成功的喜悦。虽然自己查阅了很多资料,但是发信自己对知识的掌握还是不够扎实,不过自己在课程设计过程中,也学到了不少扩展的知识。在程序汇编时候,会遇到很多问题,自己的英文不是很好,有些错误都看不明白,但是跟同学讨论学习之后,修改程序,改正错误。让我意识到,合作是很有必要的,每个人理解的擅长的地方都不同,通过交流也会取长补短。五、参考文献1 王忠民,微型计算机原理,西安:西安电子科技大学出版社,2007年2 赵燕,何南,微机原理与应用实验指导书,大连海洋大学,2008年3 仇玉章,冯一兵,微计算机技术实验与辅导,北京:清华大学出版社,2006年4 朱定华,微机原理、汇编与接口技术实验教程,北京:清华大学出版社,2007年