八音盒文档格式.docx
- 文档编号:18963673
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:21
- 大小:755.73KB
八音盒文档格式.docx
《八音盒文档格式.docx》由会员分享,可在线阅读,更多相关《八音盒文档格式.docx(21页珍藏版)》请在冰豆网上搜索。
(二)实验原理图
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机屏幕的回显字符。
在整个课程设计中,我觉得最让我苦恼的和耗时最多的是开始的设计阶段。
当脑海中有了整个设计的目标时,一切操作就容易多了。
在遇到障碍事,老师们和同学们都给了很多意见和帮助,这对我完成本次课设起到了很大的帮助。
在此,特别感谢老师们和同学们,八音盒里动听的音符都是为你们演奏!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 八音盒