音乐播放器设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息与电气工程学院CDIO项目设计说明书(2013 /2014学年第一学期)
项目名称:电子信息工程一级项目
专业班级:信息(三)班
学生姓名:
学号:
指导教师:
设计成绩:
2013年12月13日
音乐播放器设计报告
1.设计
1.1设计目的
1.为了更好的学习一个系统设计,善于利用所学知识应用到实践中。
2.培养综合运用所学知识独立完成汇编程序。
3.学会分析问题,解决问题能力。
4.可以把软件设计和书本的知识详解,以及对软件设计的实践应用。
1.2设计内容
1.通过proteus来设计一个音乐播放器,利用8255A,8253和实现电路的综合连接。
2.根据电路的设计,使用汇编语言来编写音乐播放器的实现代码。然后通过按键来实现对高低电平的输入和输出,这样就可以在播放器输出音乐的功能。
2.需求分析
2.1流程图
1.本设计流程是,当需要播放歌曲时,先把程序装入电路中实现电路的控制。
2.当需要播放一首歌曲时,通过电路按键实现控制输入。
2.2发声功能原理
本项目的音乐播放器使用8086中央处理器、74LS373地址锁存器、74LS138译码器、可编程定时器/计数器8253和可编程并行接口8255A来实现。8086中央处理器输出地址/数据码AD0-AD7,将AD0-AD7输入74LS373地址锁存器输出A0-A7,再将A3-A7和A0通过74LS138译码器进行译码输出作为8253和8255A的片选信号,A1和A2作为控制8255A和8253的片内寻址信号;8255A用来控制按键的输入;8253产生不同频率的脉冲来模拟音符,通过时间的长短来模拟音长,从而设计出一个功能完整的音乐播放器。
2.3项目仿真图
3.主要设计编程过程
3.1定义过程
先定义8255A控制地址,然后定义A,B,C靠的地址,再利用根据8253A计时器特点设计计数器地址。
CORT EQU 00F6H ;8255A控制口地址
PB_A EQU 00F0H ;8255A的A口地址
PB_B EQU 00F2H ;8255A的B口地址
PB_C EQU 00F4H ;8255A的C口地址
COTR EQU 00FEH ;8253A控制口地址
P0 EQU 00F8H ;8253A的计数器0口地址
P1 EQU 00FAH ;8253A的计数器1口地址
3.1音乐发声频率装入
乐曲是按照一定的高低、长短和强弱关系组成的音调,在每一首乐曲中,每个音符的音高和音长与发声系统中的频率、节拍有关。可参考下表:
音名 C D E F G A B C D E F G A B C
唱名 1 2 3 4 5 6 7 1 2 3 4 5 6 7 i频率(HZ)131 147 165 175 196 220 247 262 294 330 349 392 440 492 523
其中,低音阶从低音C(131HZ)到中央C(262HZ),高音阶从中央C(262HZ)到高音C(523HZ)。组成乐曲的音符的频率值和持续时间是乐曲程序发声所必需的两组数据,频率可以查上表,音符的持续时间根据乐曲的速度及每个音符的节拍数来确定。在4/4拍中,四分音符为一拍,每小节四拍,全音符持续四拍,二分音符持续二拍,四分音符持续一拍,八分音符持续半拍。如果给全音符分配1秒(100*10ms)的时间,则二分音符持续时间为0.5秒,四分音符持续时间为0.25秒,八分音符持续时间为0.125秒。
知道了音调及频率、时间的关系后,可以按照乐曲的乐谱将每个音符的频率和持续时间定义为两个数据表,然后编写程序依次取出表中的频率值和时间值。3.3初始化8255A和8253A
该发生程序是在修改BEEP发声程序的基础上,以实现为8088/86编写一个任意频率和任意持续时间的通用发声程序,然后根据程序检测按键功能和测试接口正常运行。
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV DX,CORT
MOV AL,82H ;方式0
OUT DX, AL ;A口为输出,B口为输入,C口为输出 MOV DX,COTR ;初始化8253
MOV AL,36H ;定时器0、方式3
OUT DX,AL
3.4按键消抖
LP: MOV DX, PB_C ;C口置零
MOV AL,0H
OUT DX,AL
LOOA: MOV AL,00H
OUT PB_A,AL ;A口置零
LOOB: IN AL,PB_B
AND AL,0FH
CMP AL,0FH
JNZ NEXT
JZ LOOA
NEXT: CALL DELAY
IN AL,PB_B
AND AL,0FH
CMP AL,0FH
JZ LOOB ;没有键按下跳转
RE: MOV BL,3 ;行数
MOV BH,3 ;列数
MOV AL,0FEH
MOV CL,0FH
MOV CH,0H ;起始键号0
3.5 按键扫描
通过程序检测按键的是否正常的输入,以确定正常的输入信号,可以进行发声。LOOP1: OUT PB_A,AL ;A行输出
ROL AL,1 ;准备扫描下一行
MOV AH,AL
IN AL,PB_B
AND AL,CL
CMP AL,CL
JNZ LOOP2 ;有键按下跳转
ADD CH,BH
MOV AL,AH
DEC BL
JNZ LOOP1 ;行末扫完跳转继续
JMP RE
LOOP2: INC CH
ROR AL,1
JC LOOP2 ;无按键按下跳转
MOV AL,CH ;找到按键,比配
CMP AL,1
JZ KEY1
CMP AL,2
JZ KEY2
CMP AL,3
JZ KEY3
CMP AL,4
JZ KEY4
CMP AL,5