汇编接口综合实验——简易电子琴实验

合集下载

简易电子琴实验报告

简易电子琴实验报告

简易电子琴实验报告引言:本实验旨在设计和制作一台基于微控制器的简易电子琴,通过按下不同键盘上的按键产生不同音调,从而实现音乐的演奏。

电子琴采用的主要器件为微控制器、音频发声模块以及按键电路。

一、实验目的1.学习和理解数字音乐技术的基本原理;2.掌握微控制器的编程方法和音频发声的实现技术;3.熟悉电子琴的工作原理和设计过程。

二、实验器材1. 单片机:Arduino Uno;2.音频发声模块;3.面包板;4.按键;5.电阻、电容等元件;6.连线和连接器。

三、实验步骤1. 将Arduino Uno连接至音频发声模块,确保连接正确并稳定。

2.在面包板上连接按键电路,将按键与单片机的引脚相连。

3. 编写Arduino Uno的程序,实现按键按下时的音调发声。

4.上电,并测试按键是否能够产生正确的音调。

四、实验结果经过实验得到的结果如下:1.按下不同按键,电子琴会产生不同的音调。

2.通过改变程序中相应按键的频率值,可以调整音调的高低。

五、实验分析1.通过对单片机的编程,实现了按键按下时的音调发声,成功地实现了电子琴的基本功能。

2.实验中使用了音频发声模块,利用其内置的DAC(数字模拟转换器)实现了数字音频信号的模拟输出。

六、实验总结和心得体会通过本次实验,我对电子琴的工作原理和设计过程有了更深入的了解。

学习和掌握了单片机的编程方法和音频发声的实现技术,提高了我的实验能力和动手能力。

同时,也对数字音乐技术有了初步的认识。

在今后的学习和工作中,我将继续深入研究和应用这些知识,为电子音乐的发展做出自己的贡献。

基于单片机和汇编语言的简易电子琴

基于单片机和汇编语言的简易电子琴

电子信息工程学院电子设计应用软件训练任务【训练任务】:1、熟练掌握PROTEUS软件的使用;2、按照设计要求绘制电路原理图;3、能够按要求对所设计的电路进行仿真。

【基本要求及说明】:1、按照设计要求自行定义电路图纸尺寸;2、设计任务如下:利用51单片机,若干个按键,扬声器构成一个电子琴系统,按下1~7按键,分别发出相应声音。

3、按照设计任务在Proteus 6 Professional中绘制电路原理图;4、根据设计任务的要求编写程序,在Proteus下进行仿真,实现相应功能。

【按照要求撰写总结报告】成绩评定表附录I:电路原理图附录II:源程序ORG 0000HLJMP MAINORG 000BH;中断源为定时器\计数器0LJMP INTORG 0100HMAIN: MOV SP,#60HMOV TMOD,#01H;定时器\计数器0工作在方式1MOV TL0,#9CH;定时器\计数器0赋初值MOV TH0,#0FFHSETB ET0SETB EASETB P2.0JNB P1.0,IR1;对按键进行查询,低电平跳转LCALL DELAYJNB P1.1,IR2JNB P1.2,IR3JNB P1.3,IR4JNB P1.4,IR5JNB P1.6,IR7CLR TR0;定时器\计数器0停止工作INT: CLR EA;中断子程序MOV TL0,#9CHMOV TH0,#0FFHDJNZ R2,INTERCPL P2.0MOV A,R1MOV R2,AINTER: SETB EARETI;中断程序返回IR1: MOV R1,#38;子程序IR1SETB TR0;定时器\计数器0工作RET;子程序返回IR2: MOV R1,#34SETB TR0RETIR3: MOV R1,#30SETB TR0RETIR4: MOV R1,#27SETB TR0RETIR5: MOV R1,#24SETB TR0RETIR6: MOV R1,#23SETB TR0RETIR7: MOV R1,#20SETB TR0RETK: CLR TR0RETDELAY : MOV R5,#2;延时子程序DEL1: MOV R6,#200DEL2: MOV R7,#200DEL3: DJNZ R7,DEL3DJNZ R6,DEL2DJNZ R5,DEL1RETEND。

实现简易电子琴实践报告

实现简易电子琴实践报告

实现简易电子琴
1.需求分析
这个程序主要是解决利用数字键,演奏简单乐曲的问题。

具体要求是:需要输入一个未知量,一个循环函数,数字1—7每个数字发出声音的函数,其它数字代表错误的函数。

要得到的结果是:数字1—7代表的音符,可以连续输入数字。

应输出的是:连续输入数字出来一系列音符,且其它数字表示为错误。

2.程序总体设计
3.详细代码设计
4.程序运行结果
运行程序,随便键入一个数字,如果是数字1—7,电脑会发出相对应的音符,如果是其它数字,结果会显示错误。

连续输入数字,电脑会发出连续的音符,从而得到简易的电子琴。

5.运行中出现的问题、解决方法、体会
刚开始做的时候,每次只能键入一个数字,每次只能发出一个音符。

在老师的指导下,我们加入了一个循环函数,因此,每次可以连续键入数字,从而电脑可以连续发出音符。

汇编接口综合实验——简易电子琴实验

汇编接口综合实验——简易电子琴实验

简易电子琴——键盘控制电子音响发声、8x8点阵灯显示实验报告12281166 崔雪莹 12281161 安容巧 12281183 张佳悦一、实验目的1.了解小键盘的工作原理,学会如何使用小键盘进行控制,熟悉流程和代码编程;2.了解电子音响的发声原理,会利用8253A级联方式控制其发出不同频率的声音;3.了解8X8点阵灯的工作原理,学会显示想要显示的文字和图形;4.实验结合8253,8259,8255和小键盘,8*8点阵的应用共同实现。

5.实验目的效果:小键盘触发按键,控制电子音响发出相应频率的声音,8X8点阵灯显示相应的内容。

二、实验内容实验主要概述:键盘控制实现两个音部(高音部、低音部)的发声,即:当在键盘上按下‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’时,电子音响发出不同频率的低音调,当在键盘上按下‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’时,电子音响发出不同频率的高音调。

同时,在8x8灯上显示相应音调对应的‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’。

1.小键盘按键的获取:图1 小键盘原理图小键盘按键获取原理:(1)判断是否有按键按下:若某行为低电平,此时该行某按键对应某列也为低电平,则说明该按键此时被按下。

将8255A的A口03接行0到行3,B口的03接列0到列3。

A口做输出,B口做输入。

将A口输出设置为0000读取B口的此时的值,若不是全为1则说明有按键按下。

无按键按下则等待。

(2)去抖动:延时,等待按键通断引起的抖动消失。

延时后再读B端口,若还有按键闭合,则认为按键已确定。

(3)找到被按下的按键:用逐行扫描的方法读出此时按键相应的值。

从第0行开始,输出0,顺序逐行扫描。

每扫描一行,读入列线值,从0列开始,逐列检查是否为0。

若为0,则表示该列有键按下;若为1,则表示无键按下。

微机原理课程设计——简易电子琴实验

微机原理课程设计——简易电子琴实验

微机原理与接口技术课程设计——简易电子琴的设计作者:王雨轩指导老师:张金花摘要:本设计主要是利用可编程并行I/O接口芯片8255,通过对电子琴主体部分的电路进行模仿设计,达到电子琴固有的基本功能,故叫简易电子琴。

利用定时器可发出不同频率的方波的原理,使不同频率的方波进入蜂鸣器发出不同音调。

Abstract: This design mainly is to use programmable parallel I/O interface chip 8255 to design the main body part of the electronic keyboard’s circuit,to achieve the basic function of the inherent.So called simple electronic keyboard.The principle of using the timer can make different frequency square wave,let the different frequency square wave into the buzzer to make different tones.关键字:微机原理接口技术 8255 电子琴目录说明书总页数:14页简易电子琴的设计 (3)一、课题要求与内容 (3)(一)课题要求 (3)(二)课题内容 (3)(三)使用设备 (3)二、系统总体方案设计 (4)(一)系统流程图 (4)三、系统硬件设计 (5)(一)设计原理图 (5)(二)主机连线说明 (5)(三)硬件调试 (5)四、系统软件设计 (6)(一)程序清单 (6)(二)软件调试 (12)五、结束语 (13)六、参考文献 (14)简易电子琴的设计随着电子科技的飞速发展,电子技术正在逐渐改善着人们的学习、生活、工作。

计算机是一种严格按照时序进行工作的数字化、智能化机器,实现电子琴的微型化,可以用作玩具琴、音乐转盘以及音乐童车等等。

简易电子琴实验报告

简易电子琴实验报告

简易电子琴实验报告
《简易电子琴实验报告》
实验目的:通过搭建简易电子琴,了解电子琴的工作原理和基本原理。

实验材料:
1. Arduino开发板
2. 电阻
3. 电容
4. 蜂鸣器
5. 连接线
6. 电池
实验步骤:
1. 将Arduino开发板连接到电脑上,并打开Arduino IDE软件。

2. 在Arduino IDE软件中,编写一个简单的程序,使用蜂鸣器发出不同频率的声音。

3. 将电阻和电容连接到Arduino开发板上,用来调节蜂鸣器发出的声音的频率和音调。

4. 将蜂鸣器连接到Arduino开发板上。

5. 用连接线将所有部件连接起来,确保电路连接正确。

6. 将电池连接到Arduino开发板上,为电子琴供电。

实验结果:
经过以上步骤的操作,我们成功搭建了一个简易的电子琴。

通过调节电阻和电容的数值,我们可以改变蜂鸣器发出的声音的频率和音调。

通过编写程序,我
们可以让蜂鸣器发出不同的音符,从而演奏出简单的乐曲。

实验结论:
通过这次实验,我们了解了电子琴的基本原理和工作原理。

电子琴通过控制电流的频率和波形,产生不同的音符。

通过这种方式,我们可以使用电子琴演奏出各种乐曲。

同时,我们也学会了如何使用Arduino开发板和简单的电子元件搭建一个简易的电子琴。

这次实验为我们打开了电子琴的神秘面纱,让我们对电子琴有了更深入的了解。

简易电子琴实验

简易电子琴实验

哈尔滨理工大学单片机原理及接口技术课程设计报告设计题目:简易电子琴实验专业:电机与电器班级:电机10-1姓名:刘国生学号:1030350111《单片机原理及接口技术》课程设计任务书课题描述随着社会发展,计算机硬件技术越来越多的应用到生活中的各个领域,人们对软硬件技术结合开发出来的产品的要求越来越迫切,需求日益增加,如今用软硬件结合设计电子产品已经成为了一大时尚。

本设计编写的一个用开关模拟电子琴的程序,以8086作为处理器,用8255接八个开关K1~K8,做电子琴按键输入,以8253控制扬声器,拨动不同的开关,发出相应的音阶。

其中K1代表静音,K2发si的音,K3发la 的音,K4发sol的音,K5发fa的音,K6发mi的音,K7发re的音,K8发do的音。

开发工具:汇编语言;DICE-8086K实验系统。

电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。

它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。

一、课程设计目的1、通过本次课程设计加深对单片机课程的认识和掌握,对单片机的应用做进一步了解。

2、通过本次课程设计提高学生的编程能力、调试能力、文献资料查阅能力,为毕业设计和以后工作打基础。

3、学生的创新意识,巩固了解汇编语言知识并要掌握8255芯片的使用并熟悉实验系统。

4、掌握蜂鸣器的使用方法;掌握蜂鸣器的不同发音的方法。

二、实验内容1、简易电子琴原理:(1)蜂鸣器输入不同频率的方波,会发出不同的声音(2)通过按键,由单边机控制产生不同频率的方波,从而发出不同的声音。

2、实验过程(1)通过单边机,使G6区的1到7号键由低到高发出1到7的音阶。

三、功能简介本简易电子琴的设计可实现的功能如下:通过一个独立键盘可以实现对该音乐的播放和停止操作的控制。

连续按下不同的按键,可以实现乐曲的演奏。

当按下某一按键,会发出相应的音调。

微机原理与汇编语言课设——电子琴

微机原理与汇编语言课设——电子琴

微机原理与汇编语言课设——电子琴一、引言电子琴是一种常见的电子乐器,其原理主要是利用微控制器和音频芯片来实现音乐的产生和演奏。

本文将介绍微机原理与汇编语言课设中关于电子琴的设计和实现。

二、设计目标本次课设的设计目标是实现一个简单的电子琴,具备以下功能:1. 发出不同音高的音符;2. 支持多种音效,如音量调节、音色切换等;3. 支持多音同时演奏。

三、硬件设计1. 微控制器选择本次设计选用了ATmega328P微控制器作为主控芯片。

它具有丰富的外设资源,适合用于音频处理和控制。

2. 音频芯片选择为了实现音乐的产生,我们选择了一个音频芯片,例如YM2612。

它能够根据输入的音符和音效参数产生相应的音频信号。

3. 键盘电路设计电子琴的键盘通常采用矩阵键盘的设计,通过扫描键盘的状态来检测按键的触发。

我们可以使用行列扫描法来实现键盘的检测。

4. 音频输出电路设计为了将产生的音频信号输出到扬声器上,我们需要设计一个音频输出电路。

一般来说,可以使用功放电路来放大音频信号,然后通过扬声器播放出来。

四、软件设计1. 系统初始化在系统初始化阶段,我们需要对微控制器进行初始化设置,包括时钟配置、引脚配置等。

2. 键盘扫描通过行列扫描法,我们可以检测到按下的键盘按键。

一旦检测到按键按下,我们需要进行相应的处理,例如发出对应的音符。

3. 音符发声根据键盘扫描的结果,我们可以确定需要发出的音符。

通过音频芯片,我们可以将相应的音符转换为音频信号,并输出到音频输出电路。

4. 音效处理除了发出不同音高的音符外,我们还可以通过调节音量、切换音色等方式实现多种音效。

这些音效参数可以通过按键或旋钮来控制。

5. 多音演奏电子琴通常支持多音同时演奏的功能。

为了实现这一功能,我们可以通过多线程或中断的方式来处理多个音符的发声。

五、实验结果经过设计和实现,我们成功地完成了一个简单的电子琴。

它能够发出不同音高的音符,并支持多种音效。

通过按键和旋钮的操作,我们可以控制音量、音色等参数。

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

简易电子琴——键盘控制电子音响发声、8x8点阵LED灯显示实验报告12281166 崔雪莹 12281161 安容巧 12281183 张佳悦一、实验目的1.了解小键盘的工作原理,学会如何使用小键盘进行控制,熟悉流程和代码编程;2.了解电子音响的发声原理,会利用8253A级联方式控制其发出不同频率的声音;3.了解8X8点阵LED灯的工作原理,学会显示想要显示的文字和图形;4.实验结合8253,8259,8255和小键盘,8*8点阵的应用共同实现。

5.实验目的效果:小键盘触发按键,控制电子音响发出相应频率的声音,8X8点阵LED灯显示相应的内容。

二、实验内容实验主要概述:键盘控制实现两个音部(高音部、低音部)的发声,即:当在键盘上按下‘0’、‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’时,电子音响发出不同频率的低音调,当在键盘上按下‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’时,电子音响发出不同频率的高音调。

同时,在8x8LED灯上显示相应音调对应的‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’。

1.小键盘按键的获取:图1 小键盘原理图小键盘按键获取原理:(1)判断是否有按键按下:若某行为低电平,此时该行某按键对应某列也为低电平,则说明该按键此时被按下。

将8255A的A口PA0-PA3接行0到行3,B口的PB0-PB3接列0到列3。

A口做输出,B口做输入。

将A口输出设置为0000读取B口的此时的值,若不是全为1则说明有按键按下。

无按键按下则等待。

(2)去抖动:延时,等待按键通断引起的抖动消失。

延时后再读B端口,若还有按键闭合,则认为按键已确定。

(3)找到被按下的按键:用逐行扫描的方法读出此时按键相应的值。

从第0行开始,输出0,顺序逐行扫描。

每扫描一行,读入列线值,从0列开始,逐列检查是否为0。

若为0,则表示该列有键按下;若为1,则表示无键按下。

这样按顺序扫描每一行及其列值,直到找到为0列值,则该键就是被按下的键。

计算按键编号。

(4)根据找到的键号,执行键号对应的程序。

2.电子音响发声电子音响发声基本原理:8253A的1工作方式和3方式配合可以产生占空比不同的输出方波,用这种波形可控制电子音响发出不同的音调。

使用通道0和通道2,通道0 的输出OUT0作为通道2的GATE2的门控信号;通道0工作在3方式,产生一定周期的方波信号,通道2 工作在1方式;1方式虽然不是周期输出,但是在GATE2信号上升沿周期出现时,1方式可以重新计数。

通过对这两种工作方式的计数初值的合理设置,通道2可以产生不同频率的周期性信号,来控制扬声器的发声。

当3方式的方波周期大于1方式定时长度时,可通过改变1方式定时时间常数就可以改变方波的占空比(如下图2示);当3方式的方波周期小于1方式定时长度时,1方式总处于定时期间(发声停止)。

图2 波形图3.8x8点阵LED灯显示8x8LED灯的工作原理:只要在行线R1-R8加上高电平,在列线C1-C8加上低电平,则两线交叉点的LED就会发光。

通过此原理我们计算出了‘1’、‘2’、‘3’、‘4’、‘5’、‘6’、‘7’、‘8’、‘9’、‘A’、‘B’、‘C’、‘D’、‘E’、‘F’所对应的编码方案。

并通过逐列扫描并延迟的方法实现字母的显示。

图3-1 8x8点阵内部结构图图3-2 8x8点阵外部图举一个很简单的例子,将8X8点阵简化为1个平面有64个点图像,来确定其显示的编码形式,如代码中DATA部分的那个大的显示矩阵以“0”来举例说明显示8X8点阵显示过程:图3-2 8x8点阵‘0’显示8X8点阵显示“0”是因为,我们将所有的列都置高电平,然后让需要显示的发光二极管对应的点的行置低电平,其他行的则置高电平,然后把置低电平的行码记为1其他的记0,再从左向右读,则可以得到一个8位的2进制数。

如上图所示,第1行和第8行是00H,第2行和第7行是18H,第3、4、5行都是24H 则“0”显示的编码是:00H,18H,24H,24H,24H,18H,00H三、实验分析与设计1.硬件思路小键盘部分:因为小键盘的读入用的扫描法,4行必须使用输入,4列必须输出,所以我们用到8255的PA0-PA3作为输出,PB0-PB3作为输入。

8255片选接200H。

扬声器发声部分:8253使用级联方式,OUT0接GATE2,OUT2接扬声器,片选接210H。

点阵显示部分:8X8阵列行接A口,列接B口。

中断部分:PC6接MIR5中断。

2.软件分析查询流程图如下:图4-1 主程序图4-2 小键盘子程序图4-3 发声子程序图4-4 8x8LED灯子程序四、实验硬件连线图根据以上描述的硬件设计思路,电路连接线应如下图所示。

图5-1 发声子程序实验连线图图5-2 小键盘子程序(含数码管)实验连接图图5-3 8X8LED灯子程序实验连接图五、实验创意我们应用了小键盘模块、扬声器和8x8点阵LED模块,同时结合8253A定时计数模块,8255并行接口模块,8299中断模块将整个实验联系起来,实现了一个简易电子琴的装置。

同时在8x8点阵显示了按键对应的字符显示,让这个电子琴看起来更加炫!8*8点阵我们最初想随着音调的高低变化亮度和点的多少,在实现的时候发现效果并不明显,所以我们改成随着按键发声来显示对应的字符,效果比之前好得多。

另外,发声频率由8253A写入计数控制,基本音有7个,加上一个高一调,而键盘可控制16个,所以我们分为高音部和低音部,实现了一个转换音的效果,更加人性化。

其实,我们有更高的愿望,比如,我们希望可以小键盘弹奏一首歌后按键实现自动播放整首歌曲的功能,这样就更加完整了,但是因时间和能力关系没能实现。

我们还想用128x64LCD实现一个音阶才的实时变化,希望我们在今后的学习之余回顾这个实验时可以补上这些功能。

六、实验结果演示1.实际实验连线图黄线8255的A口连8*8点阵的行1~8,小键盘的行0~3,红线B口连点阵的列1~8,小键盘的列0~3。

绿线表示8253的级联和cs接法,黑线连接扬声器SIN和out2,中断MIR5接PC6。

2.8x8点阵各字母显示图(部分举例,未全部贴图)(‘2’‘5’‘8’‘9’‘A’‘B’‘D’‘E’)3.声音视频见文件“实验效果视频”。

七、实验体会崔雪莹:本次实验我主要负责程序代码的编写和整个实验的设计,通过此次实验,我对于硬件编程有了更为深入的了解,懂得了怎样编写硬件的较大一点的程序,尤其是写代码的时候一定要思路清晰,明确的知道自己到底想要做些什么,怎么去设计这个实验,通过此次试验对于今后的硬件学习打下了很好的基础。

经过这次试验,我对8255等芯片以及小键盘、8X8LED灯、电子音响的工作原理有了更为全面、更为深刻的理解,锻炼自己独立的利用手上芯片进行独立编程的能力。

实验还有继续改进的地方,我会继续学习,更加深入的去学习和研究。

安容巧:本次试验是接口课中最复杂的一次实验,第一次实验课之前我们小组就去实验室讨论试验内容,确定了试验内容之后开始代码的初步编写。

经过实验课和老师的指导,我们完善了设计方案,经过多次课下小组自己找时间自己做实验,最终完成了试验。

经过这次试验,我们队8255等芯片以及小键盘、8X8LED灯、电子音响的工作原理有了更为全面、更为深刻的理解。

小组一起做实验,一起讨论,让我们学会了团队合作,对以后的学习工作很有帮助。

张佳悦:本实验考查的内容很多,不仅有课堂上所学习的汇编与接口的知识,还对我们团队小组的分工协作提出了很高的要求。

我们小组成员分工明确、各尽所能,为整个设计性实验的完成作出了贡献。

同时,在和小组成员的交流中,我也强化了自己对汇编程序的理解以及对接口知识的巩固。

最后的成果,我个人感到非常满意,达到了预期的效果。

汇编与接口方面还有很多我们不太会用但的确重要的东西需要我们在接下来的学习中深入研究和探索。

_______________________________________________________________________________附件:程序清单(加注释).model small.386DATA SEGMENTKEY_NO DB ?;用来存储按键编号;8*8点阵显示时字符D0 DB 00H,18H,24H,24H,24H,24H,18H,00H ;‘0’D1 DB 00H,18H,18H,18H,18H,18H,18H,00H ;‘1’D2 DB 00H,3CH,20H,20H,3CH,04H,04H,3CH ;‘2’D3 DB 00H,3CH,20H,20H,3CH,20H,20H,3CH ;‘3’D4 DB 00H,24H,24H,24H,3CH,20H,20H,20H ;‘4’D5 DB 00H,3CH,04H,04H,3CH,20H,20H,3CH ;‘5’D6 DB 00H,3CH,04H,04H,3CH,24H,24H,3CH ;‘6’D7 DB 00H,3CH,20H,20H,20H,20H,20H,20H ;‘7’D8 DB 00H,3CH,24H,24H,3CH,24H,24H,3CH ;‘8’D9 DB 00H,3CH,24H,24H,3CH,20H,20H,3CH ;‘9’DA DB 18H,3CH,66H,66H,7EH,66H,66H,66H ;‘A’DB1 DB 00H,1CH,24H,24H,14H,24H,24H,14H ;‘B’DC DB 00H,18H,24H,04H,04H,24H,18H,00H ;‘C’DD1 DB 00H,1CH,24H,24H,24H,24H,1CH,00H ;‘D’DE DB 00H,3CH,04H,04H,3CH,04H,04H,3CH ;‘E’DF DB 00H,3CH,04H,04H,3CH,04H,04H,04H ;‘F’NUMER DB 7FH,5BH,6DH,6FH,40H,77HDIPIN DW0EE8H,0D49H,0BD6H,0B41H,9F7H,8E1H,7E8H,778H,7A6H,700H,66BH,600H,55BH,500H,454H,400H;频率表即计数器计数初值DATA ENDS ;前8个低音,后8个高音CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX, DATAMOV DS, AXCLIMOV DX, 21H ;设置主片中断屏蔽字IN AL, DXAND AL, 11011111B ;使用MIR5OUT DX, ALCALL PREPARE ;调用PREPARE子程序,写入中断向量表LOP:CALL INKEY ;调用INKEY子程序,检测按键CALL SHOWALPHA ;调用SHOWALPHA子程序, 8X8点阵显示字母JMP LOP ;循环MOV AX, 4CH ;程序结束INT 21H;中断服务程序INTER PROC ;中断服务程序,进中断发声PUSH DX ;保护寄存器PUSH AXCLI ;关中断CALL LOUD ;调用发声子程序MOV DX, 20H ;发EOI中断结束命令MOV AL, 20H ;OCW2,非自动结束OUT DX, ALSTI ;开中断POP AXPOP DXIRETINTER ENDP;发声子程序LOUD PROCPUSH AXPUSH DXMOV DX, 213H ;初始化8253通道0MOV AL, 00110110B ;命令字,通道0,3方式OUT DX, ALMOV DX, 210HMOV AX, 0FF40H ;通道0,赋初值8000OUT DX, AL ;先写低字节MOV AL, AHOUT DX, AL ;再写高字节MOV DX, 213H ;初始化8253 通道2MOV AL, 10110010B ;命令字,1方式,方波OUT DX, ALMOV DX, 212H ;通道2MOV SI, OFFSET DIPIN ;频率表首地址送SIMOV AL, KEY_NO ;取键盘编号MOV AH, 0ADD SI, AX ;相加得到键盘编号对应的计数初值MOV AX, [SI] ;取得对应的计数初值,送扬声器发声OUT DX, ALMOV AL, AHOUT DX, ALCALL DELAY ;调用延时子程序MOV DX, 213H ;将通道0的周期改成小于通道二让发声停止 MOV AL, 00110110B ;通道0 3方式OUT DX, ALMOV DX, 210HMOV AX, 00F4H;通道0赋初值500OUT DX, AL ;先写低字节MOV AL, AHOUT DX, AL;再写高字节POP DXPOP AXRETLOUD ENDP;检测键盘子程序INKEY PROCMOV DX, 213H ;按键之前不发声MOV AL, 00110110B ;通道0,3方式OUT DX, ALMOV DX, 210HMOV AX, 01F4H ;通道0赋初值500OUT DX, AL ;先写低字节MOV AL, AHOUT DX, AL ;再写高字节CLIMOV DX, 203H ;初始化8255MOV AL, 10000010B ;A输出,B读入OUT DX, ALMOV DX, 200H ;输出PA为0以便下面获得是否有按键按下MOV AL, 0OUT DX, ALWAIT1:MOV DX, 201H ;读入PB的值IN AL, DXAND AL, 0FH ;屏蔽无关位CMP AL, 0FH ;检测是否有列线为0JZ WAIT1 ;没有按键输入就退出函数CALL DELAY ;调用延时子程序BEGIN2: ;检测按下的是哪一个按键MOV CH, 04H ;循环检测4行MOV CL, 0FFH ;-1,保存按键编码MOV BL, 0EH ;行屏蔽码LOP2:MOV AL, BL ;从第0行开始扫描MOV DX, 200H ;把AL指示的行线置零OUT DX, ALMOV DX, 201HIN AL, DX ;读入列线状态AND AL, 0FH ;屏蔽无关位CMP AL, 0FH ;若某位为0,则表明检测到按键JNZ SAVEADD CL, 4 ;无按键,跳过一行键盘编号SHL BL, 1 ;移动到下一行DEC CH ;行数减一JNZ LOP2 ;继续扫描JMP BEGIN2 ;检测完4行,无按键按下,跳转到等待按键SAVE: ;保存按键号INC CLSHR AL, 1JC SAVE ;得到键盘编号ADD CL, CLMOV KEY_NO, CL ;保存键盘编号STIMOV DX, 203H ;PC6按位置位触发中断MOV AL, 00001101BOUT DX, AL ;发高电平NOPNOPMOV AL, 00001100B ;发低电平OUT DX, ALRETINKEY ENDP;写中断向量表子程序PREPARE PROC NEARPUSH AXCLICLDMOV AX, 0MOV ES, AXMOV DI, 4*35HMOV AX, OFFSET INTERSTOSWMOV AX, SEG INTERSTOSWSTIPOP AXRETPREPARE ENDP;8x8点阵显示子程序SHOWALPHA PROCPUSH AXPUSH BXPUSH CXPUSH DXMOV BL, KEY_NO ;判断是否有按键按下CMP BL, -1 ;寄存器BL中数据与-1比较;大于1则证明有按键,反之则无按键MOV BH, 3FH ;将3FH送到BH中,代表了8X8点阵有64个 JZ END1;初始化8255MOV DX, 203HMOV AL, 10000000B ;A输出,B输出OUT DX, ALNEXT1:MOV BL, 00000001BMOV SI, OFFSET A ;得到偏移量MOV AL, 8MUL LED_NOADD SI, AXMOV CL, 8NEXT:MOV DX, 201HMOV AL, BLOUT DX, ALMOV DX, 200HMOV AL, [SI]OUT DX, ALCALL DELAY1CALL DELAY1CALL DELAY1CALL DELAY1INC SISHL BL, 1DEC CL;刷完8列后就跳出 JNZ NEXTDEC BHJNZ NEXT1END1:POP DXPOP CXPOP BXPOP AXRETSHOWALPHA ENDP;延时子程序DELAY1 PROCPUSH AXMOV AX,0FFHL: DEC AXJNZ LPOP AXRETDELAY1 ENDP;延时子程序DELAY PROC NEARPUSH AXMOV AX, 0FFFFHW: DEC AXJNZ WMOV AX, 0FFFFHW2: DEC AXJNZ W2POP AXRETDELAY ENDPCODE ENDSEND START八、成员分工崔雪莹(第一完成人):整体代码框架,小键盘、中断、8255、显示8x8点阵等代码,撰写的实验报告包括实验目的,实验原理小键盘部分和电子琴发声部分,绘制全部实验原理图、实验流程图和实验连接图,实验分析,实验结果分析和图片,实验的全部代码及注释,实验报告的排版等。

相关文档
最新文档