微机原理与应用期末实验报告音乐闹钟.docx

上传人:b****5 文档编号:4442916 上传时间:2022-12-01 格式:DOCX 页数:15 大小:18.55KB
下载 相关 举报
微机原理与应用期末实验报告音乐闹钟.docx_第1页
第1页 / 共15页
微机原理与应用期末实验报告音乐闹钟.docx_第2页
第2页 / 共15页
微机原理与应用期末实验报告音乐闹钟.docx_第3页
第3页 / 共15页
微机原理与应用期末实验报告音乐闹钟.docx_第4页
第4页 / 共15页
微机原理与应用期末实验报告音乐闹钟.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

微机原理与应用期末实验报告音乐闹钟.docx

《微机原理与应用期末实验报告音乐闹钟.docx》由会员分享,可在线阅读,更多相关《微机原理与应用期末实验报告音乐闹钟.docx(15页珍藏版)》请在冰豆网上搜索。

微机原理与应用期末实验报告音乐闹钟.docx

微机原理与应用期末实验报告音乐闹钟

微机原理与应用期末实验报告

——音乐闹钟制作

实验人:

学号:

院系专业:

一.实验要求

【设计目的】

●期末的综合考评,要熟练掌握本学期所做各种实验用到的元件的使用方法与编程方法

●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、流水灯、点阵滚动显示、七段数码管灯各种模块,比较好的完成的整个实验过程,更加熟悉了芯片的工作原理。

当然,在本次试验中,也遇到了各种各样的问题,但通过自己努力查阅各种资料与老师同学们的帮助,最终解决了问题。

不仅提高了独立思考能力也培养了对微机原理与应用的兴趣。

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

当前位置:首页 > 高中教育 > 英语

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

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