微机课程设计报告。
设计题目电子琴设计。
学院电子与信息学院
班级。姓名。
学号 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 字符串动画显示。所显示字符串在一矩形框内从无到有,从右至左移动,完全从框内移出后,又从右至左移动,直...