单片机键盘乐器课程设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
湖南工学院
课程设计报告
(2015 ~2016学年度第二学期)
课程名称接口技术与外部设备课程设计名称键盘电子乐器
姓名
学号
专业
班级
地点
教师
1.课程设计目的及要求
1)、实验目标、功能设计要求:利用并行接口8255作为键盘接口,设计一个具有2个八度音阶的键盘乐器,音阶键不少于16个,采用扫描方式管理键盘,音域范围自行定义。
2)、软件、硬件环境:Windows XP 、1G 内存
2. 课程设计步骤 (1) 弄明白设计题目
(2) 查阅资料,搞清楚8253和8255的工作原理。
(3) 上网查阅相关资料 (4) 编程实现
(5) 完成课程设计报告
3. 课程设计内容 1)、设计概述
(a) 开发平台:masm (b) 参考书籍:《微型计算机接口技术及应用》、《IBM —PC 汇编语言课程设计》、《手把手教你学单片机》 2)、处理流程 (a)8253 引脚图
1224
12…
1413GN D D 7D 6D 5D 4D 3D 2D 1D 0CLK 0OUT 0GATE 0
V CC W R
D C
S A 1A 0CLK 2
OUT 2
GATE 2CLK 1
GATE 1OUT 1…
8253/8254
图3.1 定时/计数器8253/8254 引脚图数据总线缓冲器读/写逻辑控制命令寄存器
计数器
计数器
1计数器2
CLK 0GATE 0OUT 0
CLK 1GATE 1OUT 1CLK 2GATE 2OUT 2
D 0~D 7 A 0
A 1
RD WR CS 图3.2 定时/计数器8253/8254内部框图
内部总线
8255的工作原理
(b)主要函数的程序流程图
4. 课程设计结果 运行正确:
摁键盘Q~U :能发低音
摁键盘A~J :能发比上行高一音阶的音频 摁键盘Z~M :能发比上行更高一音阶的音频
5. 课程设计总结分析
组员分工及评分:查找资料:阳吉红(B )、董湘北(B ) 程序修改实现:尹媚(B +)
董湘北自我评价:接到课程设计题目,刚开始刚到非常的棘手,通过翻阅了上学期的《汇编语言程序实验教程》,了解到控制电路是以位触发和定时器控制两种不同的方式驱动扬声器发声,8253驱动扬声器,8255接受输入的数据。
实验完成还行,巩固了硬件知识。
阳吉红自我评价:这个实验中我们遇到了很多问题但在老师和同学的帮助下得到了解决
开始
获取中断向量
调用8253,驱动扬声器 返回中断向量 设置中断向量
调用8255,按键发声
返回DOS
,这个实验让我了解了接口实验的基本要求,总之学到不少东西啦。
尹媚自我评价:学完接口技术这门课程,觉得自己学得还可以。
但是做完课程设计,才发现自己学得远远不够。
虽然课程设计做得不是非常好,但是,还是学到一些东西。
知道了8253不近可以用来做计数器,还能编程驱动扬声器。
我们这个课程用到了8253和8255。
8253用来驱动扬声器,8255用来接受从键盘输入的数据。
总的来说,结果还不是太坏。
还是学到了一点东西。
6.附录(源程序)
DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODE SEGMENT
ASSUME CS:CODE
D1=131;设置音频范围
D2=147
D3=165
D4=175
D5=196
D6=220
D7=247
Z1=262
Z2=294
Z3=330
Z4=349
Z5=392
Z6=440
Z7=494
G1=523
G2=587
G3=659
G4=714
G5=784
G6=880
G7=988
OLDINT8 DD ?
OLDINT9 DD ?
TIME DW 0
ASCII DB10H,11H,12H,13H,14H,15H,16H
DB 1EH,1FH,20H,21H,22H,23H,24H
DB 2CH,2DH,2EH,2FH,30H,31H,32H MUSIC DW D1,D2,D3,D4,D5,D6,D7
DW Z1,Z2,Z3,Z4,Z5,Z6,Z7
DW G1,G2,G3,G4,G5,G6,G7
NEWINT8: DEC CS:WORD PTR TIME ;指向TIME JZ CLOSEV
NEW8_0:JMP CS:OLDINT8
CLOSEV:PUSH AX
IN AL,61H
AND AL,0FDH
OUT 61H,AL
POP AX
JMP NEW8_0
VOICE:MOV CX,AX
MOV DX,12H
MOV AX,34DCH
DIV CX
PUSH AX
MOV AL,0B6H
OUT 43H,AL
POP AX
OUT 42H,AL
XCHG AL,AH
OUT 42H,AL
IN AL,61H
OR AL,03H
OUT 61H,AL
RET
NEWINT9: IN AL,60H
PUSH AX
IN AL,61H
OR AL,80H
OUT 61H,AL
AND AL,7FH
OUT 61H,AL
MOV AL,20H
OUT 20H,AL
STI
POP AX
PUSH AX
CMP AL,80H
JB NEW90
MOV CS:WORD PTR TIME,04H
JMP QUIT
NEW90:PUSH CS
POP ES
MOV DI,OFFSET ASCII
MOV CX,22D
CLD
REPNZ SCASB
JCXZ QUIT
SUB DI,OFFSET ASCII
DEC DI
SHL DI,1
MOV AX,ES:[DI+MUSIC]
MOV CS:WORD PTR TIME,0H
CALL VOICE
QUIT:POP AX
CMP AL,01H
JNZ MEUN
LDS DX,CS:OLDINT8
MOV AX,2508H
INT 21H
LDS DX,CS:OLDINT9
MOV AX,2509H
INT 21H
MOV AX,4C00H
INT 21H
MEUN:STI
JMP MEUN
START:MOV AX,CS
MOV DS,AX
MOV AX,3508H ;获取中断向量
INT 21H
MOV CS:W ORD PTR OLDINT8,BX
MOV CS:WORD PTR OLDINT8+2,ES
MOV AX,3509H
INT 21H
MOV CS:W ORD PTR OLDINT9,BX
MOV CS:WORD PTR OLDINT9+2,ES
MOV AX,2508H ;设置中断向量
MOV DX,OFFSET NEWINT8
INT 21H
MOV AX,2509H
MOV DX,OFFSET NEWINT9
INT 21H
JMP MEUN
CODE ENDS
END START。