2023年微机原理课程设计电子琴

发布 2021-12-28 10:50:28 阅读 7722

微机课程设计报告。

设计题目电子琴设计。

学院电子与信息学院

班级。姓名。

学号 2009

一.设计内容:

编程使小键盘的数字键1,2,3,4,5,6,7,8作为电子琴按键,输入对应的8个音阶,通过实验箱的喇叭发出声音,并通过七段数码管显示输入音阶。增加功能:按1~8数字键同时点亮相应的8个led灯,使具有声、光效果。

二.元件与仪器:

实验台(5255,8253,dac0832,七段数码管)、计算机。

三.设计原理及思路(画出电路的连接图和流程图),1.设计说明:

1)给d/a转换器(dac0832)输入按正弦规律变化的数据, 在其输出端即产生正弦波,是扬声器发音。根据不同音阶具有不同频率,可通过调节向d/a转换器输出数据的时间间隔,使扬声器发出不同的音调。定时时间可以由8253配合8255来实现。

对于**,每个音阶都有确定的频率。如下表:

各音阶标称频率值:

2)产生一个正弦波的数据可取32个(小于亦可),不同频率的区别,可通过调节向d/a转换器输出数据的时间间隔,例如:发"1"频率为261.1hz,周期为 1/261.

1 = 3.83ms,输出数据的时间间隔为 3.83ms/32 = 0.

12ms。定时时间可以由8253配合8255来实现。按下某键后发音时间的长短可以由发出的正弦波的个数多少来控制。

3)将8255的pc0~pc6分别与七段数码管的段码驱动输入端a~g相连,位码驱动输入端s1接+5v(选中),s0、dp接地(关闭)。可以编程从键盘输入一位十进制数字(0~9),在七段数码管上显示出来。

4)将8255的pa1~pa7分别与八个led正极相连,可编程在每次循环中改变一次8255a口的输入输出状态使输出相应的位数的高电平驱动led即可用被点亮的led个数来表示不同的音阶。

2.电路连接图:

3.流程图:

四,源程序:

data segment

ioport equ 0c400h-0280h

io8253a equ ioport+281h

io8253b equ ioport+283h

io8255a equ ioport+288h

io8255b equ ioport+28bh

io8255c equ ioport+28ah

io0832a equ ioport+290h

data1 db 80h,96h,0aeh,0c5h,0d8h,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取32点/周期的正弦波数据。

time db 120,106,88,75,69,60,55,53发不同音时8253的计数器初值。

led db 06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh,0ffh ;控制七段数码管显示数据。

portc1 db 01h,03h,07h,0fh,1fh,3fh,7fh,0ffh ;控制创新功能所用到的led灯的输出值。

msg db 'press 1,2,3,4,5,6,7,8,esc:',0dh,0ah,'$输入提示。

num dbnum为8253计数器初值的序号。

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov dx,offset msg

mov ah,9

int 21h显示提示信息。

sss: mov ah,7

int 21h从键盘接收字符,不回显。

cmp al,1bh

je exit若为esc键,则转exit

cmp al,31h

jl sss

cmp al,38h

jg sss若不在'1'-'8'之间转sss

sub al,31h

mov num,al求出相应的时间常数的序号。

mov cx,60取60次32个正弦波数据。

ddd: mov si,0

lll: mov al,data1[si] ;取正弦波数据。

mov dx,io0832a

out dx,al放音。

call delay调延时子程序。

inc si

cmp si,32是否取完32个数据。

jl lll若没有,则继续。

loop ddd总循环次数60是否完,没有,则继续。

mov al,80h

mov dx,io8255b ;设8255的a c口输出。

out dx,al

mov al,num

mov bx,offset portc1

xlat查表取点亮led灯个数的数据。

mov dx,io8255a

out dx,al从8255的a口输出。

mov al,num

mov bx,offset led ;bx为数码表的起始地址。

xlat求出相应的段码赋给al

mov dx,io8255c ;从8255的c口输出。

out dx,al

jmp sss

exit: mov ah,4ch

int 21h

delay proc near ;延时子程序。

ccc: mov bx,offset time

mov dx,io8253b;置8253通道1为方式0

mov al,50h

out dx,al

mov dx,io8255b ;设8255a口输入。

mov al,90h

out dx,al

mov al,num ;取相应的时间常数。

xlat查表取值赋给al

mov dx,io8253a

out dx,al ;向8253通道0输出。

kkk: mov dx,io8255a

in al,dx ;从8255a口读一字节。

test al,01 ;判pa0口是否为1

jz kkk ;若不为1,则转kkk,即等待8253计数。

ret子程序返回。

delay endp

code ends

end start

五.实际调试完成情况及其分析。

1.理论调试方法:

1)先设计电子琴功能,即没有数码管显示和led灯指示功能;

2)再设计数码管显示功能,然后设计led灯指示功能;

3)最后检查优化。

2.实际设计调试过程:

1)选择电子琴设计这个题目是我们组三个人商量一致通过的结果,很大的原因是这个题目要用到8255和8253这两块微机课上重点讲的ic,我们可以借此机会进一步熟悉和掌握。

2)用led灯指示音阶这个想法是我联想到平时用的**器界面上的跳动起伏时想起来的。

3)由于有示例,电子琴功能很容易就做出来了,但是我们没有做到理解每一句**,特别是调用延时子程序前后逻辑,使喇叭发音的原理也是一知半解。

4)忙于实现下一功能:完成发音功能之后我们就想把数码管显示和led灯指示一并实现,但是很快就发现这样子难免造成8255的pa或pc口输入输出发生冲突,也就是如果pa口做输入,就剩下pc口输出了。我们最起码需要两个7位的输出端口,但是必然要有一个是输入,冲突就是这样出来的。

提出方案1:把pc口分开成pc0—pc3和pc4—pc7都作输出,立马被否定,因为数码管有a—g7个控制口,led灯也要7位控制。

提出方案2:不断改变pa或pc口的输入输出状态,不过这仅仅停留在设想上,因为之前从未做过类似的尝试。后来老师过来听了我们的设计和思路,肯定了我们的这个方案。

5)于是我们便开始尝试,先不改变8255的控制字,实现电子琴和数码管显示,通过比较数码管静态显示字的实验,尝试了几个地方,我们把数码管显示**加在电子琴程序的延时子程序中,初步成功了。

6)但是随后问题出现了,“弹琴时”发出的音调明显发生能改变还正常就不正常了,基本都一样的音调。我们想只要调节发不同音时8253的计数器初值就可以了,最终勉强调出来了,但是开始明白此乃下策,我们要做的是找出导致“变音”的原因,然后才可以以不变应万变,不用每次都修改计数初值这个标准。 一行一行地看**,我们一点一点分析,老师在一旁**、提点,半个小时过去了,我们发现原来调节向d/a转换器输出数据的时间间隔,可以使扬声器发出不同的音调,这个时间间隔就是由delay proc near 这个延时子程序完成的,我们把**加到延时里面,每一个音要执行32*60次延时子函数,即每个调是由32*60次发音组成的,而在已经算好的延时子函数里再加入几条指令,显然对发音的频率有很大的影响,所以会“变音”。

我们试着把显示数码管的程序放到延时后面,也就是先喇叭发音后显示。很快就奏效了。

(7)最后一步是加上led指示,有了上面的经验,只需要在显示数码管的后面加改变8255pa口为输出,再使8255pa对应于输出01h、03h、07h、0fh、1fh、3fh、7fh、0ffh 点亮led灯。但是加上程序段之后,却没有声音~,经分析原来是我们把显示和只是**放到loop ddd前面了,音只发了1/60就把9255的pa口改成输出了。最后把显示和指示**放到发完音之后,终于完成了。

微机原理课程设计封面

时间安排 本周开始,下周一前将选题统计表以邮件的方式发给苏老师和张老师。本学期十月末交 课程设计说明书和程序及汇编生成的文件 每个同学以学号姓名建一个文件夹。同时安排答辩。迟交的一律不予接收。选题规则 1 8班同学顺次排号,第一个同学从第一题开始选,到第121个同学轮回再选第一题。每一个班选硬件题目...

微机原理课程设计要求

1 时间安排 16 17周,12月15日 12月25日,完成课程设计任务,包括撰写设计报告。12月26日,答辩 地点由答辩小组老师确定 没在规定时间答辩,以缺考处理,成绩0分。2 编程要求 在pc机上使用汇编语言编写程序。使用dos功能调用或bios调用实现要求的功能3 报告要求 题目分析和设计思路...

微机原理课程设计题目

课程设计题目。一 题目一。字符串动画显示。设计内容要求 1 菜单。内容包括 输入字符串 字符串动画显示 退出。2 输入字符串。选择该项后,可以输入一个字符串。该字符串即为动画显示时所显示的字符串。3 字符串动画显示。所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从右至左移动,直...