当前位置:文档之家› (完整word版)电子发声实验课程设计

(完整word版)电子发声实验课程设计

微机原理课程设计课题:电子发声设计实验专业:学号:姓名:、课题名称及设计组成员、课题内容及要求课题名:电子发声设计实验1、要求:根据实验提供的音乐频率表和时间表,编写程序控制8254 ,使其输出连接到扬声器上能发出相应的乐曲。

要求至少要完成下列项目的一项( 1)可播放两首不同的乐曲( 2)根据不同的按键播放不同的音乐( 3)可改变音乐的音调( 4)可显示播放乐曲的名称2、所设计的电路实现的功能:设计中完成了实验要求中提出的要求。

设计中实现了,用按键进行随时切换两首音乐(友谊地久天长,两只老虎)和对所播放的当前音乐进行两种不同音调(中音和低音)的随时切换的控制操作,其中用总开关 K_7 进行播放开关的总控制,开关 K_0 用于音乐播放的选择,开关 K_1 用于对当前播放音乐的音调进行选择。

设计中还实现了对 16×16的 LED 管的控制运用点阵汉字输出歌名。

三、方案、系统组成框图和工作原理说明1、设计方案及原理:本设计中音乐播放控制为利用对8255 和 8254 芯片的控制操作得以实现。

音乐名的输出为利用总线对 16×16 点阵地控制来实现。

(1)本设计中 PC发声系统以 8254的计数器 0 为核心。

系统初始化时,计数器 0 工作在方式 3 的“方波发声器”方式,同过将音乐频率转换为相应的计数初值,改变计数器 0 的计数初值就可以使扬声器发出不同的频率的音响。

( 2)发生系统控制为受 8255 芯片控制,外界通过改变对 8255 芯片的 PA 口的不同输入来实现播放功能上的选择。

3)演奏但音符,为利用一个音符对应一个频率,将与一个频率对应的计数初值写入计数器 0,扬声器就发出相应的音调。

计数器初值的计算公式为: 计数初值 =1MHZ ÷输出频率, 其中 1MHZ 转换为 16 进制为 0F4240H 。

( 4)控制音符的演奏时间,是通过每一个音符规定一个“单位时间” :单位时间× N=音符的演奏时间。

其中, N 为调试参数,一首歌只有一个调试参数。

2、系统组成(电路图) :图 1. 对 8254 与系统的连接.XD0XD7.D0 D7系统 XA1A0 总 XA2A1线IOW#WRIOR#RDIOY3CS图 3. 点阵汉字的接线四、程序功能描述及程序流程(1)程序功能描述:如程序流程图所示。

程序下载链接、并运行后,开始通过对外界按键扫描,来检查应进行采取的操作,根据外界不同的输入,完成不同的程序跳转,从而实现相应的播放功能。

其中 K0、 K1 为外界电子控制单元。

分为 0 和 1,即低电平和高电平。

2)程序流程图:五、程序源代码及注释 1.在LED 单元中显示歌曲名称ROW1 EQU 0600H ;端口定义ROW2 EQU 0640HCOL1 EQU 0680HCOL2 EQU 06C0HSTACK1 SEGMENT STACKDW 256 DUP(?)STACK1 ENDS;定义为数据段INCLUDE HZDOTht.ASM ;数据字段为汉字点阵库 , 在 HZDOTht.ASM;文件中CODE SEGMENTASSUME CS:CODE, DS:DATASTART: MOV AX, DATAMOV DS, AXMOV DX, ROW1MOV AL, 00HOUT DX, ALMOV DX, ROW2OUT DX, ALMOV AL, 0ffHMOV DX, COL1OUT DX, ALMOV DX, COL2OUT DX, ALBG0: MOV AX, 160MOV SI, OFFSET HZDOThtBG1: CALL DISPADD SI, 2DEC AXJZ BG0JMP BG1显示汉字子程序; 入口参数 : SI = 存放汉字起始地址DISP: MOV CX, 000FHPUSH AXML0: PUSH CXMOV BL, 01HMOV CX, 0008HML1:MOV DX, ROW1MOV AL, 00H OUT DX,AL MOV AL, [SI] notal ;控制 0--7行MOV DX, COL1OUT DX, ALINC SIMOV AL, [SI] not al;0--7 列MOV DX, COL2OUT DX, ALINC SI;8--15 列MOV DX, ROW1MOV AL, BL OUT DX, ALROL BL, 1CALL DELAYLOOP ML1MOV DX, ROW1MOV AL, 00H OUT DX, ALMOV CX, 0008H;控制 0--7 行ML2:MOV DX, ROW2MOV AL, 00H OUT DX,ALMOV AL, [SI] not al;控制 8--15 行MOV DX, COL1 OUTDX, AL INC SIMOV AL, [SI] not al;0--7 列MOV DX, COL2OUT DX, ALINC SI;8--15 列MOV DX, ROW2 ;控制 8--15行MOV AL, BL OUT DX, AL ROL BL, 1 CALL DELAY LOOP ML2 MOV DX, ROW2 MOV AL, 00H OUT DX, AL SUB SI, 32 POP CX LOOP ML0 POP AX RETDELAY: PUSH CX;延时子程序MOV CX, 0100HDL1: PUSH AXPOP AX LOOP DL1 POP CX RETCODE ENDSEND START此程序中 8255 芯片和点阵 LED 单元的连接,用来实现在点阵 LED 显示单元来显示汉 字的功能。

通过调用汉字存放单元的地址,在 LED 单元中可以显示出流动的字体。

此程序 实现的字体是“友谊天长地久” 。

2.此程序用来实现程序流程图中所示的功能, 即通过开关来控制播放曲目的的切 换和音调的改变。

IOY3 EQU 06C0HIOY0EQU 0600HMY8255 AEQU IOY0+00HMY8255 B EQU IOY0+02H MY8255 C EQU IOY0+04H MY8255 MODE EQUIOY0+06HSTACK1 SEGMENT STACKDW 256 DUP(?)MY8254_COUNT0 MY8254_COUNT1 MY8254_COUNT2MY8254_MODE EQU IOY3+00H EQU IOY3+02H EQU IOY3+04HEQU IOY3+06H;8254 计数器 0 端口地址;8254 计数器 1 端口地址;8254 计数器 2 端口地STACK1 ENDSDATA SEGMENTFREQ_LIST DW 371,495,495,495,624,556,495,556,624 表DW 495,495,624,742,833,833,833,742,624DW 624,495,556,495,556,624,495,416,416,371DW 495,833,742,624,624,495,556,495,556,833DW 742,624,624,742,833,990,742,624,624,495DW 556,495,556,624,495,416,416,371,495,0TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 表DB 6, 2, 4, 4, 12, 1, 3, 6, 2DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4DB 6, 2, 4, 4, 6, 2, 4, 4, 12 ;第一首歌时间FREQ_LIST1 DW 330,371,416,330 歌频率表;第二首DW 330,371,416,330DW 416,441,495DW495,556,495,441,416,330 DW495,556,495,441,416,330 DW 330,248,330DW 330,248,330,0 TIME_LIST1 DB 4,4,4,4 DB4,4,4,4 DB4,4,8 DB4,4,8 DB2,2,2,2,4,4DB2,2,2,2,4,4DB 4,4,8 DB4,4,8 ;第二首歌时间表FREQ_LIST2 音后;第一首歌频率表变;第一首歌频率TIME_LIST2 歌时间表变音后;第一首FREQ_LIST3DB 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 2, 1, 3, 6, 2DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4DB 6, 2, 4, 4, 2, 4, 6, 2, 4, 4DB 6, 2, 4, 4, 6, 2, 4, 4, 12;第二首歌频率表变音后TIME_LIST3DB 4,4,4,4DB 4,4,4,4DB 4,4,8DB 4,4,8DB2,2,2,2,4,4DB2,2,2,2,4,4DB 4,4,8DB 4,4,8 ;第二首歌时间表变音后DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DA TASTART: MOV AX, DATAMOV DS, AXMOV DX, MY8255_MODE ;初始化 8254 工作方式MOV AX,90HINPUT:MOV DX,AX ;A 口作为输入MOV DX, MY8254_MODE ;初始化8254 工作方式MOV AL, 36H OUT DX, AL ;定时器0、方式 3MOV DX, MY8255_A ;检查输入,是否要设中断问题IN AL,DXCMP AL,80HJZ NEAR PTRCMP AL,81H BEGINJZ NEAR PTR BEGIN1CMP AL,82HJZ NEAR PTR BEGIN2CMP AL,83HJZ NEAR PTR BEGIN3JNZ INPUTBEGIN: MOV SI,OFFSET FREQ LIST ;装入频率表起始地址MOV DI,OFFSET TIME_LIST ;装入时间表起始地址PLAY:MOV DX,MY8255_AIN AL,DXCMP AL,80HJNZ NEAR PTR INPUTMOV DX,0FH ;输入时钟为 1MHz ,1M = 0F4240H MOV AX,4240HDIV WORD PTR [SI] ;取出频率值计算计数初值, 0F4240H / 输出频率MOV DX,MY8254_COUNT0OUT DX,AL ;装入计数初值MOV AL,AHOUT DX,ALMOV DL,[DI] ;取出演奏相对时间,调用延时子程序CALL DALL YADD SI,2INC DICMP WORD PTR [SI],0JE NEAR PTR INPUTJMP PLAY;判断是否到曲末?BEGIN1: MOV SI,OFFSET FREQ_LIST1 MOV DI,OFFSET TIME_LIST1 PLAY1:MOV DX,MY8255_AIN AL,DXCMP AL,81HJNZ NEAR PTR INPUTMOV DX,0FHMOV AX,4240H DIV WORD PTR[SI]MOV DX,MY8254_COUNT0OUT DX,ALMOV AL,AHOUT DX,ALMOV DL,[DI]CALL DALL YADD SI,2INC DI CMP WORD PTR [SI],0JE NEAR PTR INPUT JMP NEARPTR PLAY1BEGIN2: MOV SI,OFFSET FREQ_LIST2 MOV DI,OFFSET TIME_LIST2 PLAY2:MOV DX,MY8255_AIN AL,DXCMP AL,82HJNZ NEAR PTR INPUTMOV DX,0FHMOV AX,4240H DIV WORD PTR[SI]MOV DX,MY8254_COUNT0OUT DX,ALMOV AL,AHOUT DX,ALMOV DL,[DI];装入频率表起始地址;装入时间表起始地址;输入时钟为 1MHz ,1M = 0F4240H ;取出频率值计算计数初值, 0F4240H / 输出频率 ;装入计数初值;取出演奏相对时间,调用延时子程序;判断是否到曲末?;装入频率表起始地址;装入时间表起始地址;输入时钟为 1MHz ,1M = 0F4240H ;取出频率值计算计数初值, 0F4240H / 输出频率 ;装入计数初值;取出演奏相对时间,调用延时子程序;判断是否到曲末?;装入频率表起始地址 ;装入时间表起始地址;输入时钟为 1MHz ,1M = 0F4240H;取出频率值计算计数初值, 0F4240H / 输出频率 ;装入计数初值;取出演奏相对时间,调用延时子程序 ;判断是否到曲末?DALL Y PROC ;延时子程序D0: MOV CX,0010H D1: MOV AX,0F00H D2:DEC AX JNZ D2 LOOP D1 DEC DL JNZ D0 RETDALL Y ENDP DONE: MOV AX,4C00HINT 21HCODE ENDSCALL DALL Y ADD SI,2 INC DICMP WORD PTR [SI],0 JE NEAR PTR INPUT JMP PLAY2BEGIN3: MOV SI,OFFSET FREQ_LIST3MOV DI,OFFSET TIME_LIST3 PLAY3:MOV DX,MY8255_A IN AL,DX CMP AL,83HJNZ NEAR PTR INPUT MOV DX,0FHMOV AX,4240H DIV WORD PTR [SI] MOV DX,MY8254_COUNT0 OUT DX,AL MOV AL,AH OUT DX,AL MOV DL,[DI] CALL DALL Y ADD SI,2 INC DICMP WORD PTR [SI],0 JE NEAR PTR INPUT JMP PLAY3END START本程序中,分别设定了 TIME_LIST1 TIME_LIST2 TIME_LIST3 和 FREQ_LIST1 FREQ_LIST2 FREQ_LIST3 ,其中 TIME_LIST 是歌曲时间表, FREQ_LIST 是歌曲频率表。

相关主题