微机原理课程设计电子琴_第1页
微机原理课程设计电子琴_第2页
微机原理课程设计电子琴_第3页
微机原理课程设计电子琴_第4页
微机原理课程设计电子琴_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、micro-computer - to achieve flower procedures abstract with 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

2、. china 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

3、 awareness 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 desi

4、gn process. 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 soun

5、ds, 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

6、 or 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 电子琴的设计内容 .2 2 元件与仪器介绍 .3 2.1 8253 的介绍 .3 2.1.1 8253 的工作原理.3 2.1.2 8253 初始化编程.5 2.2 对 8255 的认识 .6 2.2.1 8255 引脚功能.6 2.3 8088

9、功能介绍 .7 2.4 dac0832 .9 2.4.1 da 转换 dac0832 的原理与应用.9 3 设计原理、思路及流程图 .11 3.1 设计原理 .11 3.2 电路连接图 .11 3.3 设计思路 .12 3.3.1 简单电子琴主程序.12 3.4 流程图 .13 致 谢.16 参 考 文 献.17 附录 1 源程序代码 .18 附录 2 系统原理图 .26 1 电子琴的设计内容 随着计算机技术与微电子技术的发展,微型计算机的发展相当迅速,特别是从 ibm 公 司推出的 ibmpc 个人计算机以来,微型计算机很快的由八位微型机过渡到十六位机。在 我国也不例外,很多单位在事务管理,

10、数值计算,数据采集与处理,工业自动化等方面都 选用了十六位机。因此,对于广大从事微机应用的工程技术人员来说,十六位机的认识愈 来愈需要了。 编写一实现电子琴的程序,并实现若干扩展功能。基本功能:用 8257 键盘输入对应的 七个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶; 扩展功能:录音:记录所弹奏曲目;放录音:任意时刻重放最新记录曲目;在程序中 可预设一曲目,按一键实现播放该曲目;在播放录制曲目或预设曲目时,按 8279 键盘上任 意键可以暂停播放,再按一次从暂停处继续播放;程序运行时有友好的用户介面。 2 元件与仪器介绍 本设计所要用到的元器件有:计时器 8253,使用

11、8088 芯片的键盘控制器,并行控制器 8255a,实验台。 2.1 8253 的介绍 8253是可编程的计数器/定时器,其内部有三个独立的16位计数器/定时器通道,每个计 数器通道均可按6种不同的方式工作,并且都可以按二进制或十进制计数。 2.1.1 8253 的工作原理 8253是可编程的计数器/定时器,其clk0clk2是计数器02的时钟脉冲输入端, gate0gate2是门控脉冲输入端, out0out2是输出端及内部结构见下图。 当用8253做外部事件计数器时,在clk端所加的计数脉冲由外部事件产生,这些脉冲的间 隔可以不相等。如果要用它做定时器,则clk端应输入精确的时钟脉冲。这时

12、, 8253所能实 现的定时时间决定于计数脉冲的频率和计数器的初值,即定时时间=时钟脉冲周期tc 预置 的计数初值n8253的控制逻辑由5个控制信号wr、cs、a1和a0组成,对应的操作见表1。 8253编程时,要对其控制字寄存器写入相应的控制字,控制字寄存器格式如表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,

13、m0工作方式选择位。8253 具有3 个独立的16 位减法计数器,6 种不同的工作方式。 方式0 :又称计数结束产生中断工作方式。当程序将工作方式控制字写入控制字寄存器 时,计数器的输出端out 立即变为低电平。在计数初值写入该计数器后,输出仍将保持为低 电平。当门控信号gate 为高电平时,计数器对输入端clk的输入脉冲开始作减一计数,当计 数器从初值减为0 时,输出端out由低电平变为高电平,该输出信号可作为向cpu 发出的中断 请求信号。 方式1 :又称可编程单稳态工作方式。功能是在gate 信号的上升沿作用下,输出端out 产生一个负脉冲信号,负脉冲的宽度可由定时器的计数初值和时钟频率

14、编程确定。 方式2 :又称频率发生器工作方式。当程序将工作方式控制字写入控制字寄存器时,计 数器的输出端out立即变为高电平。在写入计数初值后,计数器对输入时钟clk计数。在计数 过程中out 保持不变,直到计数器从初值减为1 时,输出out 将变低,再经过一个clk周期, out 恢复为高电平,并按已设定的计数初值重新开始计数。在需要产生某个脉冲信号或将某 一个较高频率的脉冲信号分频为较低频率时,可使用8253 的方式2。 方式3 :又称方波发生器工作方式。方式3 的工作类似于方式2 ,不同之处是方式3 的 输出out 是方波。 方式4 :又称软件触发选通工作方式。其功能是在输出out 端隔

15、一定时间产生一价目负 脉冲。 与方式0 不同的是,输出脉冲的宽度是固定的,但产生负脉冲所相隔时间是可编程的。 方式5 : 又称硬件触发选通工作方式。方式5的工作类似于方式4 ,不同之处是gate 信 号的作用 不同。方式5 的计数过程由gate 的上升沿触发,当计数结束时,out 将输出一个clk周期的 低电平信号。 其中方式0的工作过程如下:当程序送一控制字将所选的计数器置于所设定的方式后,该 计数器的输出为低;当计数器初值装入被选中的计数器后,在外部输入的门控高电平的控制 下,则可通过各自的计数脉冲进行递减计数。此时其输出仍为“低”。当计数器从初始值减 到全“0”时,便产生一高电平输出,利

16、用此输出信号向cpu发计数完中断;此中断请求一直保 持到程序再次向计数器装入初值为止。 bcd计数方式选择位。1 表示按十进制计数, 0表示按二进制计数。 2.1.2 8253 初始化编程 编程时,可选择计数器1工作在方式0。在8253的方式0工作方式中,从将计数初值写入计 数器到开始减1计数之间,有一个时钟脉冲的延迟。若计数初值为n = 999,那么经过n + 1个 即1000个脉冲时计数值减为0,并在out1端输出一正跳变,这可以作为中断请求。在中断服务 子程序中cpu可以做其他处理,如送下一个包装箱等。设计数初值为1999 (要求一个包装箱 内装工件2000) ,按十进制计数,先送低8位

17、,再送高8位,控制字为01110001b。 初始化程序为: mov al, 01110001b al, 01110001b mov dx, 0356h out dx,al ;送方式控制字 mov al, 99h mov dx, 0352h out dx,al ;向通道1送计数初值低8位 mov al, 19h out dx,al ;向通道1送计数初值高8位 2.2 对 8255 的认识 单片机系统里常用的 8255 芯片是一个典型的可编程通用并行接口芯片,用来扩展单片 机的端口,它具有 3 个 8 位的并行口,有三种工作方式,可作为单片机与各种外部设备连接 的接口电路! 下面介绍 8255 的

18、引脚图及引脚功能。 2.2.1 8255 引脚功能 123456 a b c d 654321 d c b a title numberrevisionsize b date:16-oct-2002sheet of file:e:-.ddbdrawn by: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21 pa3 pa2 pa1 pa0 rd cs gnd a0 a1 pa7 pa6 pa5 pa4 pa0 pa1 pa2

19、 pa3 pb0 pb1 pb2 pa5 pa6 pa7 pa0 wr reset d0 d1 d2 d3 d4 d5 d6 d7 vcc pa7 pa6 pb5 pb4 pb3 8255 8255 引脚功能说明: reset:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被 清除,所有 i/o 口均被置成输入方式。 pa0pa7:端口 a 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入 锁存器。 pb0pb7:端口 b 输入输出线,一个 8 位的 i/o 锁存器, 一个 8 位的输入输出缓冲器。 pc0pc7:端口 c 输入输出线,一个 8

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

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

22、能。 (1) 数据总线 d0d15 16 位(8088 仅 8 位),双向传输, 可分别使用其低 8 位或高 8 位,该总线与地址总 线 a0a15共用 cpu 引脚形成复用总线 ad0ad15, 地址、数据分时传送。 (2) 地址总线 a0a19 20 位,单向,地址由 cpu 产生,用于寻址访问存储器单元或 io 端口。a0a15与 d0d15复 用,a16a19与状态信号 s3s6复用(a16/s3 a19/s6)。其中 ad15ad0地址数据复用信号 (标号 216、39),双向,三态。 在总线周期的 t1状态(地址周期)ad15ad0上出现 的 是低 16 位的地址信号 a15a0;

23、在 t3状态(数据周期)ad15ad0上出 现的是数据信号 d15d0。 作为分时复用管脚,因为既做地址信号,又做数据信号,因此是双向信号。 在总线周 期的 t1状态 ad15ad0输出 cpu 所要访问的存储器或者 i/o 端口的地址; 而在总线周期的 t3状态,ad15ad0上出现的是 cpu 和存储器或 i/o 端口交换的数据。t2状态对于读周期和 写周期来说 ad15ad0上的状态是不同的: 在是读周期, ad15ad0要从 cpu 驱动(地址周 期)切换为存储器或 i/o 端口驱动(数据周期),ad15ad0管脚需要在一个状态周期内维 持高阻状态,以便不同总线驱动源的切换。如果是写周

24、期,地址和数据信号都是由 cpu 驱 动,所以 cpu 从 t2开始便输出数据。t2t3都是数据周期。 a19/s6a16/s3 (address/status):地址状态复用信号(标号 3538),输出。 在 总线周期的 t1状态(地址周期)a19/s6a16/s3上出现的是地址的高 4 位。在 t2t4状态, a19/s6a16/s3上输出状态信息。 (3) 状态信号 s3s6 s6:指示 8086 当前是否与总线相连。s60 表示 8086 连在总线上。 s5:表示中断允许标志状态。s51 表示中断允许标志 if1(对可屏蔽中断请求起作 用)。s50 表示 if0,禁止可屏蔽中断。 s4

25、和 s3用来指出当前使用的段寄存器。 s4、s3代码组合对应的含义如表 4.2.1 所示: s4s3 当前正在使用的段寄存器 00es 01ss 10 cs 或未使用任何段寄存器 11ds 表 4.2.1 地址和状态信号也都是由 cpu 驱动, 所以 t1地址周期之后,紧接着的 t2t4是状态 周期。 (4) 控制信号 与 cpu 工作模式无关的信号有: bhe#、nmi、intr、rd#、clk、reset、ready#、test#、mn/mx#、gnd 2.4 dac0832 dac0832 是采样频率为八位的 d/a 转换器件,下面介绍一下该器件的中文资料以及电路 原理方面的知识。 da

26、c0832 内部结构资料:芯片内有两级输入寄存器,使 dac0832 具备双缓冲、单缓冲和 直通三种输入方式,以便适于各种电路的需要(如要求多路 d/a 异步输入、同步转换等)。 d/a 转换结果采用电流形式输出。要是需要相应的模拟信号,可通过一个高输入阻抗的线 性运算放大器实现这个供功能。运放的反馈电阻可通过 rfb 端引用片内固有电阻,海可以 外接。 该片逻辑输入满足 ttl 电压电平范围,可直接与 ttl 电路或微机电路相接,下面是芯 片电路原理图 2.4.1 da 转换 dac0832 的原理与应用 dac0832 是 8 位分辨率 d/a 转换集成芯片,与处理器完全兼容,其价格低廉,

27、接口简 单,转换控制容易等优点,在单片机应用系统中得到了广泛的应用。 (1) dac0832 的引脚及功能 di0di7:数据输入线,tll 电平。 ile:数据锁存允许控制信号输入线,高电平有效。 cs:片选信号输入线,低电平有效。 wr1:为输入寄存器的写选通信号。 xfer:数据传送控制信号输入线,低电平有效。 wr2:为 dac 寄存器写选通输入线。 iout1:电流输出线。当输入全为 1 时 iout1 最大。 iout2: 电流输出线。其值与 iout1 之和为一常数。 rfb:反馈信号输入线,芯片内部有反馈电阻. vcc:电源输入线 (+5v+15v) vref:基准电压输入线

28、(-10v+10v) agnd:模拟地,摸拟信号和基准电源的参考地. dgnd:数字地,两种地线在基准电源处共地比较好. 3 设计原理、思路及流程图 3.1 设计原理 (1)对于一个特定的/转换接口电路,cpu 执行一条输出指令将数据送入/, 即 可在其输出端得到一定的电压输出。给/转换器输入按正弦规律变化的数据, 在其输 出端即可产生正弦波。对于音乐,每个音阶都有确定的频率。 各音阶标称频率值: (2)产生一个正弦波的数据可取32个(小于亦可) ,不同频率的区别,可通过调节向 转换器输出数据的时间间隔,例如:发频率为261。1hz,周期为1/261.1=3.83ms, 输出数据的时间间隔为3

29、.83ms/320.12ms. 定时时间可以由8253配合8255来实现。按下某 键后发音时间的长短可以由发出的正弦波的个数多少来控制。本程序中设置默认长度为60 个正弦波。 3.2 电路连接图 电路连接图如下: (1)8253 和 8255 连接如下 (2)8279键盘在一个扩充板上,用一根20芯扁平电缆与实验台上扩展插头j7相连。 3.3 设计思路 在本次课程设计中,根据复杂程序设计思想模块化程序设计,分析和确定程序总 体设计目标:电子琴基本功能及部分扩展功能后,将总体目标划分为若干模块。 程序设计的思路按以下顺序进行: a. 分析与确定程序总体设计目标 b. 将总体目标划分为若干模块 c

30、. 定义每个模块的具体任务,明确它与其他模块间的通信方式 d. 编写源程序,进行调试。 3.3.1 简单电子琴主程序 结合实验指导书的两程序,将其分为5个子程序,实现简单的播放和显示音阶的功能。 (1)录音子程序 实现记录弹奏曲目并播放的功能。首先由9触发,将输入的音阶存入缓存区song中,输 入的同时可以发声和显示。当再次按9时录制完成。 (2)放音子程序 本子程序实现放音功能。首先从8279键盘读出键码,判断,如果键码不是18即回到 程序开始,如果是,即求出相应的时间常数的序号,取60次32个正弦波数据,播放32个数 据,组成一个正弦波。播放60次后,从port1中取出值到al,和1相与,

31、判断是否有按键, 如果有就进入死循环,直到下次按键为止。 (3)放歌子程序 调用放音子程序。 (4)暂停子程序 在乐曲播放过程中,每调用一次music,就从port1中取出al,检测al个数,即每次发 音后按键盘的次数。当检测到al为1时,即按了一次任意就使程序进入一个死循环,不发音, 到此实现了暂停,然后再次按动任意键时,al就为2,不为1,所以程序跳出死循环,继续 从断开处调用乐曲,继续播放。 (5)源程序整体 程序开始,显示提示信息,对缓存区、8279初始化。接着调用发音子程序,键盘子程 序,在把al送缓存区,实现发音和显示。接着对9键、0键、f键、r键进行逐个判断,当9按 下时,调用录

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

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

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

35、理及应用. 清华大学出版社1995.10 3钱晓捷 汇编语言程序设计 电子工业出版社 2000.9 4周明德 微型计算机ibm pcxt系统原理及应用 清华大学出版社 1991.7 附录 源程序代码 data segment ioport equ 0c400h-0280h port0 equ ioport+2b0h ;8279 data port port1 equ ioport+2b1h ;8279 ctrl port sec1 db 0 ;hour hight sec2 db 0 ;houp low min1 db 0 ;min hight min2 db 0 ;min low hour1

36、 db 0 ;sec hight hour2 db 0 ;sec low led db 3fh,06,5bh,4fh,66h,6dh,7dh,07,7fh,6fh,77h,7ch,39h,5eh,79h,71h ;7段管 对应的显示码 db 67h,37h,73h,31h,3eh,36h,66h io8253a equ ioport+280h io8253b equ ioport+283h io8255a equ ioport+288h io8255b equ ioport+28bh io0832a equ ioport+290h data1 db 80h,96h,0aeh,0c5h,0d8h

37、,0e9h,0f5h,0fdh db 0ffh,0fdh,0f5h,0e9h,0d8h,0c5h,0aeh,96h db 80h,66h,4eh,38h,25h,15h,09h,04h db 00h,04h,09h,15h,25h,38h,4eh,66h ;正弦波数据 time db 120,106,94,89,79,70,63,59 ;发不同音时8253的计数器初值 msg db*,0dh,0ah dbthis is our work, please support us, thank you,0dh,0ah db 1.press 18 to play,0dh,0ah,0dh,0ah db2

38、.press 9 to record,0dh,0ah,0dh,0ah db3.press 0 to play the record,0dh,0ah,0dh,0ah db4.press f to play the song,0dh,0ah,0dh,0ah db5.press anykey to pause/start when play the record,0dh,0ah,0dh,0ah db6.press r to exit,0dh,0ah,0dh,0ah dbcopyrightmr.linum为8253计数器初值的序号 song db 50 dup(?) song1 db 1,2,3,4,

39、5,6,7,8,8,7,6,5,4,3,2,1,-1 msgplay 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 ends stack1 s

40、egment para stack stack db 50 dup(0) stack1 ends code segment main proc far assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset msg mov ah,9 int 21h ;显示提示信息 cli mov ax,data mov ds,ax mov sec1,0 mov sec2,0 mov min1,0 mov min2,0 mov hour1,0 mov hour2,0 ;显示缓存区初始化 mov ax,data mov ds,ax mov

41、 ax,cs mov ds,ax mov dx,port1 mov al,0d3h ;11010011 清除命令特征位 out dx,al ;8279 clear mov al,2ah ;00101010 42分频,内部使用1mhz/42的频率 out dx,al ;8279 clock mov al,40h out dx,al ;read fifo ram command mov al,00h ;8个字符显示,左入口。编码扫描键盘,双键锁定。 out dx,al ;keybord disply mode mov al,80h ;写入的存储单元地址为0000 out dx,al ;write

42、ram command key1: call music ;发音 call keybord ;call keybord and disply next2: mov hour2,al mov hour1,al mov min2,al mov min1,al mov sec2,al mov sec1,al ;键盘码存入显示缓冲区 lp0: cmp al,9h jz re cmp al,0h jz output cmp al,15 jz fu cmp al,13h ;r command jnz lp1 mov ax,4c00h ;quit to dos int 21h lp1: jmp key1 r

43、e:call re0 ;录音 jmp lp1 output:call output0 ;放录音 jmp lp1 fu:call output1 jmp lp1 main endp re0 proc near ;录音子程序 mov dx,offset msgplay mov ah,9 int 21h ;显示录音提示信息 lea si,song r: call keybord mov hour2,al mov hour1,al mov min2,al mov min1,al mov sec2,al mov sec1,al ;键盘码存入显示缓冲区 call music call disp mov s

44、i,ah cmp ah,9 jz qre0 inc si jmp r qre0: mov dx,offset msgend mov ah,9 int 21h ;显示录音提示信息 ret re0 endp output0 proc near ;放录音子程序 mov dx,offset msgplay1 mov ah,9 int 21h ;显示play提示信息 lea si,song ou: mov al,si cmp al,9 jz qre1 mov hour2,al mov hour1,al mov min2,al mov min1,al mov sec2,al mov sec1,al ;键盘

45、码存入显示缓冲区 call disp mov al,ah call music next: inc si jmp ou qre1: mov dx,offset msgend1 mov ah,9 int 21h ;显示playend提示信息 ret output0 endp output1 proc near ;放歌子程序 mov dx,offset msgplay1 mov ah,9 int 21h ;显示play提示信息 lea si,song1 ou1: mov al,si cmp al,-1 jz qre2 mov hour2,al mov hour1,al mov min2,al mo

46、v min1,al mov sec2,al mov sec1,al ;键盘码存入显示缓冲区 call disp mov al,ah call music next1: inc si jmp ou1 qre2: mov dx,offset msgend1 mov ah,9 int 21h ;显示playend提示信息 ret output1 endp keybord proc near ;键盘子程序 mov dx,port1 mov al,0d1h out dx,al ;clear display wrep: call disp mov dx,port1 in al,dx ;读状态 and al

47、,07h ;判断是否有按键 jz wrep keyn: ;下一次的按键 mov dx,port0 in al,dx ;读数据 mov bl,al and al,07h and bl,38h mov cl,03 shr bl,cl cmp bl,00h jnz line1 add al,08h jmp quit1 line1: cmp bl,01h jnz line2 jmp quit1 line2: add al,10h quit1: ret keybord endp disp proc near ;显示子程序 push si push cx push dx mov ax,data mov d

48、s,ax mov dx,port1 mov al,90h out dx,al ;写地址为0000的显示缓存区命令,每次写入后地址自动加1指向下一次写 入地址 mov si,offset sec1 mov cx,0001 mov bx,offset led disp1: cld lodsb mov ah,al xlat ;键盘码转显示码 mov dx,port0 out dx,al ;显示 loop disp1 pop dx pop cx pop si q:ret disp endp music proc near ;发音子程序 push si cmp al,1 jl quit cmp al,8 jg quit ;若不在1-8之间转quit,不发音 mov num,al ;求出相应的时间常数的序号 mov cx,60 ;取60次32个正弦波数据 ddd: mov si,0 lll: mov al,data1si ;取正弦波数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论