logo资料库

8086系统简易电子琴设计.doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
简单的电子琴设计 哈 尔 滨 理 工 大 学 课 程 设 计 题 目: 简易电子琴 院、 系: 荣成学院 电气系 姓 名: 魏 星 指导教师: 刘 菲 菲 系 主 任: 王 哈 力 2012 年 7 月 4 日 1
简单的电子琴设计 目录 一、设计题目......................................................................................................................1 二、设计内容......................................................................................................................1 三、设计目的......................................................................................................................1 四、设计要求.............................................................................................................................1 五、设计原理......................................................................................................................1 六、元器件功能简介.......................................................................................................1 七、设计原程序及注解................................................................................................. 6 八、程序流程图..................................................................................................................... 10 九、程序接线图...............................................................................................................11 2
简单的电子琴设计 一、设计题目: 简易电子琴设计 二、设计内容: 利用微机原理试验箱,设计简易电子琴。 三、设计目的: 通过课程设计使学生更进一步掌握微机原理及应用课程的有关知识,提高应 用微机解决问题的能力,加深对微机应用的理解。通过查阅资料,结合所学知识 进行软、硬件的设计,使学生初步掌握应用微机解决问题的步骤及方法。为以后 学生结合专业从事微机应用设计奠定基础。 四、设计要求: 1.可以弹出 7 个音阶。 2.弹奏简短音乐。 3.通过改变键盘输入来改变 8254 输出频率,实现扬声器发音 五、设计原理: 音符与频率的关系如表所示,而持续时间则取决于乐曲的速度和每个音符持 续的长短。在拍号为 4/4 的乐曲中,每小节包含4拍,全音符持续4拍,二分音 符持续2拍,四分音符持续1拍,八分音符持续半拍等等。根据乐曲进行速度, 假设一个全音符分配1S 时间,则每拍持续时间为250MS。如果持续时间的最 小单位是10MS,则相应的拍长时间数据为25,该数据存放在 BX 寄存器中, 从而可以确定每个音符的持续时间。 音 符 频 率 1 2 3 4 5 6 7 1 2 3 4 5 6 7 1 131 147 165 175 196 220 247 262 294 330 349 392 440 494 523 六、元器件功能简介: 1.8255 引脚功能 RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制 寄存器)均被清除,所有 I/O 口均被置成输入方式。 CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许 8255 与 CPU 进行通讯。 3
简单的电子琴设计 RD:读信号线,当这个输入引脚为低电平时,允许 8255 通过数据总线向 CPU 发送数据或状态信息,即 CPU 从 8255 读取信息或数据。 WR:写入信号,当这个输入引脚为低电平时,允许 CPU 将数据或控制字写入 8255。 D0~D7:三态双向数据总线,8255 与 CPU 数据传送的通道,当 CPU 执行输入 输出指令时,通过它实现 8 位数据的读/写操作,控制字和状态信息也通过数据 总线传送。 PA0~PA7:端口 A 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入锁存器。 PB0~PB7:端口 B 输入输出线,一个 8 位的 I/O 锁存器, 一个 8 位的输入输 出缓冲器。 PC0~PC7:端口 C 输入输出线,一个 8 位的数据输出锁存器/缓冲器, 一个 8 位的数据输入缓冲器。端口 C 可以通过工作方式设定而分成 2 个 4 位的端口, 每个 4 位的端口包含一个 4 位的锁存器,分别与端口 A 和端口 B 配合使用,可作 为控制信号输出或状态信号输入端口。 A1、A0:端口地址总线,8255 中有端口 A、B、C 和一个内部控制字寄存器, 共 4 个端口,由 A0、A1 输入地址信号来寻址。 本实验用到的引脚有 PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS 、 和 GND 。 4
简单的电子琴设计 A组控制 B组控制 7 6 5 4 3 2 1 0 控制C口低4位 1:输入 0:输出 控制B口8位 1:输入 0:输出 方式选择 0:方式0 1:方式1 控制C口高4位 0:输出 1:输入 控制A口8位 0:输出 1:输入 方式选择 00:方式0 01:方式1 11:方式2 功能控制 0:位操作 1:方式选择 图 1. 8255 的控制字格式 2.8254 可编程计数/定时器 芯片完成对外部脉冲信号的各种处理。8254 芯片内部具有三个独立的 16 位 计数器,它可用程序设置成多种工作方式,按十进制计数或二进制计数,最高计 数速率可达 10MHz。 8254 的全部功能是由 CPU 编程设定的。CPU 通过输出指令给 8254 装入控制字, 从而设定其功能。8254 控制字格式如下: D7 D6 D5 D4 SC1 SC0 RL1 RL0 D3 M2 D2 M1 D1 M0 D0 BCD 各位的功能见表 1~表 4: 表 1 SC1、SC0 - 计数器选择 SC1 SC0 选择计数器 0 0 1 1 0 1 0 1 选择 0# 选择 1# 选择 2# 使用方法参见 8254 使用说明 5
简单的电子琴设计 表 2 RL1、RL0-CPU 读/写操作 RL1 RL0 0 0 1 1 0 1 0 1 操作类型 计数器封锁操作 读/写计数器低 8 位 读/写计数器高 8 位 先读/写低 8 位,后读/写高 8 位 表 3 M2、M1、M0 -工作方式选择 M3 M2 M1 计 数 工 作 方 式 0 0 0 0 1 1 0 0 1 1 0 0 BCD 0 1 0 1 0 1 0 1 方 式 0 方 式 1 方 式 2 方 式 3 方 式 4 方 式 5 表 4 BCD-计数方式选择 数 码 形 式 十六位二进制计数 四位十进制 ( BCD ) 码计数 6
简单的电子琴设计 七、设计原程序及注解 程序代码: MY8255_A EQU 0600H MY8255_B EQU 0602H MY8255_C EQU 0604H MY8255_MODE EQU 0606H MY8254_MODE EQU 06C6H MY8254_A EQU 06C0H DATA SEGMENT ;进行宏定义 FREQ_LIST DW 441D,495D,556D,589D,661D,742D,833D,882D, 262D,294D,330D,373D,402D,450D,494D,-1D DATA ENDS ;建立数据段 CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,MY8255_MODE MOV AL,81H OUT DX,AL MOV DX,MY8254_MODE MOV AL,36H OUT DX,AL ;实现段寄存器 DS 的初始化 ;写 8255 芯片的控制字,实 现工作在方式 0,A 端口和 B 端口输出,C 端口输入 ;使 8254 工作在方式 3,A 口输入,运用计数器 0,二 进制方式 7
简单的电子琴设计 BEGIN: CALL CCSCAN ;扫描 JNZ INK1 JMP BEGIN ;有键按下时跳到 INK1 ;没见按下时循环执行 BEGIN ;确定按下键的位置 INK1: MOV CH,0FEH ;确定按下键在第一列 MOV CL,00H ;将 CL 清零 COLUM: MOV AL,CH MOV DX,MY8255_A ;将 8255 的 A 口地址赋给 DX OUT DX,AL ;将 CPU 中的 AL 值送到 8255 的 A 口中,即送到 x1、x2、 x3、x4 中 MOV DX,MY8255_C ; 将 8255 的 C 口地址赋给 DX IN AL,DX ;将 C 口的值送到 AL 中 L1: TEST AL,01H JNZ L2 MOV AL,00H ;检验按下键是否在 L1 ;不是 L1 则跳到 L2 ;为了后面用来与 FREQ_LIST 数据段中数对应 JMP KCODE ;强制跳转到 KCODE L2: TEST AL,02H ;检验按下键是否在 L2 JNZ L3 MOV AL,04H ;不是 L2 则跳到 L3 ;为了后面用来与 FREQ_LIST 数据段中数对应。 JMP KCODE ;强制跳转到 KCODE 8
分享到:
收藏