微机原理课设 电子琴8253 8255

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、内容摘要

设计一个电子琴。利用数字键1、2、3、4、5、6、7作为电子琴键,按下数字键发出相应的音调。

二、课程设计的目的和意义

1、进一步掌握定时器编程和应用。

2、了解微机利用定时器产生音乐的基本方法。

三、课程设计的要点和内容

1、根据音阶频率表,利用定时器可以产生相应频率的脉冲信号,不同频率的脉冲信号经驱动电路放大后,就会发生不同的音调。

2、对于每个按键的音调发音时间由软件延时控制,如键一直按下,就会连续发音各音阶标称频率值:

本次课设要求设计一个电子琴,作为一个乐器,其最基本的功能就是能够发出一个音阶的所有声音,即:do,re,mi,fa,so,la,xi,dou,8个音符,不同的声音的本质就是不同频率的波,每个音符都对应着固定的频率;而声音的长短即是波的个数。所以得出的一条思路是:用汇编语言来产生一系列频率不同的方波信号,找到各个音符的频率,然后用汇编语言产生同频信号,并将该信号输入到扬声器,如果驱动功率不够则可以加放大电路。

四、硬件电路设计

1、单元电路设计:

硬件结构应结合软件方案一并考虑,做到软件、硬件功能相匹配。在DJ-598K 三合一单片机微机试验仪平台上,硬件设计参考方案如下:

2、电路工作原理:

2.1可编程8253计数器

(1)在计算机的引用中,常常要对外设的某些信号进行计数,希望计算机既能控制技术的过程,还有能读取计数的结果,进而作为控制或管理的决策依据。如果被计数的信号有了准确的固定的周期,就形成了定时器。

(2)图为8253的内部组成和引脚。如图所示,与外部的连接线主要分布在右侧的三个部分,即:三个计数器。其中CLK为计数通道的输入脉冲信号,对于8253来说的频率范围是0—2MHz。GATE为门控信号,用来启动或禁止计数工作,高电平有效,不同的工作方式,作用也不同。Out为输出信号,用来输出波形,不同的工作方式,不同的工作方式,输出的波形也不同;而与CPU的的内部接线主要分布在左侧的三个部分。其中,D0—D7为8位三态数据线,可直接连接到CPU 的数据总线上,主要作用有:是实现与CPU的数据传输通道,接受控制字或计数初值,读取计数通道中的当前计数值。CS—A1部分为读/写控制逻辑,主要用于接受CPU的控制信息,译码后产生整个器件内部的工作的控制信息——RD为读信号线,低电平有效;WR写信号线,低电平有效;CS为片选信号,低电平有效,只有CS有效的前提下,才会执行读或写操作;A1,A0为端口选择地址线,用于对右侧三个技术通道和控制寄存器进行寻址。

(3)8253的主要工作原理是:8253其本质为减一计数器,其工作过程为:首先需要设置工作方式,然后将工作方式处置置入计数初值锁存器;启动计数后,CPU 向8253的计数初值锁存器赋初值,每来一个CLK信号,减一计数器减1,直到减到0或1时,就发出输出信号OUT输出。

2.2 74LS393

(1)74LS393为一个双4位二进制计数器,主要用于二进制计数。

(2) 1CP VCC

1RD 2CP

1QA 2RD

1QB 2QA

1QC 2QB

1QD 2QC

GND 2QD

五、软件开发

1、系统程序模块图及说明

开始

调键扫显示子程序

Y

是数字键1~7吗?

根据键值查表得音

频先关数据

由音频数据置定时

器初值

启动定时器开始发

六、联机调试

1、硬件调试:PB0作为定时器门控信号,OUT1发出音频信号,驱动喇叭。

2、软件调试及调试数据:将在硬件调试设计满足预期要求以后,把软件加载到硬件中,并对该系统进行功能测试。

七、程序清单

CODE SEGMENT ;DZQ.ASM

ASSUME CS:CODE,ds:code

CONTROL equ 43h //CONTROL为43h

COUNT0 equ 40h //COUNT0为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 //跳到STARTO

BUF DB ?,?,?,?,?,? //在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 //cs貌似是什么断点

mov ds,ax

CALL BUF1 //调用子程序,BUF1为其地址

MOV AL,88H //设置控制字,使用工作方法4

MOV DX,IOCONPT //DX为控制字口地址

OUT DX,AL //送控制字

mov dx,IOBPT //设置计数器0口地址

mov al,00 //数值锁存。。。

out dx,al

mov zp,offset buf

redikey: call dispkey //调用dispkey

cmp KZ,09h //kz-09h,设置条件标志位

JNC redikey // 跳转到redikey

cmp kz,01h //kz-01h,设置条件标志位

jc redikey //跳到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

相关文档
最新文档