资源描述
微机原理课程设计《基于8086的钢琴的程序设计》
Hefei University
微机原理课程设计报告
课题名称:基于8086钢琴的程序设计
班 级:07自动化(2)班
报 告 人:严旭东 0705076005
王志强 0705076010
丁福双 0705076019
指导教师:刘伟 林泽坤
成绩评定: ______________
2009 年 12 月 31 日
摘 要
本设计以8086为主体,结合使用8255,8253及相关电路设计利用键盘输入发出不同频率的的音调。利用8255检测键盘,根据输入信号驱动数码管显示,控制8253,完成输入与检测;利用8253的分频输出不同的信号,经放大驱动扬声器发出声音。
关键字: 8086 8255 8253 键盘 数码管
自动化专业微机原理课程设计任务书
论文
题目
基于8086钢琴的程序设计
设计类型
导师姓名
主要内容及目标
1. 掌握利用pc机扬声器发出不同频率声音的方法.
2. 学习利用系统功能调用从键盘上读取字符的方法.
3.编写程序,程序运行时使pc机成为一架可弹奏的”钢琴”。当按下数字1-8时,依次发出1,2,3,4,5,6,7,i八个音调.按下CTRL-C则退出”钢琴”状态.
具有的设计条件
1. PC机一台,EL教学实验箱一台及汇编程序;
计划学生数及任务
3人
(1):明确课题对程序功能,运算精度等方面的要求及硬件条件
(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。
(3):存储器资源分配
(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序
(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。
计划设计进程
(按课程设计周计算)
第一周设计任务:(1):明确课题对程序功能,运算精度等方面的要求及硬件条件
(2):把复杂问题分解为若干模块,确定各模块处理方法,画出流程图。
(3):存储器资源分配
第二周设计任务:(4):编制程序,根据流程图精心选择合适的指令和寻址方式来编制源程序
(5):对程序进行汇编,调试和修改,直到程序运行结果正确为止。
参考文献
《微型计算机原理及接口技术》中国科技大学出版社 吴秀清 周荷琴编著
《16-32位微型计算机技术及应用》清华大学出版社 戴梅萼 史嘉权 编著
<<汇编语言程序设计》南京大学出版社 姚君遗编著
《汇编语言程序设计教程》清华大学出版社 杨记文编著
《微型计算机原理及接口技术》实验指导书
目录
1.总体框图 1
2.方案的论证 2
3.1分频电路模块 2
3.2脉冲发生电路模块 3
3.4键盘模块 4
3.5蜂鸣器电路模块 4
3. 软件设计流程图 5
主流程图 5
键盘扫描子程序图 5
5.调试结果 6
6.总结与体会 6
7.参考文献: 7
附件:程序清单 8
12
1.总体框图
本系统主要有三个功能模块组成:键盘扫描,数码管显示,蜂鸣器发声。围绕这三个功能需要用到三个主要芯片:8086,8255,8253。首先8086主芯片负责数据交换与处理,芯片初始化等。系统开始时对键盘进行扫描,有输入信号时,8255采集信号并输入8086进行处理,驱动数码管显示输入的数字;8086接到8255输入的信号时,调用与之相关的初始值n,输入到8253,对clock进行分频输出不同的频率信号,驱动蜂鸣器进行不同的音调,同时8255对8253进行控制并对信号进行采集送到8086,决定发声时间的长短。
2.方案的论证
扬声器接口由8255、8253、驱动器和低通滤波器等构成,8255做控制器,8253做音频信号源。根据音阶频率表,利用8253可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。对 于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:
3.电路设计
3.1分频电路模块
图<1>
该电路由一片74LS393组成,见图<1>。T0-T7为分频输出插孔。该计数器在加电时由RESET信号清零。当脉冲输入为8.0MHZ时,T0-T7输出脉冲频率依次为4.0MHZ,2.0MHZ,1.0MHZ,500KHZ,
250KHZ,125KHZ,62500HZ,31250HZ。
3.2脉冲发生电路模块
图<2>
实验台上提供8MHZ的脉冲源,见图<2>,实验台上标有8MHZ的插孔,即为脉冲的输出端。
3.3数码管显示模块
图<3>
如图<3>所示8255的PA口对应于数码管显示字位口,PB口对应于字数码管显示形口。
3.4键盘模块
图<4>
如图<3>所示左边16个是数字键,右边8个是功能键,8255的PC口对应于键盘的行,PA口键盘的列
3.5蜂鸣器电路模块
图<5>
通过使用8253计数器1, 16位二进制,方式3,输出所需的方波波形,从而使蜂鸣器发出不同的声音。
3. 软件设计流程图
主流程图
键盘扫描子程序图
备注:程序清单见附件
5.调试结果
1.轰鸣器不能进行正常的音调发声
①:在老师的指导下,发现硬件的8253焊接出现问题,无法正常的进行分频脉冲的输出,轰鸣器一直处于发生状态,经测试该输出口一直处于高电平。
②:硬件74ls393缺少,信号输出出现问题。
2.数码管循环显示正常
在按键按下时可以循环六位显示输入数据。
6.总结与体会
通过本次课程设计让我们不仅加深了对8086 8253 8255 芯片的认识,而且汇编语言实际运用能力也得到了提高。本次课程设计让我们从课本的理论知识联系了实际运用。也使我们知道了理论知识的重要性,懂得了实际运用能力是对理论知识的升华。这对我们以后的学习将会有深厚的影响。
总之,本次此次项目的实施,不仅有利于提高我们的实际动手操作能力,也是一个将书本理论知识与现实中应用相结合的良好机遇,同时也进一步考验我们的团队协作能力、团队沟通意识等。以后我们会倍加珍惜课程设计让我们更好的学习的机会
7.参考文献:
《微型计算机原理及接口技术》中国科技大学出版社 吴秀清 周荷琴编著
《16-32位微型计算机技术及应用》清华大学出版社 戴梅萼 史嘉权 编著
《汇编语言程序设计》南京大学出版社 姚君遗编著
《汇编语言程序设计教程》清华大学出版社 杨记文编著
《微型计算机原理及接口技术》实验指导书
《DJ—8086系列微机实验指导书》
附件:程序清单
CODE SEGMENT ;DZQ.ASM
ASSUME CS:CODE,ds:code
CONTROL equ 43h
COUNT0 equ 40h
COUNT1 equ 41h
COUNT2 equ 42h
IOCONPT EQU 0FF2BH
IOBPT EQU 0FF29H
IOAPT EQU 0FF28H
PA EQU 0FF20H ;字位口
PB EQU 0FF21H ;字形口
PC EQU 0FF22H ;键入口
ORG 18F0H
START: JMP START0
BUF DB ?,?,?,?,?,?
KZ DB ?
ltime db ?
lkey db ?
ZP DW ?
data1: db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h
db 86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F1H
data3: dw 2273, 2024, 1805, 1704
dw 1517, 1353, 1205, 1136
START0: mov ax,cs
mov ds,ax
CALL BUF1
MOV AL,88H
MOV DX,IOCONPT
OUT DX,AL
mov dx,IOBPT
mov al,00
out dx,al
mov zp,offset buf
redikey:call dispkey
cmp KZ,09h
JNC redikey
cmp kz,01h
jc redikey
mov bx,zp
mov al,kz
mov [bx],al
cmp bx,offset buf+5
jz zp1
inc bx
mov zp,bx
jmp outtone
zp1: mov zp,offset buf
outtone:mov dx,IOBPT
mov al,0ffh
out dx,al
mov al,kz
mov ah,00h
dec ax
shl ax,1
mov bx,offset data3
add bx,ax
mov ax,[bx]
call t8253
mov cx,20h
con1: push cx
call disp
pop cx
loop con1
mov dx,IOBPT
mov al,00
out dx,al
jmp redikey
t8253: push ax
mov al, 76h ; 计数器1, 16位二进制,方式3。
mov dx, CONTROL
out dx, al
pop ax
mov dx, COUNT1
out dx, al
mov al, ah
out dx, al
ret
;-------------------------
dispkey:call disp
call key
mov ah,al ;newkey
mov bl,ltime ;ltime
mov bh,lkey ;lkey
mov al,01h
mov dx,PA ;0ff21h
out dx,al
cmp ah,bh
mov bh,ah ;bh=new key
mov ah,bl ;al=time
jz disk4
mov bl,88h
mov ah,88h
disk4: dec ah
cmp ah,82h
jz disk6
cmp ah,0eh
jz disk6
cmp ah,00h
jz disk5
mov ah,20h
dec bl
jmp disk7
disk5: mov ah,0fh
disk6: mov bl,ah
mov ah,bh
disk7: mov ltime,bl
mov lkey,bh
mov KZ,bh
mov al,ah
ret
key: mov al,0ffh
mov dx,PB ;0ff22h
out dx,al
mov bl,00h
mov ah,0feh
mov cx,08h
key1: mov al,ah
mov dx,PA ;0ff21h
out dx,al
rol al,01h
mov ah,al
nop
nop
nop
nop
nop
nop
mov dx,PC ;0ff23h
in al,dx
not al
nop
nop
and al,0fh
jnz key2
inc bl
loop key1
jmp nkey
key2: test al,01h
je key3
mov al,00h
jmp key6
key3: test al,02h
je key4
mov al,08h
jmp key6
key4: test al,04h
je key5
mov al,10h
jmp key6
key5: test al,08h
je nkey
mov al,18h
key6: add al,bl
cmp al,10h
jnc fkey
mov bl,al
mov bh,0h
mov si,offset data2
mov al,[bx+si]
ret
nkey: mov al,20h
fkey: ret
data2: db 07h,04h,08h,05h,09h,06h,0ah,0bh
DB 01h,00h,02h,0fh,03h,0eh,0ch,0dh
DISP: MOV AL,0FFH ;00H
MOV DX,PA
OUT DX,AL
MOV CL,0DFH ;20H ;显示子程序 ,5ms
MOV BX,OFFSET BUF
DIS1: MOV AL,[BX]
MOV AH,00H
PUSH BX
MOV BX,OFFSET DATA1
ADD BX,AX
MOV AL,[BX]
POP BX
MOV DX,PB
OUT DX,AL
MOV AL,CL
MOV DX,PA
OUT DX,AL
PUSH CX
DIS2: MOV CX,0a0H
LOOP $
POP CX
CMP CL,0FEH
JZ LX1
INC BX
ROR CL,1
JMP DIS1
LX1: MOV AL,0FFH
MOV DX,PB
OUT DX,AL
RET
BUF1: MOV BUF,11H
MOV BUF+1,10H
MOV BUF+2,10H
MOV BUF+3,10H
MOV BUF+4,10H
MOV BUF+5,10H
RET
CODE ENDS
END START
展开阅读全文