简易电子琴设计
通过设计实践,培养学生查阅专业资料,工具书或参考书,了解有关工业 标准,掌握现代设计手段和软件工具, 并能以图纸和说明书表达设计思想和结果 的能力。
通过设计,不但要培养和提高学生解决工程具体问题,动脑动手的技术工 作能力,而且还要逐步建立科学正确的设计和科研思想,培养良好的设计习惯, 牢固树立实事和严肃认真的工作态度。
3
有无键按下
程序结束
开始程序
键值送CPU处理取对应频率
初始值送8254发出方波
调用延迟控制发音长短
确定按键位置
时钟频率除对应频率得初始值
无条件转移
定义8255,8254控制字
停止发声
4
系
XDo
统
1
XD7
XAi
XA2
CLK
10丫3
IOW#
IOR#
Do8254
1
D7
Ao
Ai
CLKo
OUTo
CS
GATAo
;有键按下时跳到INK1
;没键按下时循环执行
确定按下键的位置
BEGIN
INK1: CALL CCSCAN
JNZ INK2
;有键按下时跳到INK2
JMP BEGIN;
没键按下时循环执行
BEGIN
INK2: MOV CH,0FEH
;确定按下键在第一列
MOV CL,00H
;将CL清零
COLUM: MOV AL,CH
MOV DX,MY8255_A
;将8255的A口地址赋给DX
OUT DX,AL
;将CPU中的AL值送至U8255
x3
的A口中,即送到x1、x2、
、x4中
MOV DX,MY8255_C
J
将8255的C口地址赋给DX
IN AL,DX
;将C口的值送至AL中
L1: TEST AL,01H
;检验按下键是否在L1
OUT DX,AL
;写8255芯片的控制字实
现工作在方式0,A端口
和B端口输出,C端口输
入
MOV DX,MY8254_MODE
MOV AL,36H
OUT DX,AL
;使8254工作在方式3,
A
口输入,运用计数器
0,二进制方式
BEGIN: CALL CCSCAN
JNZ INK1
JMP BEGIN
;扫描
WR
RD
+5V
电子发声
单元SPK
5
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
其中8254和课本中学的8253在原理上是一样的,它为可编程定时器/计 数器。利用计数器0,并使它工作在方式3---输出对称方波, 通过改变频率来实 现不同的发声高低, 再调用延时子程序来实现发音的长短, 把输出方波送到扬声 器,至此实现不同的音符发声。
过程中主要用到了8255芯片的PB0—PB4,PA0—PA4它们分别与键盘单元的Xi—X4,Yi—Y4相连,其中B口低4位为输出端,B口低4位1为输入端。由它们对 键盘单元进行扫描,并确定键值工作过程为:先给所有列线输入低电平,然后读取 行线,检测行线是否为低电平,如果有某条行线输出低电平,则说明该键盘有按键 被按下,否则,说明无按键被按下.采用这种方法可以快速判断键盘是否有键按 下。在检查到有键按下后,再通过行扫描法判断按下的位置,从而确定按下的是什 么键,经过计算得出计数器1#的初值。
;跳转到BEGIN重复扫描
NEXT: INC CL
;使CL加1,为了后面用来与
FREQ_LIS■数据段中数对应
;强制跳转至KCODE
L3: TEST AL,04H
;检验按下键是否在L3
JNZ L4
;不是L3则跳到L4
MOV AL,08H
;为了后面用来与FREQ_LIST
数据段中数对应。
JMP KCODE
;强制跳转到KCODE
LHale Waihona Puke : TEST AL,08H;检验按下键是否在L4
JNZ NEXT
;不是L4则跳到NEXT
DW 262D,294D,330D,373D,402D,450D,494D,-1D
DATA ENDS
;建立数据段
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
;实现段寄存器DS的初始化
MOV DX,MY8255_MODE
MOV AL,81H
JNZ L2
;不是L1则跳至L2
MOV AL,00H
;为了后面用来与FREQ_LIST
JMP KCODE
数据段中数对应
;强制跳转至KCODE
L2: TEST AL,02H
;检验按下键是否在L2
JNZ L3
;不是L2则跳至L3
MOV AL,04H
;为了后面用来与FREQ_LIST
JMP KCODE
数据段中数对应。
MOV DX,0FH
MOV AX,4240H
MOV SI ,30D
;被除数为0F4240H
DIV WORD PTR[SI]
;除数为SI=30所指的数据
MOV DX,MY8254_A
OUT DX,AL
;将8255的A口地址赋给DX
MOV AL,AH
OUT DX,AL;
实现静音,结束一个音符的发音
JMP BEGIN
1.2.2基本要求
1.可以弹出7个音阶。
2.弹奏简短音乐。
3.通过改变键盘输入来改变8254输出频率,实现扬声器发音
2
通过8255和8254来实现电子琴模拟,主要由两部分组成:第一部分为键 盘扫描,用来确定按键位置,并给计数器赋初值。第二部分为发声部分,由计数器1#的输出端产生一定频率的方波驱动扬声器发声。
1
1.1
简易电子琴设计
1.2
利用微机原理试验箱,设计简易电子琴,要求至少可以弹出7个音阶。
1.2.1设计目的 通过本学期对微机原理的学习, 掌握的知识还停留在理论的上。 但是这是 一门实践性较强的课程, 让学生在学完该课程之后, 进行一次课程设计, 使学生 将课堂所学的知识和实践有机结合起来, 初步掌握计算机应用系统设计的步骤和 接口设计的方法,提高分析和解决实际问题的能力。
MOV AL,0CH
;为了后面用来与FREQ_LIST
数据段中数对应。
KCODE: ADD AL,CL
MOV DL,2D
;实现AL与CL的无进位加法
MUL DL
;将AL乘以2结果保存到AX中
CALL DALLY
CALL DALLY
CALL DALLY
LOOP NEXT3
;CX不为0重复执行NEXT3