微机原理课程设计电子琴.docx

上传人:b****8 文档编号:9455218 上传时间:2023-05-19 格式:DOCX 页数:22 大小:119.37KB
下载 相关 举报
微机原理课程设计电子琴.docx_第1页
第1页 / 共22页
微机原理课程设计电子琴.docx_第2页
第2页 / 共22页
微机原理课程设计电子琴.docx_第3页
第3页 / 共22页
微机原理课程设计电子琴.docx_第4页
第4页 / 共22页
微机原理课程设计电子琴.docx_第5页
第5页 / 共22页
微机原理课程设计电子琴.docx_第6页
第6页 / 共22页
微机原理课程设计电子琴.docx_第7页
第7页 / 共22页
微机原理课程设计电子琴.docx_第8页
第8页 / 共22页
微机原理课程设计电子琴.docx_第9页
第9页 / 共22页
微机原理课程设计电子琴.docx_第10页
第10页 / 共22页
微机原理课程设计电子琴.docx_第11页
第11页 / 共22页
微机原理课程设计电子琴.docx_第12页
第12页 / 共22页
微机原理课程设计电子琴.docx_第13页
第13页 / 共22页
微机原理课程设计电子琴.docx_第14页
第14页 / 共22页
微机原理课程设计电子琴.docx_第15页
第15页 / 共22页
微机原理课程设计电子琴.docx_第16页
第16页 / 共22页
微机原理课程设计电子琴.docx_第17页
第17页 / 共22页
微机原理课程设计电子琴.docx_第18页
第18页 / 共22页
微机原理课程设计电子琴.docx_第19页
第19页 / 共22页
微机原理课程设计电子琴.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

微机原理课程设计电子琴.docx

《微机原理课程设计电子琴.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计电子琴.docx(22页珍藏版)》请在冰点文库上搜索。

微机原理课程设计电子琴.docx

微机原理课程设计电子琴

概述…………………………………………………………1

一 设计内容与要求………………………………………1

二 设计思想………………………………………………1

三 设计所用芯片及工作原理……………………………2

四 系统连线图……………………………………………2

五 连线图说明……………………………………………3

六 程序流程图……………………………………………3

]

七 程序源代码……………………………………………5

八 设计过程中遇到的问题及解决方法……………………11

九 设计心得………………………………………………11

 

 

电子琴

概述

《汇编语言与微机原理》是计算机各专业一门重要的基础课,是必修的核心课程之一,对于训练学生掌握程序设计技术,熟悉上机操作和程序调试技术都有重要作用。

因此该课程在整个教学计划中占有重要地位。

本课程的目的和要求是:

1、应使学生掌握8086/8088宏汇编语言程序设计的基本方法和技巧,能够运用8086/8088宏汇编语言编写应用程序。

提高学生分析问题、解决问题的能力以及实际动手能力。

^

2、应使学生基本掌握汇编语言程序设计的基本理论,方法和技巧,正确地使用结构化、模块程序设计技术。

注意培养学生良好的程序设计风格。

3、应使学生比较熟练地使用调试工具DEBUG调试8086/8088汇编语言程序。

注意提高学生的调试能力。

4、注意与前后相关课程的关系。

使学生对前导课程有进一步的理解,同时为学习后继课程打好基础。

一、设计内容与要求

编写一实现电子琴的程序,并实现若干扩展功能。

基本功能:

用8257键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;

扩展功能:

1、录音:

记录所弹奏曲目

>

2、放录音:

任意时刻重放最新记录曲目

3、在程序中可预设一曲目,按一键实现播放该曲目。

4、在播放录制曲目或预设曲目时,按8279键盘上任意键可以暂停播放,再按一次从暂停处继续播放。

5、程序运行时有友好的用户介面

二、设计思想

在本次课程设计中,根据复杂程序设计思想——模块化程序设计,分析和确定程序总体设计目标:

电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块。

程序设计的思路按以下顺序进行:

1、分析与确定程序总体设计目标

2、将总体目标划分为若干模块

3、定义每个模块的具体任务,明确它与其他模块间的通信方式

4、编写源程序,进行调试,包括:

A)简单电子琴主程序

结合实验指导书的两程序,将其分为5个子程序,实现简单的播放和显示音阶的功能。

B)录音子程序

实现记录弹奏曲目并播放的功能。

首先由9触发,将输入的音阶存入缓存区song中,输入的同时可以发声和显示。

当再次按9时录制完成。

C)放音子程序

本子程序实现放音功能。

首先从8279键盘读出键码,判断,如果键码不是1-8即回到程序开始,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。

播放60次后,从PORT1中取出值到AL,和1相与,判断是否有按键,如果有就进入死循环,直到下次按键为止。

D)放歌子程序

调用放音子程序。

E)暂停子程序

在乐曲播放过程中,每调用一次MUSIC,就从PORT1中取出AL,检测AL个数,即每次发音后按键盘的次数。

当检测到AL为1时,即按了一次任意就使程序进入一个死循环,不发音,到此实现了暂停,然后再次按动任意键时,AL就为2,不为1,所以程序跳出死循环,继续从断开处调用乐曲,继续播放。

G)源程序整体

程序开始,显示提示信息,对缓存区、8279初始化。

接着调用发音子程序,键盘子程序,在把AL送缓存区,实现发音和显示。

接着对9键、0键、f键、r键进行逐个判断,当9按下时,调用录音子程序。

当按下0时,播放录制的曲目。

当按下f键时,播放程序中预设的曲目。

当检测到r时,退出到DOS状态。

当每一个都检测不到时,退回到调用发音子程序,继续发音显示。

从而实现有扩展功能的电子琴。

5、模块连接,形成完整的程序

三、:

四、设计所用芯片工作原理

(1)对于一个特定的D/A转换接口电路,CPU执行一条输出指令将数据送入D/A,即可在其输出端得到一定的电压输出。

给D/A转换器输入按正弦规律变化的数据,在其输出端即可产生正弦波。

对于音乐,每个音阶都有确定的频率。

各音阶标称频率值:

(2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向D/A转换器输出数据的时间间隔,例如:

发"1"频率为261。

1HZ,周期为1/=,输出数据的时间间隔为32=.定时时间可以由8253配合8255来实现。

按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。

本程序中设置默认长度为60个正弦波。

五、系统连线图

(1)8253和8255连接如下

五、连线图说明

计时器8253

使用8279芯片的键盘控制器,8279键盘在一个扩充板上,用一根20芯扁平电缆与实验台上扩展插头J7相连。

并行控制器8255

六、程序流程图

(1)主程序流程图

(2)发音子程序流程图

[

(3)键盘显示子程序流程图(4)显示子程序流程图

(5)录音子程序流程图(6)放录音子程序流程图

七、程序源代码

STACK1SEGMENTPARASTACK'STACK'

DB50DUP(0)

STACK1ENDS

CODESEGMENT

MAINPROCFAR

ASSUMECS:

CODE,DS:

DATA

MOVAX,DATA

MOVDS,AX

MOVDX,OFFSETMSG

*

MOVAH,9

INT21H;显示提示信息

CLI

MOVAX,DATA

MOVDS,AX

MOVSEC1,0

MOVSEC2,0

MOVMIN1,0

MOVMIN2,0

MOVHOUR1,0

MOVHOUR2,0;显示缓存区初始化

MOVAX,DATA

MOVDS,AX

MOVAX,CS

MOVDS,AX

MOVDX,PORT1

MOVAL,0D3H;清除命令特征位

OUTDX,AL;8279CLEAR

MOVAL,2AH;0010101042分频,内部使用1MHZ/42的频率

OUTDX,AL;8279CLOCK

MOVAL,40H

OUTDX,AL;READFIFORAMCOMMAND

MOVAL,00H;8个字符显示,左入口。

编码扫描键盘,双键锁定。

OUTDX,AL;KEYBORDDISPLYMODE

MOVAL,80H;写入的存储单元地址为0000

OUTDX,AL;WRITERAMCOMMAND

CALLMUSIC;发音

CALLKEYBORD;CALLKEYBORDANDDISPLY

NEXT2:

MOVHOUR2,AL

MOVHOUR1,AL

MOVMIN2,AL

!

MOVMIN1,AL

MOVSEC2,AL

MOVSEC1,AL;键盘码存入显示缓冲区

CMPAL,9H

JZRE

CMPAL,0H

JZOUTPUT

CMPAL,15

JZFU

CMPAL,13H;'R'COMMAND

JNZLP1

MOVAX,4C00H;QUITTODOS

INT21H

LP1:

JMPKEY1

RE:

CALLRE0;录音

JMPLP1

OUTPUT:

CALLOUTPUT0;放录音

JMPLP1

FU:

CALLOUTPUT1

JMPLP1

MAINENDP

RE0PROCNEAR;录音子程序

MOVDX,OFFSETMSGPLAY

MOVAH,9

INT21H;显示录音提示信息

LEASI,SONG

CALLKEYBORD

MOVHOUR2,AL

MOVHOUR1,AL

MOVMIN2,AL

MOVMIN1,AL

MOVSEC2,AL

MOVSEC1,AL;键盘码存入显示缓冲区

CALLMUSIC

CALLDISP

MOV[SI],AH

CMPAH,9

JZQRE0

INCSI

JMPR

*

MOVDX,OFFSETMSGEND

MOVAH,9

INT21H;显示录音提示信息

RET

RE0ENDP

OUTPUT0PROCNEAR;放录音子程序

MOVDX,OFFSETMSGPLAY1

MOVAH,9

*

INT21H;显示PLAY提示信息

LEASI,SONG

MOVAL,[SI]

CMPAL,9

JZQRE1

MOVHOUR2,AL

MOVHOUR1,AL

MOVMIN2,AL

MOVMIN1,AL

MOVSEC2,AL

MOVSEC1,AL;键盘码存入显示缓冲区

CALLDISP

MOVAL,AH

CALLMUSIC

INCSI

JMPOU

MOVDX,OFFSETMSGEND1

MOVAH,9

INT21H;显示PLAYEND提示信息

RET

OUTPUT0ENDP

OUTPUT1PROCNEAR;放歌子程序

MOVDX,OFFSETMSGPLAY1

MOVAH,9

INT21H;显示PLAY提示信息

LEASI,SONG1

MOVAL,[SI]

CMPAL,-1

JZQRE2

MOVHOUR2,AL

MOVHOUR1,AL

MOVMIN2,AL

MOVMIN1,AL

MOVSEC2,AL

MOVSEC1,AL;键盘码存入显示缓冲区

CALLDISP

MOVAL,AH

CALLMUSIC

INCSI

JMPOU1

!

MOVDX,OFFSETMSGEND1

MOVAH,9

INT21H;显示PLAYEND提示信息

RET

OUTPUT1ENDP

KEYBORDPROCNEAR;键盘子程序

MOVDX,PORT1

MOVAL,0D1H

|

OUTDX,AL;CLEARDISPLAY

CALLDISP

MOVDX,PORT1

INAL,DX;读状态

ANDAL,07H;判断是否有按键

JZWREP

KEYN:

;下一次的按键

MOVDX,PORT0

*

INAL,DX;读数据

MOVBL,AL

ANDAL,07H

ANDBL,38H

MOVCL,03

SHRBL,CL

CMPBL,00H

JNZLINE1

ADDAL,08H

JMPQUIT1

CMPBL,01H

JNZLINE2

JMPQUIT1

ADDAL,10H

RET

KEYBORDENDP

DISPPROCNEAR;显示子程序

PUSHSI

PUSHCX

PUSHDX

MOVAX,DATA

MOVDS,AX

MOVDX,PORT1

MOVAL,90H

|

OUTDX,AL;写地址为0000的显示缓存区命令,每次写入后地址自动加1

MOVSI,OFFSETSEC1

MOVCX,0001

MOVBX,OFFSETLED

CLD

LODSB

MOVAH,AL

XLAT;键盘码转显示码

MOVDX,PORT0

OUTDX,AL;显示

LOOPDISP1

POPDX

POPCX

POPSI

DISPENDP

MUSICPROCNEAR;发音子程序

|

PUSHSI

CMPAL,1

JLQUIT

CMPAL,8

JGQUIT;若不在'1'-'8'之间转QUIT,不发音

MOVNUM,AL;求出相应的时间常数的序号

MOVCX,60;取60次32个正弦波数据

MOVSI,0

@

MOVAL,DATA1[SI];取正弦波数据

MOVDX,IO0832A

OUTDX,AL;放音

CALLDELAY;调延时子程序

INCSI

CMPSI,32;是否取完32个数据

JLLLL;若没有,则继续

LOOPDDD;总循环次数60是否完,没有,则继续

MOVDX,PORT1;扫描实现任意键暂停

INAL,DX;读状态

ANDAL,01H;判断是否有按键

JNZFFF;;按键延时

JMPQUIT

FFF:

MOVCX,60

JMPD

POPSI

RET

MUSICENDP

DELAYPROCNEAR;延时子程序

CCC:

MOVBX,OFFSETTIME

MOVDX,IO8253B;置8253通道0为方式0工作

MOVAL,10H

OUTDX,AL

MOVDX,IO8255B;设8255A口输入

MOVAL,9BH

OUTDX,AL

MOVAL,NUM;取相应的时间常数

XLAT

MOVDX,IO8253A

OUTDX,AL;向8253通道0输出

KKK:

MOVDX,IO8255A

INAL,DX;从8255A口读一字节

TESTAL,01;判PA0口是否为1

JZKKK;若不为1,则转KKK

RET;子程序返回

DELAYENDP

CODEENDS

ENDSTART

八、设计过程中遇到的问题及解决方法

1.主程序简单电子琴功能

主程序要求完成的功能有:

电子琴简单功能实现以及利用由8279芯片控制的小键盘(含数码管、键盘阵列)实现控制电子琴。

主程序由电子琴实验和键盘控制实验的两个程序有机组成,两个程序简单拼凑在一齐是不能实现的。

经过实际调试和修改,将原电子琴程序改为2个子程序:

music(实现播放音阶)和delay(实现播放音阶时延时);将原键盘控制程序改为1个主程序:

key1、keybord(键盘扫描及输入)和disp(显示)。

各个子程序通过寄存器al通信,al存有当前输入的键盘码,同时为music、disp两子程序服务。

调试后,主程序能实现课程设计要求的功能,并且界面清晰、操作容易。

2.源程序整体功能

将各子程序调试完成后,进行最后的源程序整体功能调试。

调试过程中我们注意到:

a.程序模块化(功能分为若干子程序)能使源程序清晰,调试简单,因此在调试中我们还将源程序进一步模块化。

b.注意子程序之间的通信方式,这里基本用到的是寄存器al(内含键盘码),所以对al的使用应十分谨慎。

c.调用子程序前,使用push/pop保护了一些子程序会用到的主程序同时会用到的寄存器,保证调用之后主程序的顺利执行。

在调试过程中出现的一些小问题,我们都根据以上3点总结出的经验作为原则进行调试,调试过程十分顺利。

最后根据电子琴的实际用途加上了一些必要清晰的提示性语句,使界面更加友好。

九、设计心得

经过这个课程设计,虽然时间比较短,完成任务的效果不是很理想,但是既然自己尝试

过,就肯定学到了不少东西。

经过短短一周的课程设计,我认识到,课程设计能真正让人学到实际应用的东西的一门课程。

首先,要实现题目要求的功能并有所创新,我们必须全心地投入其中,养成一种敢于钻研敢于创新的习惯。

在把课程要求实现到实际中来的过程中,首先必须清楚明白地了解几个参考程序的每一行的意思,这就需要敢于静心钻研。

其次,通过课程设计,让我更深入的了解了各种芯片的用法和程序的完成过程,调试方法及技巧。

为了的初始化,存取缓存,扫描键盘,读取键码以及键码和显示码之间的转换,查找了不少8279芯片的资料,了解了键盘为了实现基本功能,了解了电子琴的不同音阶放音功能的实现,长短音的实现,更深入了解了8253计时器的使用方法。

检查程序过程中,在充分思考的基础上多次实验是检查改正程序的良方。

在设计扩展功能的过程中,大胆想像并且用多种思路来求解实现目标是必备的武器。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2