已阅读5页,还剩17页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
沈阳工程学院微机原理及其应用课程设计摘 要 微机原理课程设计设计简易电子琴 本实验是利用微机原理试验箱、8255芯片、8254芯片、键盘、扬声器等硬件设备,设计简易电子琴。首先利用了编程程序,编辑了8255芯片控制字, 对其进行初始化,使其工作在方式0,即基本输入输出状态,将8255的A端口设置为输出,C端口进行,经CPU运算后, 输出到8254芯片中,由此实现对其的初始化。将8254芯片设置为工作在方式3,即输出对称方波状态。A端口为输入,“OUT”指令可将输出对应一定频率的方波送到扬声器中,由此实现发声。本实验通过频率大小控制发出声音的高低,通过对延时程序的调用控制发出声音的长短。并通过所编程序实现对键盘的重复扫描,重而可以弹奏多个音符的试验目的。关键词 8254芯片 8255芯片 电子发声元件 键盘目 录 摘要.I1.1 实验内容.11.2 实验要求.11.3 工作原理.31.3.1 按键部分.31.3.2 发声部分.31.4 程序流程图.41.4.1 按键部分 .41.4.2 发声部分.51.5 硬件连接图及音符频率.61.6 芯片简介.7 1.6.1 8254芯片简介7 1.6.2 8255芯片简介91.7 程序代码.111.7.1 按键部分代码11 1.7.2 发声部分代码.151.8 键盘与数码显示管工作原理.17 总结.18致谢.19参考文献.20 正文1.1 实验内容:利用定时/计数器8254实现音乐演奏。1.2 实验要求:(1)配合延时和控制程序控制扬声器发声(演奏音乐)。 (2)把键盘当作电子琴按键进行演奏。1.3 工作原理1.3.1 琴键部分:本程序是通过并行接口芯片8255对键盘进行扫描(对于键盘单元的工作原理见正文第9点),将8255芯片的PA0PA4,PC0PC4它们分别与键盘伤的X1X4,Y1Y4相连, 根据控制字81H,决定工作在方式0,A端口和B端口输出,C端口输入,由其C口将按键情况输入到CPU中,在CPU中进行一系列运算,通过定时器8254将不同频率的波形经OUTO输入到扬声器中,从而实现扬声器的发音。 本实验中8254的工作方式为方式3 ,输出的波形为对称方波。由于系统中8254的CLK端已固定接好频率为1MHZ的方波信号,所以要控制其输出端OUT0输出不同的频率只要根据通过写入不同的计数初值就能实现。 公式为:CLK0端的输入频率/OUT0端的输出频率=计数初值N通过频率的大小控制音阶的不同,通过延时程序控制发音的长短,由此达到实验要求。 1.3.2 发声部分:发生部分由8254完成:一个音符对应一个频率,将对应一个音符频率的方波通到扬声器上,就可以发出这个音符的声音。将一段乐曲的音符对应频率的方波依次送到扬声器,就可以演奏出这段乐曲。利用8254的方式3“方波发生器”,将相应一种频率的计数初值写入计数器,就可产生对应频率的方波。计数初值的计算如下:计数初值 输入时钟 输出频率例如输入时钟采用1MHz,要得到800Hz的频率,计数初值即为1000000800。音符与频率对照关系如表1所示。对于每一个音符的演奏时间,可以通过软件延时来处理。首先确定单位延时时间程序(根据CPU的频率不同而有所变化)。然后确定每个音符演奏需要几个单位时间,将这个值送入DL中,调用DALLY子程序即可。 1.4. 程序流程图开始1.4.1 按键部分对8255、8254进行初始化扫描键盘是否有键按下确定按键位置将对应键值经COU计算,结果作为为计数器的初值N送入82548254输出对应频率控制扬声器发声多次调用延迟子程序实现静音并中断扫描图1.1 按键部分1.4.2 发声部分开始初始化8254芯片及8255芯片工作方式装入频率表和时间起始地址取出频率值计算出计数初值并装入计数器0取出演奏相对时间值调用延时子程序两个指针递增是否到曲末 结束是否 图1.2 发声部分1.5 硬件连接图及音符频率键 X1盘 数 X4码 管 Y1显示 Y2单元PA0 D0PA3 D7PC0 A0PC3 A2 WR RD CS8255单元XD0 XD0XD7 XD7XA1 XA1XA2 XA2IOW IOWIOR IORIOY0 IOY3 CLK系统总线D0D7 GATE0A0A1 OUT0WRRDCSCLK08254单元扬声器+5VV 图1.3硬件连接图及音符频率.6. 芯片简介1.6.1 8254芯片简介1) D0-D7双向数据线,用以传送数据和控制字。计数器的计数值亦通过此数据总线进行读写。2) CS输入信号,低电平有效。作为片选。3) RD读控制信号,低电平有效。4) WR写控制信号,低电平有效5) A0、A1为8254的内部计数器和一个控制寄存器的编码选择信号6) CLK0是每个计数器的时钟输入端。计数器对此时钟信号进行计数。CLK最高频率可达2MHZ。7) GATE0-GATE2门控制信号,即计数器的控制输出信号,用来控制计数器的工作。8) OUT0-OUT2计数器输出信号,用来产生不同方式工作时的输出波形9) 8254具有3个独立的16位计数器,6种不同的工作方式。计数寄存器用来寄存计数初值,计数工作单元为16位减1计数器,它的初值便是计数寄存器内容,计数单元对CLK脉冲计数,每出现一个CLK脉冲,计数器减1,当CLK端出现了规定个数的脉冲时,OUT输出一个脉冲信号。10) 本实验中,我们用到的引脚有:D0-D7、A0-A1、WR、RD、CS、CLK0、GATE0、OUT0等;设定工作在方式3用来产生方波、应用计数器0。表1 8254的方式控制字格式表2 8254读出控制字格式表3 8254状态字格式1.6.2 8255芯片简介1) D0D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。2) PA0PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入锁存器。3) PB0PB7:端口B输入输出线,一个8位的I/O锁存器, 一个8位的输入输出缓冲器。4) PC0PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器, 一个8位的数据输入缓冲器。端口C可以通过工作方式设定而分成2个4位的端口, 每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。5) CS:片选信号线,当这个输入引脚为低电平时,表示芯片被选中,允许8255与CPU进行通讯。6) RD:读信号线,当这个输入引脚为低电平时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。7) WR:写入信号,当这个输入引脚为低电平时,允许CPU将数据或控制字写入8255。8) RESET:复位输入线,当该输入端外于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。9) A1、A0:端口地址总线,8255中有端口A、B、C和一个内部控制字寄存器,共4个端口,由A0、A1输入地址信号来寻址。10) 本实验用到的引脚有PA0-PA3、PC0-PC3、D0-D7、A0、A1、WR、RD、CS 、和GND ;设定工作在方式0,A口输出、B口输出、C口低4位输入。 图1.4 8255内部结构及引脚表4 8255 工作方式控制字图1.7 程序代码1.7.1 按键部分代码MY8255_A EQU 0600HMY8255_B EQU 0602HMY8255_C EQU 0604H MY8255_MODE EQU 0606HMY8254_MODE EQU 06C6HMY8254_A EQU 06C0H ;进行宏定义MYDATA SEGMENTCHUSHU DW 441D,495D,556D,589D,661D,742D,833D,882D,221D,248D,278D,294D,330D,371D,416D,-1DMYDATA ENDS ;建立数据段 MYDATAMYCODE SEGMENT ;建立数据段 MYCODE ASSUME CS:MYCODE,DS:MYDATASTART: MOV AX,MYDATA MOV DS,AX ;实现段寄存器DS的初始化 MOV DX,MY8255_MODE MOV AL,81H 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 NUM1 ;有键按下时跳到NUM1 JMP BEGIN ;没键按下时循环执行 ; BEGIN;=;确定按下键的位置;=NUM1: CALL CCSCAN JNZ NUM2 ;有键按下时跳到NUM2 JMP BEGIN ;没键按下时循环执行BEGINNUM2: 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 ;检验按下键是否在L1 JNZ L2 ;不是L1则跳到L2 MOV AL,00H ;为了后面用来与CHUSHU ;数据段中数对应 JMP KCODE ;强制跳转到KCODEL2: TEST AL,02H ;检验按下键是否在L2 JNZ L3 ;不是L2则跳到L3MOV AL,04H ;为了后面用来与CHUSHU ;据段中数对应。JMP KCODE ;强制跳转到KCODEL3: TEST AL,04H ;检验按下键是否在L23 JNZ L4 ;不是L3则跳到L4MOV AL,08H ;为了后面用来与CHUSHU数据段中数对应 JMP KCODE ;强制跳转到KCODEL4: TEST AL,08H ;检验按下键是否在L4 JNZ NEXT ;不是L4则跳到NEXTMOV AL,0CH ;为了后面用来与CHUSHU ;据段中数对应。KCODE: ADD AL,CL ;实现AL与CL的无进位加法 MOV DL,2H MUL DL ;将AL乘以2结果保存到AX中PLAY: LEA SI,CHUSHU ;使SI指向CHUSHU的首地址 ADD SI,AX ;通过SI加AX 实现指针SI的移动 MOV DX,0FH MOV AX,4240H ;被除数为0F4240H DIV WORD PTRSI ;除数为SI所指的数据 MOV DX,MY8254_A ;将8255的A口地址赋给DX OUT DX,AL ;输出商的低4位 MOV AL,AH OUT DX,AL ;输出商的高4位 MOV CX,8H ;输入计数值CX NEXT3: CALL DALLY ;调用延时子程序DALLY CALL DALLYCALL DALLYCALL DALLYCALL DALLYLOOP NEXT3 ;CX不为0重复执行NEXT3 MOV DX,0FH MOV AX,4240H ;被除数为0F4240H MOV SI ,30D DIV WORD PTRSI ;除数为SI=30所指的数据 MOV DX,MY8254_A ;将8255的A口地址赋给DX OUT DX,AL MOV AL,AH OUT DX,AL ;实现静音,结束一个音符的发音 JMP BEGIN ;跳转到BEGIN,重复扫描NEXT: INC CL ;使CL加1,为了后面用来与CHUSHU 数;据段中数对应 MOV AL,CH TEST AL,08H JZ KERR ;无键按下时跳转到KERR ROL AL,1D ;向左移位 MOV CH,AL JMP COLUM ;强制跳转到COLUMKERR: JMP BEGIN ;跳到BEGIN重新开始扫描;=;键盘扫描子程序;=CCSCAN: MOV AL,00H MOV DX,MY8255_A OUT DX,AL ;使8255芯片A端口输出 ;为0,既使x1、x2、x3、 ;X4为0 MOV DX,MY8255_C IN AL,DX ;将从C端口输入的y1、y2、y3、y4送到AL中 NOT AL ;将AL取反 AND AL,0FH ;将AL前4位清零 RET;=;延时子程序;=DALLY: PUSH CX ;将CX压栈 MOV CX,000FH T1: MOV AX,0009FHT2: DEC AX ;使AX减1JNZ T2 ;AX不为0重复T2LOOP T1 ;CX不为0重复T1POP CX ;将CX出栈RETMYCODEENDS ;代码段定义结束END START ;程序结束1.7.2 发声部分代码; 端口定义IOY3EQU 06C0HIOY1EQU 0640HMY8254_COUNT0EQU IOY3+00H ;8254计数器0端口地址MY8254_COUNT1EQU IOY3+02H ;8254计数器1端口地址MY8254_COUNT2EQU IOY3+04H ;8254计数器2端口地址MY8254_MODEEQU IOY3+06H ;8254控制寄存器端口地址MY8255_AEQU IOY1+00H ;8255输入输出0端口地址MY8255_BEQU IOY1+02H ;8255输入输出1端口地址MY8255_CEQU IOY1+04H ;8255输入输出2端口地址MY8255_MODEEQU IOY1+06H ;8255控制寄存器端口地址 STACK1SEGMENT STACKDW 256 DUP(?)STACK1ENDSDATASEGMENT FREQ_LIST DW 371,495,495,495,624,556,495,556,624 DW 495,495,624,742,833,833,833,742,624 DW 624,495,556,495,556,624,495,416,416,371 DW 495,833,742,624,624,495,556,495,556,833 DW 742,624,624,742,833,990,742,624,624,495 DW 556,495,556,624,495,416,416,371,495,0TIME_LIST DB 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 1, 3, 6, 2 DB 4, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 12, 4, 6, 2, 4, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 12, 4, 6, 2, 4, 4 DB 6, 2, 4, 4, 6, 2, 4, 4, 12DATAENDSCODESEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV DX,MY8254_MODE;ASSUME CS:CODE,DS:DATA ;初始化8254工作方式MOV AL,36H ;定时器0、方式3OUT DX,ALMOV DX, MY8255_MODE ;初始化8255MOV AL, 90H ;A口输入,B口输出OUT DX, ALXIE: MOV DX, MY8255_AIN AL, DXMOV DX, MY8255_BOUT DX, ALCALL DALLY CMP AL,01H JZ BEGIN JMP BEGINBEGIN:MOV SI,OFFSET FREQ_LIST ;装入频率表起始地址MOV DI,OFFSET TIME_LIST ;装入时间表起始地址JMP PLAYPLAY:MOV DX,0FH ;输入时钟为1MHz,1M = 0F4240H MOV AX,4240H DIV WORD PTR SI ;取出频率值计算计数初值,0F4240H / 输出频率 MOV DX,MY8254_COUNT0OUT DX,AL ;装入计数初值MOV AL,AHOUT DX,ALMOV DL,DI ;取出演奏相对时间,调用延时子程序 CALL DALLYADD SI,2INC DICMP WORD PTR SI,0 ;判断是否到曲末?JE XIEJMP PLAYDALLYPROC ;延时子程序D0:MOV CX,0010HD1:MOV BX,0FF0HD2:DEC BXJNZ D2LOOP D1DEC DLJNZ D0RETDALLYENDPCODEENDSEND START1.8 键盘与数码显示管工作原理 13141516910111256781234 (L4)Y4如图 (L3)Y3 X组对应8255芯片的A口(X值为0) (L2)Y2 Y组对应8255芯片的C口(Y值为1) (L1)Y1 。 X1 X2 X3 X4 图1.5键盘与数码显示管 当有键按下时,该键的X、Y接触,Y值变为0,改变了输入8255芯片C口的数值,从而与程序中的L1,L2,L3,L4对应,确定按键位置。实现通过改变键盘输入来改变8254输出频率,实现扬声器发音。总 结 这次的课程设计让我掌握了,并且巩固了课堂上所学的知识内容,学以致用是工科学生必须学会的,在刚开始,我们在网络上查阅资料,有关电子发生原理的很多程序,以及音乐曲谱,之后翻译成简谱,根据程序原理,编辑进入其中。 关于运行的程序,我们的设计还有一些瑕疵,程序没有终止指令,只能靠手动终止,只能一边又一遍的播放所编辑的曲目,这是要我们要改进的。 任何一个计算机系统都是一个复杂的整体,有主程序,子程序。而我们不仅学习书本上的知识,我们还通过此次课设更加深刻的了解所学的内容,增强了自我动手操作能力。并且通过小组的方式工作,我们相互合作,相互学习,增强了团队意识。在其中老师给我们的指导是非常重要的,老师总会提供给我们一些思路,且鼓励我们的创新意识,对我们的想法灌于一些更加具体的内容。老师孜孜不倦地教诲和指导,是我们此
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026国家管网集团校园招聘(河北招17人)考试参考试题(浓缩500题)有完整答案详解
- 2025国网湖南省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题附答案详解(综合题)
- 2026国网福建省高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题附答案详解(培优)
- 2025国网广西高校毕业生提前批招聘(约450人)笔试模拟试题浓缩500题附答案详解(培优a卷)
- 2026秋季国家管网集团华中公司高校毕业生招聘笔试备考试题(浓缩500题)含答案详解(夺分金卷)
- 2026秋季国家管网集团广西公司高校毕业生招聘笔试模拟试题(浓缩500题)附答案详解(突破训练)
- 2026秋季国家管网集团西北公司高校毕业生招聘考试参考试题(浓缩500题)含答案详解ab卷
- 2025国网辽宁省电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题含答案详解
- 2025国网湖北省电力校园招聘(提前批)笔试模拟试题浓缩500题附答案详解(考试直接用)
- 2026国网天津市电力公司高校毕业生提前批招聘笔试模拟试题浓缩500题及答案详解(夺冠)
- 七年级上册历史期中考试试卷
- 液压支架修理的工艺流程图
- 支局一点一策
- 麻风病防治知识课件
- 工程项目管理(第五版)丛培经 第一章
- 中药制剂检验的程序
- 溜槽脚手架专项施工方案
- 下丘脑和垂体
- 麻醉药品与第一类精神药品不良反应防治课件
- 花卉鉴赏与花文化课件
- 自考马克思主义基本原理概论试题及答案解析
评论
0/150
提交评论