当前位置:文档之家› 音乐彩灯的设计与实现

音乐彩灯的设计与实现

文档从网络中收集,已重新整理排版.word版本可编辑.欢迎下载支持.课程设计音乐彩灯的设计与实现————班级:计101-2姓名:学号:指导老师:刘霄一、设计内容1、利用开发箱中的8255以及8254芯片完成功能。

2、设计能够根据程序所给出的乐符(以转化为代码)让开发箱上的蜂鸣器和主机的主板上的pc喇叭发音。

3、通过按键选择不同的歌曲。

4、能够使开发箱中的LED数码管根据乐符的不同按一定规律变化。

二、设计要求⑴、设计内容设计并实现随音乐伴奏而按某种规律显示的彩灯。

⑵、设计要求①.利用PC机内部和机箱上的8253分别控制扬声器发声,演唱3首歌曲。

②.使发光二极管分别按按音调,节拍的规律发光。

(通过实验箱上的8255A驱动二极管发光。

)③.通过按键分别进行PC上的歌曲的选择。

④.能够通过键盘切换PC机内部和实验平台发声。

三、实验流程图四、硬件连线图ISAXD7 D7 PA0XD6 D6 PA1XD5 D5XD4 D4XD3 D3 PA6XD2 D2 PA7XD1 D1XD0 D0 PB0XA1 A1 PB1XA0 A0XIOW WRXIOR RD PB6IOY3 CS PB7五、实验结果运行程序之后出现选择菜单“'SOUND OF MUSIC', ‘SLECT MODE : A. PC SOUND B. EXPC SOUND',”选择A主机的主版pc喇叭发音,并且开发箱上的LED数码管按规律开始显示。

选择B则开发箱上的蜂鸣器发音,并且开发箱上的LED数码管按规律开始显示,选择A或B以后会提示选择1,2,3哪首歌,选择以后就会听到歌曲响起。

按其他键后程序结束退出。

六、实验心得通过本次实验设计。

知道了驱动主版pc喇叭发音的过程,对8255以及8254芯片的工作原理以及其具体工作过程有了进一步了解,对中断程序有了进步认识,另外很多东西是以前在实验中没有接触过,所以开始下手有点难,对一些程序不太了解,通过本次综合实验,锻炼了自己的动手能力以及解决错误的能力,感觉到实践要高于理论的难度。

在实验中得到老师的大力指导和帮助,非常感谢!七、实验代码PC8254_COUNT0 EQU 40HPC8254_COUNT1 EQU 41HPC8254_COUNT2 EQU 42H8255D0 LED0D1D6D7 LED7开关LED单元K0K1K6K7PC8254_MODE EQU 43HMY8255_A EQU 0E460H 、、是8位的锁存器MY8255_B EQU 0E461HMY8255_C EQU 0E462HMY8255_MODE EQU 0E463HMY8254_COUNT0 EQU 0E440HMY8254_MODE EQU 0E443HDA TA SEGMENTBAK DB ?BAKTABA DW ?BAKTABB DW ?SONGMSG DB 'select a song',0AH,0DH,'1.song1 2.song2 3.song3',0AH,0DH,'$' ;提示信息SONGMSG1 DB 0AH,0DH,'song1 is singing...',0AH,0DH,'$'SONGMSG2 DB 0AH,0DH,'song2 is singing...',0AH,0DH,'$'SONGMSG3 DB 0AH,0DH,'song3 is singing...',0AH,0DH,'$'AMSG DB 0AH,0DH,0AH,0DH,'NOW MODE A',0AH,0DH,'$'BMSG DB 0AH,0DH,0AH,0DH,'NOW MODE B',0AH,0DH,'$'MESSAGE DB 'SOUND OF MUSIC',0AH,0DH,'SELECT MODE : A. PC SOUND B. EXPC SOUND',0AH,0DH,'$'ERROR DB 'INPUT ERROR, PLEASE INPUT A OR B:',0AH,0DH,'$' ;错误提示SONGERR DB 'INPUT ERROR, PLEASE INPUT1 OR 2 OR 3:',0AH,0DH,'$'DTABLE1 ;音乐1DB 82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04HDB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04HDB 82H,01H,81H,94H,84H,0B4H,0A4H,04H,82H,01H,81H,94H,84H,0C4H,0B4H,04HDB82H,01H,81H,0F4H,0D4H,0B4H,0A4H,94H,0E2H,01H,0E1H,0D4H,0B4H,0C4H,0B4H,04H,00H DTABLE2 DB 64H, 81H, 51H, 42H, 64H, 62H, 51H, 41H ;音乐2DB 52H, 62H, 52H, 42H, 24H, 22H, 21H, 41HDB 62H, 52H, 42H, 52H, 62H, 52H, 42H, 01H, 21HDB 14H, 08H, 12H, 22HDB 44H, 04H, 02H, 11H, 21H, 41H ,21H, 41H, 41H, 51HDB 62H, 52H, 42H, 23H, 41H, 44H ,12H, 42HDB 64H, 04H, 04H, 51H, 61H, 52HDB 42H, 21H, 41H, 44H, 04H, 21H ,21H, 62HDB 54H, 04H, 02H, 42H, 42H, 22HDB 54H, 04H, 04H, 12H, 42HDB 64H, 04H, 04H, 81H, 61H, 61H, 51H, 41HDB 52H, 01H, 41H, 44H, 04H, 22H, 62HDB 62H, 52H, 54H, 02H, 41H, 41H, 42H, 22HDB 22H, 42H, 44H, 04H, 42H, 42HDB 24H, 02H, 21H, 11H, 22H, 12H, 12H ,62H, 42HDB 42H, 22H, 24H, 04H, 21H, 41H, 62HDB 54H, 52H, 02H, 52H, 22H, 52H, 22HDB 14H, 14H, 04H, 12H, 42HDB 62H, 62H, 52H, 41H, 81H, 82H, 62H, 62H, 21H, 41HDB 62H, 01H, 51H, 54H, 02H, 41H, 41H, 42H, 22HDB 44H, 04H, 04H, 04HDB 04H, 04H, 04H, 12H, 22HDB 00HDTABLE3 DB 33H, 33H, 33H, 33H, 33H, 4DH, 45H, 3DH, 3DH, 3DH, 45H, 4DH, 45H ;音乐3 DB 45H, 45H, 45H, 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26HDB 26H, 28H, 2DH, 2DH, 26H, 26H, 33H, 33H, 33H, 33H, 45H, 3DH, 39HDB 39H, 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 2DH, 2DHDB 26H, 26H, 26H, 26H, 26H, 26H, 28H, 28H, 2DH, 28H, 26H, 26H, 26HDB 26H, 2DH, 28H, 26H, 2DH, 2DH, 33H, 3DH, 4DH, 45H, 45H, 45H, 45HDB 45H, 45H, 45H, 45H, 33H, 33H, 3DH, 33H, 26H, 26H, 26H, 28H, 2DHDB 2DH, 26H, 2DH, 33H, 33H, 33H, 33H, 33H, 33H, 45H, 3DH, 39H, 39HDB 39H, 52H, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 4DH, 00HDA TA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSAGEMOV AH,09HINT 21HGET_KEY:MOV AH,7INT 21HCMP AL,61H ;模式选择JE ACMP AL,62hJE B0MOV DX,OFFSET ERROR ;显示错误提示MOV AH,09HINT 21HJNE GET_KEYB0: JMP BA: IN AL,61H ;保护PC机内8255_b信息MOV BAK,ALMOV DX,OFFSET AMSGMOV AH,09HINT 21HMOV DX,OFFSET SONGMSG ;从乐谱中取音符MOV AH,09HINT 21HMOV AH,07hINT 21HCMP AL,31hJE S1JE S2CMP AL,33hJE S3MOV DX,OFFSET SONGERRMOV AH,09HINT 21HJNE AS1: MOV DX,OFFSET SONGMSG1MOV AH,09HINT 21HMOV BX,OFFSET DTABLE1MOV BAKTABA,BXJMP GDS2: MOV DX,OFFSET SONGMSG2MOV AH,09HINT 21HMOV BX,OFFSET DTABLE2MOV BAKTABA,BXJMP GDS3: MOV DX,OFFSET SONGMSG3MOV AH,09HINT 21HMOV BX,OFFSET DTABLE3MOV BAKTABA,BXGD: MOV AL,[BX]MOV AH,00HA1: MOV DL,20H ;调整频率MUL DLPUSH AXPUSH AXMOV DX,MY8255_MODE ;送外部8255控制字MOV AL,80HOUT DX,ALPOP AXMOV DX,MY8255_AOUT DX,AL ;从A口输出音符到LEDMOV DX,MY8255_BMOV AL,AHOUT DX,AL ;从B口输出音符到LEDMOV AL,0B6H ;初始化PC机内8254控制字MOV DX,PC8254_MODEOUT DX,ALPOP AXMOV DX,PC8254_COUNT2 ;送PC机内8254计数器2计数初值MOV AL,AHOUT DX,ALMOV AL,BAK ;驱动扬声器发声OR AL,03HOUT 61H,ALINC BX ;取下一个音符MOV AH,00HMOV AL,[BX]TEST AL,0FFH ;判断乐谱是否结束JZ A2PUSH AXCALL DALL YCALL BREAKPOP AXJMP A1A2: MOV BX,BAKTABA ;重新从乐谱中取音符MOV AL,[BX]MOV AH,00HJMP A1DALL Y: MOV CX,77FFH ;延迟控制音符的节拍D1: MOV AX,3C00HD2: DEC AXJNZ D2LOOP D1BREAK PROC NEARMOV AH,06HMOV DL,0FFHINT 21HJE RETURNPUSH AXAND AL,0FDH ;停止扬声器发声OUT 61H,ALMOV AL,AH ;恢复PC内8255PPIMOV AL,BAKOUT 61H,ALPOP AXCMP AL,31h ;模式切换JE SCMP AL,32hJE MCMP AL,33hJE ZCMP AL,61hJE A2AJE A2BMOV AX,4C00H ;返回DOSINT 21HS:JMP S1M:JMP S2Z:JMP S3A2A:JMP AA2B:JMP BRETURN:RETBREAK ENDPB: MOV DX,OFFSET BMSG ;从乐谱中取音符MOV AH,09HINT 21HMOV DX,OFFSET SONGMSGMOV AH,09HINT 21HMOV AH,7INT 21HCMP AL,31hJE SONG1CMP AL,32hJE SONG2CMP AL,33hJE SONG3MOV DX,OFFSET ERRORMOV AH,09HINT 21HJNE BSONG1: MOV DX,OFFSET SONGMSG1MOV AH,09HINT 21HMOV BX,OFFSET DTABLE1MOV BAKTABB,BXJMP GETDA TASONG2: MOV DX,OFFSET SONGMSG2MOV AH,09HINT 21HMOV BX,OFFSET DTABLE2MOV BAKTABB,BXJMP GETDA TASONG3: MOV DX,OFFSET SONGMSG3MOV AH,09HINT 21HMOV BX,OFFSET DTABLE3MOV BAKTABB,BXGETDATA :MOV AL,[BX]MOV AH,00HB1: MOV DL,20H ;调整频率MUL DLPUSH AXPUSH AXMOV DX,MY8255_MODE ;送外部8255控制字MOV AL,80HOUT DX,ALPOP AXMOV DX,MY8255_AOUT DX,AL ;从A口输出音符到LEDMOV DX,MY8255_BMOV AL,AHOUT DX,AL ;从B口输出音符到LEDMOV AL,36H ;初始化外部8254控制字MOV DX,MY8254_MODEOUT DX,ALPOP AXMOV DX,MY8254_COUNT0 ;送外部8254计数器0计数值OUT DX,ALMOV AL,AHOUT DX,ALINC BX ;取下一个音符MOV AH,00HMOV AL,[BX]TEST AL,0FFH ;乐谱是否结束JZ B2PUSH AXCALL BDALL YCALL BBREAKPOP AXJMP B1B2: MOV BX,OFFSET BAKTABB ;重新从乐谱中取音符MOV AL,[BX]MOV AH,00HJMP B1BDALL Y: MOV CX,77FFH ;延迟控制音符的节拍BD1: MOV AX,1C00HBD2: DEC AXJNZ BD2LOOP BD1BBREAK PROC NEARMOV AH,06HMOV DL,0FFHINT 21HJE BRETURNPUSH AXMOV AL,30H ;初始化外部8254控制字 ;停止扬声器MOV DX,MY8254_MODEOUT DX,ALPOP AXCMP AL,31h ;模式切换JE SB1CMP AL,32hJE SB2CMP AL,33hJE SB3CMP AL,61hJE B2ACMP AL,62hJE B2BMOV AX,4C00H ;返回DOSINT 21HSB1:JMP SONG1SB2:JMP SONG2SB3:JMP SONG3B2A:JMP AB2B:JMP BBRETURN:RETBBREAK ENDPA0: JMP ACODE ENDSEND START。

相关主题