微机原理与应用期末实验报告音乐闹钟.docx
- 文档编号:4442916
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:15
- 大小:18.55KB
微机原理与应用期末实验报告音乐闹钟.docx
《微机原理与应用期末实验报告音乐闹钟.docx》由会员分享,可在线阅读,更多相关《微机原理与应用期末实验报告音乐闹钟.docx(15页珍藏版)》请在冰豆网上搜索。
微机原理与应用期末实验报告音乐闹钟
微机原理与应用期末实验报告
——音乐闹钟制作
实验人:
学号:
院系专业:
一.实验要求
【设计目的】
●期末的综合考评,要熟练掌握本学期所做各种实验用到的元件的使用方法与编程方法
●8255、8253、A\DD\A转换、模数转换、流水灯、七段数码管、点阵滚动显示等各种模块的熟练使用
●加强综合问题解决能力
【设计要求】
a)实现闹钟功能,时间到播放一段音乐;实现D/A和A/D转换;在发光二极管上播放流水灯图案;在点阵发光二极管上滚动显示自己的学号;要求能够控制滚动显示的速度以及音乐播放的速度,且用一个置位开关控制闹钟的开和关。
b)实现时钟功能,可以在两个七段数码管上显示秒钟时间或者分钟时间,用一个开关控制两者的切换。
【设计达到效果】
a)实现时钟功能,可以在两个七段数码管上显示秒钟时间或者分钟时间,可以用一个开关切换;
b)可以设定闹钟时间,用开关控制闹钟的开启与关闭;
c)实现并行地播放音乐、流水灯、滚动显示学号,同时还可以显示时间,进行分秒切换,进行速度控制;
d)在闹钟响起时,可以通过开关关闭闹钟,关闭闹钟后能重新设定闹钟与显示时间;
e)通过A\DD\A转换控制滚动显示的速度以及音乐播放的速度;
f)可以调节音乐速度、跑马灯及滚动显示的速度;
g)计时中断
二.实验现象
1)拥有时钟功能,常态下显示秒钟时间,打开开关K1则显示分钟时间。
2)开机时提示设置计时开始时间,设置完成后开始计时,计时为0时开始播放音乐
3)可以并行地播放音乐、流水灯、滚动显示学号,同时还可以显示时间,进行分秒切换,进行速度控制。
4)当闹铃响起的时候,可以用开关K2关闭闹钟。
5)可以控制音乐、流水灯、滚动显示的速度。
6)中断功能通过计时中断来表现。
三.实验代码
;***********************************;
;*音乐闹钟期末演示实验*;
;*学号*;
;*专业*;
;***********************************;
t08253equ280h
t18253equ281h
t28253equ282h
con8253equ283h
pa8255equ288h
pc8255equ28ah
con8255equ28bh
io0809equ298h
ls244equ2a0h
ls273equ2a8h
prothequ2b0h
protlrequ2b8h
protlyequ290h
datasegment
leddb3fh,06h,5bh,4fh,66h,6dh,7dh,07h,7fh,6fh;LED段码
mesdb0dh,0ah,'pleaseenterthealarmtime:
(endwithenter)',0dh,0ah,'$'
alarmsgdb'beginalarm',0dh,0ah,'$'
alarmtimedw?
;闹钟时间
seconddw0;秒钟
minutedw0;分钟
alltimedb0;总时间
alarmdelaydb0;速度控制延时变量
light_statusdb10000000b;跑马灯状态变量
roll_idb0;控制双色LED滚动显示变量
music_freqdw784,660,698,784,660,698,784,784,880,988,524,588,660,698,660,524,588,660,330,347
dw392,440,392,347,392,330,347,392,347,440,392,347,330,294,330,294,262,294,330,347
dw392,440,347,440,392,440,494,524,392,440,494,524,588,660,698,784,660,524,588,660
dw524,588,588,494,524,588,660,588,524,494,524,440,494,524,262,294,330,347,330,294
dw330,524,494,524,440,524,494,440,392,347,392,347,330,347,392,440,494,262,440,524
dw494,524,494,440,494,524,588,524,494,524,440,494,-1
music_timedw2,1,1,2,1,1,8dup
(1),2,1,1,2,1,1,8dup
(1),2,1,1,2,1,1,8dup
(1),2,1,1,2,1,1,8dup
(1)
dw2,1,1,2,1,1,8dup
(1),2,1,1,2,1,1,8dup
(1),2,1,1,2,1,1,8dup
(1),2,1,1,2,1,1,8dup
(1),-1
buffdb00h,00h,00h,00h,00h,00h,00h,00h;学号
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,42h,0feh,02h,00h,00h;'1'
db00h,00h,00h,00h,00h,00h,00h,00h
db00h,00h,00h,00h,00h,00h,00h,-1
light_sampledb01h,02h,04h,08h,10h,20h,40h,80h;跑马灯花样表
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,cs
movds,ax
movdx,offsetint3;填充中断向量表
movax,250bh
int21h
inal,21h;开放中断IRQ3
andal,0f7h
out21h,al
sti;开放总中断
movax,data
movds,ax
movdx,con8255;设置为A口输出,C口输出
movax,80h
outdx,al
movdx,offsetmes;提示输入闹钟定时
movah,09h
int21h
readAlarmTime:
movalarmtime,0;读取闹钟定时时间
rdagain:
movah,01h;readachar
int21h
cmpal,13;如果是ENTER则结束读数
jefdone1
jmptdone1
fdone1:
jmpreadAlarmDone
tdone1:
cmpal,10;如果是换行键则结束读数
jefdone1
cmpal,'0';判断输入范围是否为-9
jbreadAlarmTime
cmpal,'9'
jareadAlarmTime
pushax
movax,10
mulalarmtime
movalarmtime,ax;alarmtie=alartmtime*10
popax
subbx,bx
movbl,al
subbl,30h
addalarmtime,bx;alarmtime=alarmtime+input
jmprdagain
readAlarmDone:
callconfig_8253;读取闹钟定时时间
RD244:
movdx,ls244;读取ls244端口数据
inal,dx
andal,02h;D1口是否为?
D1为时闹钟开,时闹钟关
jznext2
movax,alarmtime;闹钟时间已到?
cmpal,alltime
jealarm
next2:
movdx,ls244;读取ls244端口数据
inal,dx
andal,01h;D0口是否为,D0接分,秒选择开关,为则选择分,为选择秒
jnzdisp_min
jmpdisp_second
disp_min:
;显示分钟
movax,minute
aam
callled_disp;调用数码管显示子程序
jmprd244
disp_second:
movax,second;显示秒钟
aam
callled_disp;调用数码管显示子程序
jmprd244
alarm:
movax,data;闹钟子程序
movds,ax
movah,09h
movdx,offsetalarmsg;提示闹钟
int21h
movsi,offsetmusic_freq;送SI音乐频率表首地址
movdi,offsetmusic_time;送DI音乐节拍表首地址
rd0809:
movdx,io0809;读AD0809
outdx,al
movcx,0fh;延时
addly:
loopaddly
inal,dx;从A/D转换器输入数据
cmpal,1
jard0809next
moval,1
rd0809next:
movalarmdelay,al;将读取结果存储到延时变量alarmdelay
play_music:
;播放音乐
sing:
movax,4240h;计数初值=1000000/频率,保存到AX
movdx,0fh
pushcx
movcx,[si];获得第SI个音乐频率
cmpcx,-1;判断是否为结束标志-1
jealarm;是则重新播放
divcx
popcx
movbx,ax
movdx,con8253;设置计时器为方式,先读写低字节,再读写高字节
moval,10110110b
outdx,al
movdx,t28253
movax,bx
outdx,al;写计数器初值低字节
moval,ah
outdx,al;写计数器初值高字节
movdx,con8255;设置C口输出
moval,10000000b
outdx,al
movdx,pc8255
moval,03h
outdx,al;设置PC1PC0=11(开扬声器)
pushcx
movcx,[di]
music_pad:
callmusic_delay;调用音乐延时子程序
loopmusic_pad
pushdx
pushax
light:
movdx,ls273;ls273用于控制LED跑马灯
moval,light_status
outdx,al
shral,1
jnzl_next
moval,10000000b
l_next:
movlight_status,al
popax
popdx
popcx
moval,0h
outdx,al;置PA1PA0=00(关扬声器)
incsi
incsi
incdi
incdi
jmprd0809
music_delayprocnear;音乐延时子程序
pushcx
pushax
movax,5
x1:
movcx,10
x2:
deccx
jnzx2
calll_and_r;调用滚动显示子程序
pushax
pushdx
rd2441:
movdx,ls244;读取ls244端口数据
inal,dx
andal,02h;D1口是否为?
D1接闹钟开关
jnznext21
movdx,pc8255
inal,dx
andal,0fch
outdx,al
jmprd244
next21:
movdx,ls244
inal,dx
andal,01h;D0是否为,D0接分,秒选择开关
jnzdisp_min1
jmpdisp_second1
disp_min1:
;显示分钟
movax,minute
aam
callled_disp
jmpdisp_end
disp_second1:
movax,second;显示秒钟
aam
callled_disp
disp_end:
popdx
popax
decax
jnzx1
popax
popcx
ret
music_delayendp
l_and_rprocnear;滚动显示子程序
pushax
pushcx
roll_name:
movcl,08h
movah,80h
r_next:
moval,roll_i
movbx,offsetbuff
xlat;得到一个行码
cmpal,-1
jnzr_next1
movroll_i,0
jmproll_name
r_next1:
movdx,proth
outdx,al
moval,ah
movdx,protlr
outdx,al;显示一个行码
moval,0
outdx,al
shrah,01h
incroll_i
pushcx
movcx,500
r_delay2:
pushcx
pushax
moval,alarmdelay;控制总体延时速度
movah,0
movcx,ax
popax
r_delay3:
loopr_delay3
popcx
loopr_delay2
popcx
loopr_next
moval,roll_i
subal,7
movroll_i,al
popcx
popax
ret
l_and_rendp
led_dispprocnear;数码管显示子程序
pushdx
pushbx
pushax;显示高四位
movdx,pa8255
moval,ah
movbx,offsetled;使BX指向数码管首址
xlat
outdx,al
movdx,pc8255
inal,dx
movbl,al
oral,08h;数码管高位由PC3控制
outdx,al
movbl,al
andal,0f7h
outdx,al
pushcx
movcx,100
led_delay:
loopled_delay;延时
popcx
popax
movdx,pa8255
movbx,offsetled;使BX指向段码馆首址
xlat
outdx,al
movdx,pc8255
inal,dx
movbl,al
oral,04h;数码管高位由PC2控制
outdx,al
moval,bl
andal,0fbh
outdx,al
pushcx
movcx,100
led_delay1:
loopled_delay1;延时
popcx
popbx
popdx
ret
led_dispendp
config_8253procnear;8253配置子程序
pushdx
movdx,con8253;设计数器为方式
moval,36h
outdx,al
movdx,t08253
movax,10000;写入计数初值
outdx,al
moval,ah
outdx,al
movdx,con8253
moval,76h;设计数器为方式
outdx,al
movdx,t18253
movax,100;写入计数器初值
outdx,al
moval,ah
outdx,al
popdx
ret
config_8253endp
int3:
incalltime;总计时时间加
incsecond;秒钟加
cmpsecond,60
jbint_next1
movsecond,0
incminute;分钟加
int_next1:
cmpminute,60
jbint_next2
movminute,0
int_next2:
moval,20h
out20h,al
iret
codeends
endstart
四.实验总结
在本次期末操作实验中,用上了以前教过的所有知识,将所有学习过的东西系统的复习了一遍,提高了动手操作能力与汇编编程能力。
在实验中,我用到了模数转换、A/DD/A转换、8253、8255、流水灯、点阵滚动显示、七段数码管灯各种模块,比较好的完成的整个实验过程,更加熟悉了芯片的工作原理。
当然,在本次试验中,也遇到了各种各样的问题,但通过自己努力查阅各种资料与老师同学们的帮助,最终解决了问题。
不仅提高了独立思考能力也培养了对微机原理与应用的兴趣。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 应用 期末 实验 报告 音乐 闹钟