八音盒文档格式.docx

上传人:b****5 文档编号:18963673 上传时间:2023-01-02 格式:DOCX 页数:21 大小:755.73KB
下载 相关 举报
八音盒文档格式.docx_第1页
第1页 / 共21页
八音盒文档格式.docx_第2页
第2页 / 共21页
八音盒文档格式.docx_第3页
第3页 / 共21页
八音盒文档格式.docx_第4页
第4页 / 共21页
八音盒文档格式.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

八音盒文档格式.docx

《八音盒文档格式.docx》由会员分享,可在线阅读,更多相关《八音盒文档格式.docx(21页珍藏版)》请在冰豆网上搜索。

八音盒文档格式.docx

(二)实验原理图

1.8255芯片连接图

8255的C口接实验台小键盘(8255的PC0~PC3接小键盘的列0~列3,PC4~PC7接行0~行3)。

2.七段数码管字形代码表

显示字形

g

f

e

d

c

b

a

断码

1

3fh

06h

2

5bh

3

4fh

4

66h

5

6dh

6

7dh

7

07h

8

7fh

9

6fh

A

77h

B

7ch

C

3bh

D

5eh

E

7bh

F

71h

3.8255和8254组合发音的接线图

4.小键盘设计

众所周知,“哆瑞咪发嗦啦西”是组成所有音乐最基本的音调。

实验台上共有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F十六个键码,我利用数字键0作为开始键,只在数码管和PC屏幕上显示其字形;

而数字键1-7,每个键发出一个单音,而8和9键发出了两个高调单音,这样通过这9个单音键就基本能弹出简单的音乐了;

后面的字母A-E就是上述单音组成的几首好听的儿歌;

字母F控制整个程序结束!

具体每个键对应的功能如下图所示:

四、程序流程图

1.主程序流程图

2.小键盘扫描流程图

3.音乐发声流程图

四、实物接线图

8255的片选CS接地址译码输出的288~28F,A口PA0~PA7接七段数码管a~g,C口接小键盘(8255的PC0~PC3接小键盘的列0~列3,PC4~PC7接行0~行3);

8254CLK0接1MHZ时钟,GATE0接8255的PB1,OUT0接与门输入端1,片选CS接280H~287H,8255PB0接与门输入端2,与门输出端接喇叭。

8255的A口地址为288h,8255的B口地址为289h,8255的C口地址为8ah,8255的控制口地址为28bh,8254的A口地址为280h,8254的B口地址为283h。

五、设计结果

1.小键盘所有键(0123456789ABCDEF)依次按下,PC机屏幕显示结果:

2.小键盘单个键按下,数码管显示结果:

六、程序代码

;

*******************************;

*八音盒*;

datasegment

aio8255equ288h;

A口

bio8255equ289h;

B口

cio8255equ28ah;

C口

kio8255equ28bh;

控制口

io8253aequ280h

io8253bequ283h

table1dw0770h,0B70h,0D70h,0E70h,07B0h,0BB0h,0DB0h,0EB0h

dw07D0h,0BD0h,0DD0h,0ED0h,07E0h,0BE0h,0DE0h,0EE0h;

键盘扫描码表

leddb3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH

db39h,5EH,79h,71h,0ffh;

LED段码表,0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f

chardb'

0123456789ABCDEF'

;

字符表

mesdb0ah,0dh,'

****************************************'

db0ah,0dh,'

*Playanykeyinthesmallkeyboard!

*'

*Itwillbeonthescreen!

*StrikeF,itwillgameover!

0ah,0dh,'

$'

key_indb0h

kydb0h

bzdb0h

tabledw524,588,660,698,784,880,988,1048,1976;

哆来咪

Atabledw524,524,524,660,784,784,784,784,880,880,880,1048,784;

我有一只小毛驴

Btabledw524,588,660,524,524,588,660,524,660,698,784,660,698,784;

两只老虎

Ctabledw524,524,660,698,784,784,784,660,698,698,698,588,524,660,784,1048;

洋娃娃和小熊跳舞

Dtabledw660,660,698,784,784,698,660,588,524,524,588,660,660,588,588;

欢乐颂

Etabledw660,698,784,698,660,698,784,698,660,698,784,698,784,1320,1048;

可爱的蓝精灵

dataends

codesegment

assumecs:

code,ds:

data

start:

movax,data

movds,ax

movdx,offsetmes

movah,9

int21h;

显示提示信息

movdx,kio8255;

初始化8255控制字

moval,81h

outdx,al

main_key:

callkey;

getacharin(key_in)anddisplayit

calldisply;

调显示子程序,显示得到的字符

moval,byteptrkey_in

cmpal,'

F'

jzexit

0'

jzmain_key

jmpm

exit:

movax,4c00h;

if(dl)='

returntoEXIT!

退出

m:

1'

jlsing1

9'

jgsing1;

若不在'

-'

8'

之间转main_key

ddd:

subal,31h

shlal,1;

转为查表偏移量

movbl,al;

保存偏移到bx

movbh,0

movax,4240H;

计数初值=1000000/频率,保存到AX

movdx,0FH

divwordptr[table+bx]

movbx,ax

movdx,io8253b;

设置8254计时器0方式3,先读写低字节,再读写高字节

moval,00110110B

outdx,al

movdx,io8253a

movax,bx

outdx,al;

写计数初值低字节

moval,ah

写计数初值高字节

movdx,bio8255

moval,03h

置PB1PB0=11(开扬声器)

calldelay3;

延时

moval,0h

置PB1PB0=00(关扬声器)

jmpmain_key

sing1:

A'

jzAsing

B'

jzBsing

C'

jzCsing

D'

jzDsing

E'

jzEsing

Asing:

movbz,0

movcx,13

subal,41h

a:

divwordptr[Atable+bx]

movbx,ax

jmps

Bsing:

movcx,14

subal,42h

b:

divwordptr[Btable+bx]

jmps

Csing:

movcx,15

subal,43h

c:

divwordptr[Ctable+bx]

Dsing:

subal,44h

d:

divwordptr[Dtable+bx]

Esing:

subal,45h

shlal,1;

e:

divwordptr[Etable+bx]

s:

movdx,io8253b;

outdx,al;

写计数初值低字节

写计数初值高字节

moval,0h

addbz,2

movbl,bz

movbh,0

cmpbyteptrkey_in,'

jzaa

jzbb

jzcc

jzdd1

jzee

aa:

loopL1

bb:

loopL2

cc:

loopL3

dd1:

loopL4

ee:

loopL5

L1:

calln1

L2:

calln2

L3:

calln3

L4:

calln4

L5:

calln5

keyprocnear

key_loop:

movdx,cio8255

moval,0fh

inal,dx;

读行扫描值

andal,0fh

cmpal,0fh

jzkey_loop;

未发现有键按下则转

calldelay;

delayforamoment

movah,al

movdx,kio8255

moval,88h

oral,0f0h

inal,dx;

读列扫描值

andal,0f0h

cmpal,0f0h

jzkey_loop;

movsi,offsettable1;

键盘扫描码表首址

movdi,offsetchar;

字符表首址

movcx,16;

待查表的表大小

key_tonext:

cmpax,[si];

cmp(col,row)witheveryword

jzkey_findkey;

inthetable

deccx

jzkey_loop;

未找到对应扫描码

addsi,2

incdi

jmpkey_tonext

key_findkey:

movdl,[di]

movah,02

int21h;

显示查找到的键盘码

movbyteptrkey_in,dl

key_waitup:

inal,dx;

jnzkey_waitup;

按键未抬起转

calldelay;

keyendp

delayprocnear

pushax;

delay50ms--100ms

movah,0

int1ah

movbx,dx

delay1:

cmpbx,dx

jzdelay1

delay2:

jzdelay2

popax

ret

delayendp

displyprocnear

pushax

movbx,offsetled

moval,byteptrkey_in

subal,30h

cmpal,09h

jngdis2

subal,07h

dis2:

xlat

movdx,aio8255

outdx,al;

输出显示数据,段码

displyendp

delay3procnear;

延时子程序

pushcx

movax,60

x1:

movcx,0ffffh

x2:

jnzx2

decax

jnzx1

popcx

delay3endp

n1procnear

jmpa

n1endp

n2procnear

jmpb

n2endp

n3procnear

jmpc

n3endp

n4procnear

jmpd

n4endp

n5procNEAR

jmpe

n5endp

codeends

endstart

七、设计总结

通过这次接口技术课程设计,不仅使我复习了以前所学过的知识,而且也使我有目标性的学习了课堂未曾讲过的知识,把这些都结合起来,我便完成了在学过的知识上扩展出了其他功能的八音盒。

我的八音盒主要通过计数器8254、可编程并行接口芯片8255A、小键盘实现了其功能。

具体功能是定时/计数器8254作为音阶频率发生器,对每一段音乐进行编码后存入一张音乐表,程序中可调用每一张音乐表中的歌曲,再通过与可编程并行接口芯片8255的配合,将发声频率输出到实验平台的喇叭上,这样喇叭就发出了美妙动听的音乐;

接下来通过对可编程并行接口芯片8255A的编程,采用行扫描法和行翻转法,程序中将小键盘的各个键对应的代码(列值,行值)放在一个表中,程序通过查表来确定具体按下的为哪一个键,便实现了实验台上小键盘的扫描功能和七段数码管的显示字形;

另外,在程序中还放置了一个放键盘所有数据的字符表,实现了PC机屏幕的回显字符。

在整个课程设计中,我觉得最让我苦恼的和耗时最多的是开始的设计阶段。

当脑海中有了整个设计的目标时,一切操作就容易多了。

在遇到障碍事,老师们和同学们都给了很多意见和帮助,这对我完成本次课设起到了很大的帮助。

在此,特别感谢老师们和同学们,八音盒里动听的音符都是为你们演奏!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1