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

上传人:仙人指路1688 文档编号:4194117 上传时间:2023-04-09 格式:DOC 页数:28 大小:310KB
返回 下载 相关 举报
微机原理课程设计电子琴.doc_第1页
第1页 / 共28页
微机原理课程设计电子琴.doc_第2页
第2页 / 共28页
微机原理课程设计电子琴.doc_第3页
第3页 / 共28页
微机原理课程设计电子琴.doc_第4页
第4页 / 共28页
微机原理课程设计电子琴.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《微机原理课程设计电子琴.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计电子琴.doc(28页珍藏版)》请在三一办公上搜索。

1、Micro-computer - to achieve flower proceduresAbstractWith computer technology and microelectronic technology, the development of micro-computers rather quickly, particularly from IBM introduced the IBM-PC personal computers, micro-computer quickly transition from eight to 16 Microcomputer machine. C

2、hina is no exception, many units in the affairs management, numerical calculation, data acquisition and processing, industrial automation, and other aspects of the choice of 16 aircraft. Therefore, the majority of computer applications in the engineering and technical personnel, 16 of the growing aw

3、areness of the need.16 micro-computers more widely applied to our real life, as a junior this year, we also learned this course, and in schools under the requirements of this 16 micro-computer curriculum design. The curriculum is designed around the knowledge acquired by a small independent design p

4、rocess. I design are: to achieve flower procedures. Require the use of modules 8088,8255,8279 draw by the circuit design and realization of the functions of the procedure. Flower achieve the main function is key in 8257 with the corresponding seven scale, experimental me through the speaker sounds,

5、and through the input Qiduan digital scale. This was also extended: sound recording: record by playing pieces; release recordings: any time playback latest record tracks in the process of a repertoire can be the default, according to a key player to achieve the pieces in play pre-recorded tracks or

6、Set pieces, press any button on the keyboard 8279 can be paused, and then one from the Department to suspend the broadcast is running friendly user interface.KEY WORDS: Flower 8088 8255 8279 Digital control微型计算机-实现电子琴的程序摘 要随着计算机技术与微电子技术的发展,微型计算机的发展相当迅速,特别是从IBM公司推出的IBMPC个人计算机以来,微型计算机很快的由八位微型机过渡到十六位机。

7、在我国也不例外,很多单位在事务管理,数值计算,数据采集与处理,工业自动化等方面都选用了十六位机。因此,对于广大从事微机应用的工程技术人员来说,十六位机的认识愈来愈需要了。十六位微型计算机越来越广泛的应用到我们的现实生活中,作为大三的我们今年也学习了这门课程,并且在学校的要求下进行了这次十六位微型计算机的课程设计。本次课程设计的内容是围绕所学的知识自主设计一个小程序。我的设计内容是:实现电子琴的程序。要求利用所学的8088,8255,8279等模块画出所设计的电路图以及实现该功能的程序。实现电子琴的主要功能是用8257键盘输入对应的七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶

8、。同时还对此进行了扩展:录音:记录所弹奏曲目;放录音:任意时刻重放最新记录曲目;在程序中可预设一曲目,按一键实现播放该曲目;在播放录制曲目或预设曲目时,按8279键盘上任意键可以暂停播放,再按一次从暂停处继续播放;程序运行时有友好的用户介面。关键词:电子琴 8255 8088 数码管目 录1电子琴的设计内容22元件与仪器介绍32.1 8253的介绍32.1.1 8253的工作原理32.1.2 8253初始化编程52.2对8255的认识62.2.1 8255引脚功能62.3 8088功能介绍72.4 DAC083292.4.1 DA转换dac0832的原理与应用93设计原理、思路及流程图113.

9、1 设计原理113.2电路连接图113.3 设计思路123.3.1简单电子琴主程序123.4 流程图13致 谢16参 考 文 献17附录1 源程序代码18附录2 系统原理图261电子琴的设计内容 随着计算机技术与微电子技术的发展,微型计算机的发展相当迅速,特别是从IBM公司推出的IBMPC个人计算机以来,微型计算机很快的由八位微型机过渡到十六位机。在我国也不例外,很多单位在事务管理,数值计算,数据采集与处理,工业自动化等方面都选用了十六位机。因此,对于广大从事微机应用的工程技术人员来说,十六位机的认识愈来愈需要了。编写一实现电子琴的程序,并实现若干扩展功能。基本功能:用8257键盘输入对应的七

10、个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶;扩展功能:录音:记录所弹奏曲目;放录音:任意时刻重放最新记录曲目;在程序中可预设一曲目,按一键实现播放该曲目;在播放录制曲目或预设曲目时,按8279键盘上任意键可以暂停播放,再按一次从暂停处继续播放;程序运行时有友好的用户介面。2元件与仪器介绍 本设计所要用到的元器件有:计时器8253,使用8088芯片的键盘控制器,并行控制器8255A,实验台。2.1 8253的介绍8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。2.1.1 82

11、53的工作原理 8253是可编程的计数器/定时器,其CLK0CLK2是计数器02的时钟脉冲输入端, GATE0GATE2是门控脉冲输入端, OUT0OUT2是输出端及内部结构见下图。 当用8253做外部事件计数器时,在CLK端所加的计数脉冲由外部事件产生,这些脉冲的间隔可以不相等。如果要用它做定时器,则CLK端应输入精确的时钟脉冲。这时, 8253所能实现的定时时间决定于计数脉冲的频率和计数器的初值,即定时时间=时钟脉冲周期tc 预置的计数初值n8253的控制逻辑由5个控制信号WR、CS、A1和A0组成,对应的操作见表1。8253编程时,要对其控制字寄存器写入相应的控制字,控制字寄存器格式如表

12、2所示。其中: SC1, SC0通道选择位。为00, 01, 10分别表示选择0, 1, 2通道。RL1, RL0读/写操作位。00 表示锁存数据,可随时读取计数器中的计数值; 01 表示只读/写低8位,高8位自动置为0; 10表示只读/写高8位,低8位自动置为0; 11表示读/写16位数据,先低8位,后高8位。M2,M1,M0工作方式选择位。8253 具有3 个独立的16 位减法计数器,6 种不同的工作方式。方式0 :又称计数结束产生中断工作方式。当程序将工作方式控制字写入控制字寄存器时,计数器的输出端OUT 立即变为低电平。在计数初值写入该计数器后,输出仍将保持为低电平。当门控信号GATE

13、 为高电平时,计数器对输入端CLK的输入脉冲开始作减一计数,当计数器从初值减为0 时,输出端OUT由低电平变为高电平,该输出信号可作为向CPU 发出的中断请求信号。 方式1 :又称可编程单稳态工作方式。功能是在GATE 信号的上升沿作用下,输出端OUT 产生一个负脉冲信号,负脉冲的宽度可由定时器的计数初值和时钟频率编程确定。 方式2 :又称频率发生器工作方式。当程序将工作方式控制字写入控制字寄存器时,计数器的输出端OUT立即变为高电平。在写入计数初值后,计数器对输入时钟CLK计数。在计数过程中OUT 保持不变,直到计数器从初值减为1 时,输出OUT 将变低,再经过一个CLK周期,OUT 恢复为

14、高电平,并按已设定的计数初值重新开始计数。在需要产生某个脉冲信号或将某一个较高频率的脉冲信号分频为较低频率时,可使用8253 的方式2。 方式3 :又称方波发生器工作方式。方式3 的工作类似于方式2 ,不同之处是方式3 的输出OUT是方波。 方式4 :又称软件触发选通工作方式。其功能是在输出OUT 端隔一定时间产生一价目负脉冲。与方式0 不同的是,输出脉冲的宽度是固定的,但产生负脉冲所相隔时间是可编程的。 方式5 : 又称硬件触发选通工作方式。方式5的工作类似于方式4 ,不同之处是GATE 信号的作用不同。方式5 的计数过程由GATE 的上升沿触发,当计数结束时,OUT 将输出一个CLK周期的

15、低电平信号。 其中方式0的工作过程如下:当程序送一控制字将所选的计数器置于所设定的方式后,该计数器的输出为低;当计数器初值装入被选中的计数器后,在外部输入的门控高电平的控制下,则可通过各自的计数脉冲进行递减计数。此时其输出仍为“低”。当计数器从初始值减到全“0”时,便产生一高电平输出,利用此输出信号向CPU发计数完中断;此中断请求一直保持到程序再次向计数器装入初值为止。BCD计数方式选择位。1 表示按十进制计数, 0表示按二进制计数。2.1.2 8253初始化编程 编程时,可选择计数器1工作在方式0。在8253的方式0工作方式中,从将计数初值写入计数器到开始减1计数之间,有一个时钟脉冲的延迟。

16、若计数初值为n = 999,那么经过n + 1个即1000个脉冲时计数值减为0,并在OUT1端输出一正跳变,这可以作为中断请求。在中断服务子程序中CPU可以做其他处理,如送下一个包装箱等。设计数初值为1999 (要求一个包装箱内装工件2000) ,按十进制计数,先送低8位,再送高8位,控制字为01110001B。初始化程序为:MOV AL, 01110001BAL, 01110001BMOV DX, 0356HOUT DX,AL ;送方式控制字MOV AL, 99HMOV DX, 0352HOUT DX,AL ;向通道1送计数初值低8位MOV AL, 19HOUT DX,AL ;向通道1送计数

17、初值高8位2.2对8255的认识单片机系统里常用的8255芯片是一个典型的可编程通用并行接口芯片,用来扩展单片机的端口,它具有3个8位的并行口,有三种工作方式,可作为单片机与各种外部设备连接的接口电路! 下面介绍8255的引脚图及引脚功能。2.2.1 8255引脚功能 8255引脚功能说明:RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。 PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。PC0P

18、C7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写8255。D0D7:三态双向数据总线,8255与CPU数据传送的通道,当C

19、PU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。2.3 8088功能介绍 多数引脚采用复用、分时,因为40条引脚不够分配,只能使一部分引脚分时复用:一条引脚当两条引脚使用。 8086管脚图见图4.2.1(图4.2.1同时给出了8088的管脚图), 图中第2431号管脚具有两种定义。括弧中表示的是最大模式下的管脚定义。首先我们介绍8086在最小模式下的管脚定义。 有一部分引脚的功能和CPU的工作方式有关:在最小方式和最大方式下,这些引脚可能有不同的功能。(1) 数据总线D0D15 16位(8088仅8位),双向传输, 可分别使用其低8位或高8位,该总

20、线与地址总线A0A15共用CPU引脚形成复用总线AD0AD15, 地址、数据分时传送。(2) 地址总线A0A19 20位,单向,地址由CPU产生,用于寻址访问存储器单元或IO端口。A0A15与D0D15复用,A16A19与状态信号S3S6复用(A16/S3 A19/S6)。其中AD15AD0地址数据复用信号(标号216、39),双向,三态。 在总线周期的T1状态(地址周期)AD15AD0上出现的 是低16位的地址信号A15A0;在T3状态(数据周期)AD15AD0上出 现的是数据信号D15D0。作为分时复用管脚,因为既做地址信号,又做数据信号,因此是双向信号。 在总线周期的T1状态AD15AD

21、0输出CPU所要访问的存储器或者I/O端口的地址; 而在总线周期的T3状态,AD15AD0上出现的是CPU和存储器或I/O端口交换的数据。T2状态对于读周期和写周期来说AD15AD0上的状态是不同的: 在是读周期, AD15AD0要从CPU驱动(地址周期)切换为存储器或I/O端口驱动(数据周期),AD15AD0管脚需要在一个状态周期内维持高阻状态,以便不同总线驱动源的切换。如果是写周期,地址和数据信号都是由CPU驱动,所以CPU从T2开始便输出数据。T2T3都是数据周期。A19/S6A16/S3 (Address/Status):地址状态复用信号(标号3538),输出。 在总线周期的T1状态(

22、地址周期)A19/S6A16/S3上出现的是地址的高4位。在T2T4状态,A19/S6A16/S3上输出状态信息。(3) 状态信号S3S6S6:指示8086当前是否与总线相连。S60表示8086连在总线上。S5:表示中断允许标志状态。S51表示中断允许标志IF1(对可屏蔽中断请求起作用)。S50表示IF0,禁止可屏蔽中断。S4和S3用来指出当前使用的段寄存器。 S4、S3代码组合对应的含义如表4.2.1所示:S4S3当前正在使用的段寄存器00ES01SS10CS或未使用任何段寄存器11DS表4.2.1地址和状态信号也都是由CPU驱动, 所以T1地址周期之后,紧接着的T2T4是状态周期。(4)

23、控制信号 与CPU工作模式无关的信号有:BHE#、NMI、INTR、RD#、CLK、RESET、READY#、TEST#、MN/MX#、GND2.4 DAC0832DAC0832是采样频率为八位的D/A转换器件,下面介绍一下该器件的中文资料以及电路原理方面的知识。DAC0832内部结构资料:芯片内有两级输入寄存器,使DAC0832具备双缓冲、单缓冲和直通三种输入方式,以便适于各种电路的需要(如要求多路D/A异步输入、同步转换等)。D/A转换结果采用电流形式输出。要是需要相应的模拟信号,可通过一个高输入阻抗的线性运算放大器实现这个供功能。运放的反馈电阻可通过RFB端引用片内固有电阻,海可以外接。

24、 该片逻辑输入满足TTL电压电平范围,可直接与TTL电路或微机电路相接,下面是芯片电路原理图2.4.1 DA转换dac0832的原理与应用 DAC0832是8位分辨率D/A转换集成芯片,与处理器完全兼容,其价格低廉,接口简单,转换控制容易等优点,在单片机应用系统中得到了广泛的应用。 (1) DAC0832的引脚及功能DI0DI7:数据输入线,TLL电平。 ILE:数据锁存允许控制信号输入线,高电平有效。 CS:片选信号输入线,低电平有效。 WR1:为输入寄存器的写选通信号。 XFER:数据传送控制信号输入线,低电平有效。 WR2:为DAC寄存器写选通输入线。 Iout1:电流输出线。当输入全为

25、1时Iout1最大。 Iout2: 电流输出线。其值与Iout1之和为一常数。 Rfb:反馈信号输入线,芯片内部有反馈电阻. Vcc:电源输入线 (+5v+15v) Vref:基准电压输入线 (-10v+10v) AGND:模拟地,摸拟信号和基准电源的参考地. DGND:数字地,两种地线在基准电源处共地比较好. 3设计原理、思路及流程图3.1 设计原理(1)对于一个特定的/转换接口电路,CPU执行一条输出指令将数据送入/, 即可在其输出端得到一定的电压输出。给/转换器输入按正弦规律变化的数据, 在其输出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。 各音阶标称频率值: (2)产生一个正弦

26、波的数据可取32个(小于亦可),不同频率的区别,可通过调节向转换器输出数据的时间间隔,例如:发频率为261。1HZ,周期为1/261.1=3.83ms,输出数据的时间间隔为3.83ms/320.12ms. 定时时间可以由8253配合8255来实现。按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。本程序中设置默认长度为60个正弦波。3.2电路连接图电路连接图如下:(1)8253和8255连接如下 (2)8279键盘在一个扩充板上,用一根20芯扁平电缆与实验台上扩展插头J7相连。3.3 设计思路在本次课程设计中,根据复杂程序设计思想模块化程序设计,分析和确定程序总体设计目标:电子琴基本

27、功能及部分扩展功能后,将总体目标划分为若干模块。程序设计的思路按以下顺序进行:a. 分析与确定程序总体设计目标b. 将总体目标划分为若干模块c. 定义每个模块的具体任务,明确它与其他模块间的通信方式d. 编写源程序,进行调试。3.3.1简单电子琴主程序结合实验指导书的两程序,将其分为5个子程序,实现简单的播放和显示音阶的功能。(1)录音子程序实现记录弹奏曲目并播放的功能。首先由9触发,将输入的音阶存入缓存区song中,输入的同时可以发声和显示。当再次按9时录制完成。(2)放音子程序本子程序实现放音功能。首先从8279键盘读出键码,判断,如果键码不是18即回到程序开始,如果是,即求出相应的时间常

28、数的序号,取60次32个正弦波数据,播放32个数据,组成一个正弦波。播放60次后,从PORT1中取出值到AL,和1相与,判断是否有按键,如果有就进入死循环,直到下次按键为止。(3)放歌子程序调用放音子程序。(4)暂停子程序在乐曲播放过程中,每调用一次MUSIC,就从PORT1中取出AL,检测AL个数,即每次发音后按键盘的次数。当检测到AL为1时,即按了一次任意就使程序进入一个死循环,不发音,到此实现了暂停,然后再次按动任意键时,AL就为2,不为1,所以程序跳出死循环,继续从断开处调用乐曲,继续播放。(5)源程序整体程序开始,显示提示信息,对缓存区、8279初始化。接着调用发音子程序,键盘子程序

29、,在把AL送缓存区,实现发音和显示。接着对9键、0键、f键、r键进行逐个判断,当9按下时,调用录音子程序。当按下0时,播放录制的曲目。当按下f键时,播放程序中预设的曲目。当检测到r时,退出到DOS状态。当每一个都检测不到时,退回到调用发音子程序,继续发音显示。从而实现有扩展功能的电子琴。3.4 流程图以下用主程序与子程序配合流程图其进行说明。(1)主程序流程图开始显示缓存区,初始化8279初始化调用发音子程序调用键盘子程序键盘码送缓存区是否9键是否0键是否S键是否R键录音子程序放录音子程序放歌子程序返回DOSYNNNYYYN(2)发音子程序流程图(3)键盘显示子程序流程图 (4)显示子程序流程

30、图(5)录音子程序流程图 (6)放录音子程序流程图入口调用键盘子程序键盘码存缓存区调用发音子程序调用显示子程序把键盘码输入song,inc al是否9键返回显示提示信息NY入口显示提示信息键盘码存缓存区调用显示子程序调用发音子程序al是否9返回YN致 谢本课题在选题及研究过程中得到刘红科老师的悉心指导。刘老师多次询问课程进程,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励。刘老师一丝不苟的作风,严谨求实的态度,踏踏实实的精神,不仅授我以文,而且教我做人,虽历时三载,却给以终生受益无穷之道。对刘老师的感激之情是无法用言语表达的。同时要感谢小组成员之间的互相帮助,俗话说的好,众人拾柴火焰高

31、,团队精神自古以来都是我们取得成功必不可少的步骤,三年的社会实践,三年的论文报告,使我们深深的体会到了团结就是力量,团结就有成果,我们的成功建立在互帮互助的基础之上,我们的报告在不知不觉中圆满完成了,为我们小组成员之间的成果骄傲。在课程设计即将完成之际,我的心情无法平静,从开始进入课题到报告的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!最后我还要感谢培养我长大含辛茹苦的父母,谢谢你们!参 考 文 献1钱晓捷、陈涛 微型计算机原理及接口技术 机械工业出版社 1999.12杨素行 微型计算机系统原理及应用. 清华大学出版社1995.103钱晓捷 汇编语言程序设

32、计 电子工业出版社 2000.94周明德 微型计算机IBM PCXT系统原理及应用 清华大学出版社 1991.7附录 源程序代码DATA SEGMENTIOPORT EQU 0C400H-0280HPORT0 EQU IOPORT+2B0H ;8279 DATA PORTPORT1 EQU IOPORT+2B1H ;8279 CTRL PORTSEC1 DB 0 ;HOUR HIGHTSEC2 DB 0 ;HOUP LOWMIN1 DB 0 ;MIN HIGHTMIN2 DB 0 ;MIN LOWHOUR1 DB 0 ;SEC HIGHTHOUR2 DB 0 ;SEC LOWLED DB 3F

33、H,06,5BH,4FH,66H,6DH,7DH,07,7FH,6FH,77H,7CH,39H,5EH,79H,71H ;7段管对应的显示码DB 67H,37H,73H,31H,3EH,36H,66HIO8253A EQU IOPORT+280HIO8253B EQU IOPORT+283HIO8255A EQU IOPORT+288HIO8255B EQU IOPORT+28BHIO0832A EQU IOPORT+290HDATA1 DB 80H,96H,0AEH,0C5H,0D8H,0E9H,0F5H,0FDHDB 0FFH,0FDH,0F5H,0E9H,0D8H,0C5H,0AEH,9

34、6HDB 80H,66H,4EH,38H,25H,15H,09H,04HDB 00H,04H,09H,15H,25H,38H,4EH,66H ;正弦波数据TIME DB 120,106,94,89,79,70,63,59 ;发不同音时8253的计数器初值MSG DB*,0DH,0AHDBTHIS IS OUR WORK, PLEASE SUPPORT US, THANK YOU,0DH,0AHDB 1.PRESS 18 TO PLAY,0DH,0AH,0DH,0AHDB2.PRESS 9 TO RECORD,0DH,0AH,0DH,0AHDB3.PRESS 0 TO PLAY THE RECO

35、RD,0DH,0AH,0DH,0AHDB4.PRESS F TO PLAY THE SONG,0DH,0AH,0DH,0AHDB5.PRESS ANYKEY TO PAUSE/START WHEN PLAY THE RECORD,0DH,0AH,0DH,0AHDB6.PRESS R TO EXIT,0DH,0AH,0DH,0AHDBCOPYRIGHTMR.LI&MR.HUANG,0DH,0AHDB*,0DH,0AH,$NUM DB ? ;NUM为8253计数器初值的序号SONG DB 50 DUP(?)SONG1 DB 1,2,3,4,5,6,7,8,8,7,6,5,4,3,2,1,-1MSG

36、PLAY DB 0DH,0AH,0DH,0AH,RECORDING.PLESS 9 TO END,0DH,0AH,0DH,0AH,$MSGEND DB RECORD FINISHED.,0DH,0AH,0DH,0AH,0DH,0AH,0DH,0AH,$MSGPLAY1 DB 0DH,0AH,0DH,0AH,PLAYING.PRESS ANYKEY TO PAUSE.,0DH,0AH,0DH,0AH,$MSGEND1 DB PLAYING FINISHED.,0DH,0AH,0DH,0AH,$DATA ENDSSTACK1 SEGMENT PARA STACK STACKDB 50 DUP(0)

37、STACK1 ENDSCODE SEGMENTMAIN PROC FARASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,OFFSET MSGMOV AH,9INT 21H ;显示提示信息CLIMOV AX,DATAMOV DS,AXMOV SEC1,0MOV SEC2,0MOV MIN1,0MOV MIN2,0MOV HOUR1,0MOV HOUR2,0 ;显示缓存区初始化MOV AX,DATAMOV DS,AXMOV AX,CSMOV DS,AXMOV DX,PORT1MOV AL,0D3H ;11010011 清除命令特征位OU

38、T DX,AL ;8279 CLEARMOV AL,2AH ;00101010 42分频,内部使用1MHZ/42的频率OUT DX,AL ;8279 CLOCKMOV AL,40HOUT DX,AL ;READ FIFO RAM COMMANDMOV AL,00H ;8个字符显示,左入口。编码扫描键盘,双键锁定。OUT DX,AL ;KEYBORD DISPLY MODEMOV AL,80H ;写入的存储单元地址为0000OUT DX,AL ;WRITE RAM COMMANDKEY1:CALL MUSIC ;发音CALL KEYBORD ;CALL KEYBORD AND DISPLYNEX

39、T2:MOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区LP0:CMP AL,9HJZ RECMP AL,0HJZ OUTPUTCMP AL,15JZ FUCMP AL,13H ;R COMMANDJNZ LP1MOV AX,4C00H ;QUIT TO DOSINT 21HLP1: JMP KEY1RE:CALL RE0 ;录音JMP LP1OUTPUT:CALL OUTPUT0 ;放录音JMP LP1FU:CALL OUTPUT1JMP LP1MAIN ENDPRE0 PROC N

40、EAR ;录音子程序MOV DX,OFFSET MSGPLAYMOV AH,9INT 21H ;显示录音提示信息LEA SI,SONGR:CALL KEYBORDMOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区CALL MUSICCALL DISPMOV SI,AHCMP AH,9JZ QRE0INC SIJMP RQRE0:MOV DX,OFFSET MSGENDMOV AH,9INT 21H ;显示录音提示信息RETRE0 ENDPOUTPUT0 PROC NEAR ;放录音子程

41、序MOV DX,OFFSET MSGPLAY1MOV AH,9INT 21H ;显示PLAY提示信息LEA SI,SONGOU:MOV AL,SICMP AL,9JZ QRE1MOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区CALL DISPMOV AL,AHCALL MUSICNEXT:INC SIJMP OUQRE1:MOV DX,OFFSET MSGEND1MOV AH,9INT 21H ;显示PLAYEND提示信息RETOUTPUT0 ENDPOUTPUT1 PROC NEA

42、R ;放歌子程序MOV DX,OFFSET MSGPLAY1MOV AH,9INT 21H ;显示PLAY提示信息LEA SI,SONG1OU1:MOV AL,SICMP AL,-1JZ QRE2MOV HOUR2,ALMOV HOUR1,ALMOV MIN2,ALMOV MIN1,ALMOV SEC2,ALMOV SEC1,AL ;键盘码存入显示缓冲区CALL DISPMOV AL,AHCALL MUSICNEXT1:INC SIJMP OU1QRE2:MOV DX,OFFSET MSGEND1MOV AH,9INT 21H ;显示PLAYEND提示信息RETOUTPUT1 ENDPKEYB

43、ORD PROC NEAR ;键盘子程序MOV DX,PORT1MOV AL,0D1HOUT DX,AL ;CLEAR DISPLAYWREP:CALL DISPMOV DX,PORT1IN AL,DX ;读状态AND AL,07H ;判断是否有按键JZ WREPKEYN: ;下一次的按键MOV DX,PORT0IN AL,DX ;读数据MOV BL,ALAND AL,07HAND BL,38HMOV CL,03SHR BL,CLCMP BL,00HJNZ LINE1ADD AL,08HJMP QUIT1LINE1:CMP BL,01HJNZ LINE2JMP QUIT1LINE2:ADD A

44、L,10HQUIT1:RETKEYBORD ENDPDISP PROC NEAR ;显示子程序PUSH SIPUSH CXPUSH DXMOV AX,DATAMOV DS,AXMOV DX,PORT1MOV AL,90HOUT DX,AL ;写地址为0000的显示缓存区命令,每次写入后地址自动加1指向下一次写入地址MOV SI,OFFSET SEC1MOV CX,0001MOV BX,OFFSET LEDDISP1:CLDLODSBMOV AH,ALXLAT ;键盘码转显示码MOV DX,PORT0OUT DX,AL ;显示LOOP DISP1POP DXPOP CXPOP SIQ:RETDISP ENDPMUSIC PROC NEAR ;发音子程序PUSH SICMP AL,1JL QUITCMP AL,8JG QUIT ;若不在1-8之间转QUIT,不发音MOV NUM,AL ;求出相应的时间常数的序号MOV CX,60 ;取60次32个正弦波数据DDD:MOV SI,0LLL

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

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号