微机原理课程设计PC仿真电子琴.docx
- 文档编号:29368962
- 上传时间:2023-07-22
- 格式:DOCX
- 页数:39
- 大小:109.03KB
微机原理课程设计PC仿真电子琴.docx
《微机原理课程设计PC仿真电子琴.docx》由会员分享,可在线阅读,更多相关《微机原理课程设计PC仿真电子琴.docx(39页珍藏版)》请在冰豆网上搜索。
微机原理课程设计PC仿真电子琴
摘要
一.设计的目的与意义………………………………2
二.设计的内容与要求………………………………2
三.系统的硬件设计…………………………………3
3.1所用芯片的功能介绍………………………3
3.2系统原理与硬件电路………………………5
四.系统的软件设计…………………………………6
4.1软件控制流程………………………………6
4.2程序清单……………………………………7
五.系统调试与运行………………………………16
六.设计收获………………………………………16
七.主要参考文献…………………………………17
一.设计的目的与意义
本课程设计主要是通过汇编语言用软件编程的方法实现简单的PC仿真电子琴。
通过在《微机原理与接口技术》课程上所学的汇编知识和相关芯片知识,来完成本课程设计。
学习和掌握计算机中常用接口电路的应用和设计技术,充分认识理论知识对应用技术的指导性作用,进一步加强理论知识与应用相结合的实践和锻炼。
通过这次设计实践能够进一步加深对专业知识和理论知识学习的认识和理解,使自己的设计水平和对所学的知识的应用能力以及分析问题解决问题的能力得到全面提高。
二.设计内容与要求
设计一个利用DAC0832的输出数字声音的接口电路(可参考实验台原理图),DAC0832的输出接至有源音箱,编程实现如下功能:
进入主界面,屏幕显示桌面设计格式,首先选择是个人按键弹奏发音或者播放音乐。
若播放音乐按P键进入下一级菜单:
菜单格式如下:
1:
画心;
2:
铃儿响叮当
3:
生日祝歌;
4:
新年好;
按Q键,退出本级菜单,返回上一级。
如果不选择音乐播放,那选择相应音符,自己弹奏,按键发声:
(1)当从键盘上敲击Q-U键时,音箱发出1-7的高音阶;
(2)当从键盘上敲击A-J键时,音箱发出1-7的中音阶;
(3)当从键盘上敲击Z-M键时,音箱发出1-7的低音阶;
(4)当从按键从键盘上敲击1-7,音箱发出1-7的重音阶;
按ESC或者enter键,程序结束。
。
三.系统的硬件设计
3.1所用芯片的功能介绍
1.DAC0832芯片介绍
DAC0832是由8位输入锁存器、8位DAC寄存器、8位D/A转换电路组成,采用二次缓冲方式,这样可以在输出的同时,输入下一个数据,以提高转换速度。
更重要的是能够在多个转换器同时工作时,有可能同时输出模拟量。
其内部逻辑结构如图所示。
DAC0832为20引脚芯片,各引脚功能如下:
DI0~DI7:
数据输入线,TLL电平。
ILE:
数据锁存允许控制信号输入线,高电平有效。
CS:
片选信号输入线,低电平有效。
WR1:
为输入寄存器的写选通信号。
XFER:
数据传送控制信号输入线,低电平有效。
WR2:
为DAC寄存器写选通输入线。
Iout1:
电流输出线。
当输入全为1时Iout1最大。
Iout2:
电流输出线。
其值与Iout1之和为一常数。
Rfb:
反馈信号输入线,芯片内部有反馈电阻.
Vcc:
电源输入线(+5v~+15v)
Vref:
基准电压输入线(-10v~+10v)
AGND:
模拟地,摸拟信号和基准电源的参考地.
DGND:
数字地,两种地线在基准电源处共地比较好.
2.DAC0832工作原理
当输入锁存信号ILE为高电平时,而
与
同时为低电平时,由图可知
=1,输入锁存器的内容随数据总线DI0~DI7而变化。
当
变为高电平时,
=0,8位输入数据被锁存在输入寄存器中。
当
与
同时为低电平时,
=1,8位DAC寄存器内容随输入锁存器而变化。
此时若
变为高电平,
=0,则将输入锁存器中数据锁存在8位DAC寄存器中,并开始D/A转换。
对于要求多片DAC0832同时转换的系统,鉴于各芯片的片选信号不同,可用片选信号
与
分时地将数据分别输入到每个芯片的输入锁存器中。
各芯片的
与
分别连接在一起,共用一组信号。
与
同时为低电平时,数据将在同一时刻由8位输入寄存器传送到对应的8位DAC寄存器中,在
上升沿将数据锁存到DAC寄存器中。
与此同时,多个DAC0832芯片开始同时进行D/A转换,因此可以达到多路模拟量同时输出的目的。
四.系统的软件设计
4.1软件控制流程
图1:
程序主流程图
图2:
音乐播放流程图
图3:
弹奏程序流程图
4.2程序清单
datasegment;数据定义段
assumeds:
data;建立数据段寄存器寻msg_1db'<
msg_2db0dh,0ah,'InthisOS.youcanpressbelowkeystoenjoy:
$'
msg_3db0dh,0ah,'SuperLow:
q-w-e-r-t-y-u$'
msg_4db0dh,0ah,'Low:
a-s-d-f-g-h-j$'
msg_5db0dh,0ah,'Mid:
z-x-c-v-b-n-m$'
msg_6db0dh,0ah,'Hig:
1-2-3-4-5-6-7$'
msg_7db0dh,0ah,'Anytimeyoucanpress''Esc''or''Enter''toexit.$'
msg_8db0dh,0ah,'What''smore,youcanpress''p''toplaymusic!
$'
msg_9db0dh,0ah,'Pleaseselectthemusic(press''q''toexitthemainmenu):
$'
msg_10db0dh,0ah,'1.Huaxin$'
msg_11db0dh,0ah,'2.Jinglebells$'
msg_12db0dh,0ah,'3.Happybirthdaytoyou$'
msg_13db0dh,0ah,'4.Happynewyear$'
msg_21db0dh,0ah,'$'
note_tdw131,147,165,175,196,220,247;重低音
dw262,294,330,349,392,440,494;低音
dw523,587,659,698,784,880,988;中音
dw1046,1175,1318,1397,1568,1760,1975;高音
dw0;休止符0
;'1','2','3','4','5','6','7';从低到高
key_tdb'q','w','e','r','t','y','u';重低音
db'a','s','d','f','g','h','j';低音
db'z','x','c','v','b','n','m';中音
db'1','2','3','4','5','6','7';高音
db'0';休止符0
music_n1db'b','c','c','x','z','x','x','b','c'
db'0','b','c','c','x','z','x','b','n'
db'c','0','b','c','c','x','z','x','z','j'
db'z','x','j','g','h','d','g'
db'h','h','c','x','z','j','j','g','h'
db'g','g','h','h','z','j','h','g'
db's','d','d','d','g','h','h','j','z','g'
db'z','x','x','c','c','b','c','c','x','z','x'db'z','j','z','x','j','g','h','d','g'
db'h','h','c','x','z','j','g','h','h','0'
db'd','d','g','h','h','z','j','h','g','h'
db'd','d','d','g','h','h','j','z','g','z'
db'x','x','c','c','b','c','c','x','z'db'x','z','j','z','x','j','g','h','d','g','h'
db'h','c','x','z','j','g','h','h','b','c'db'c','x','z','x','x','b','c','c','c','b','c'
db'c','x','z','x','b','n','x','c','c'
db'b','c','c','x','z','x','z','j'
db'z','x','j','g','h','d','g','h','h','c'
db'x','z','j','g','h','h',0
music_d1db4,4,8,4,4,8,4,4,16
db8,4,4,8,4,4,8,4,4
db16,8,4,4,8,4,4,8,4,4
db4,4,4,4,8,4,4
db8,4,4,4,4,8,8,4
db4,4,8,4,4,4,4,8
db4,2,16,4,4,8,4,4,4,4
db4,4,4,4,8,4,4,8,4,4,8
db4,4,4,4,4,4,8,4,4
db8,4,4,4,4,8,4,2,8,8
db4,4,4,8,4,4,4,4,4,4
db4,4,8,4,4,8,4,4,4,4,4
db4,4,4,16,4,4,8,4,4
db8,4,4,4,4,4,4,8,4,4,8
db4,4,4,4,8,4,4,16,4,4
db8,4,4,8,4,4,4,4,8,4,4
db8,4,4,8,4,4,4,4,8
db4,4,8,4,4,8,4,4
db4,4,4,4,8,4,4,8,4,4
db4,4,8,4,4,32
music_n2db'g','c','x','z','g','0','g','h','g','c','x','z';铃儿响叮当
db'h','0','h','a','h','v','c','x','j','g','b','b','v','x','c','z'
db'g','c','x','z','g','0','g','h','g','c','x','z','h','v','c','x'
db'b','b','b','b','n','b','v','x','z'
db'c','c','c','c','c','c','c','b','z','x','c'
db'v','v','v','v','c','c','c','x','x','z','x','b'
db'c','c','c','c','c','c','c','b','z','x','c'
db'v','v','v','v','c','c','b','b','v','x','z','0'
music_d2db4,4,4,4,8,4,2,2,4,4,4,4
db8,4,2,2,4,4,4,4,8,8,4,4,4,4,8,4
db4,4,4,4,8,4,2,2,4,4,4,4,4,4,4,4
db4,4,4,4,4,4,4,4,16
db4,4,8,4,4,8,4,4,4,2,16
db4,4,8,4,4,8,4,4,4,4,8,8
db4,4,8,4,4,8,4,4,4,2,16
db4,4,8,4,4,8,4,4,4,4,16,32
music_n3db'g','g','h','g','z','j';生日快乐
db'g','g','h','g','x','z'
db'g','g','b','c','z','j','h'
db'v','v','c','z','x','z','0'
music_d3db4,4,8,8,8,16
db4,4,8,8,8,16
db4,4,8,8,8,8,8
db4,4,8,8,8,16,32
music_n4db'z','z','z','g','c','c','c','z','z','c','b','b','v','c','x','x','c';新年好
db'v','v','c','x','c','z','z','c','x','g','j','x','z','0'
music_d4db4,4,8,8,4,4,8,8,4,4,8,8,4,4,16,4,4
db8,8,4,4,8,8,4,4,8,8,4,4,32
jiepaidb?
;节拍变量定义
speeddb2;播放速度控制
jiangedb1;音符间隔停顿时间
dataends;数据定义段结束
;/*----------------------------------------------*/
;代码段定义
codesegment;代码定义段
assumecs:
code;建立代码段寄存器寻
;/*-----------------------------------------------*/
;字符显示
showmacrostr;宏定义,输入参数:
字符串str
leadx,str;装入str的有效地址
movah,09h;调用中断21,09h显示字符串
int21h
endm;宏定义结束
;/*----------------------------------------*/
;主函数
mainprocfar;主函数过程定义
movax,data;取数据段地址
movds,ax;装载数据段寄存器ds,使之指向当前数据段
showmsg_21
showmsg_1;调用宏,显示字符串
showmsg_2
showmsg_3
showmsg_4
showmsg_5
showmsg_6
showmsg_7
showmsg_8
showmsg_21
movbx,0;设定查表数组下标初值
;/*------------------------------------------------*/
;按键扫描
key_scan:
moval,6
movjiepai,al;初始化节拍
movbx,0000h;初始化指针
movah,00h;利用bios的16号中断,扫描键盘按键
int16h;AL中返回按键的ASCII码
cmpal,0dh;判断是否为Enter键
jzexit;是回车键就退出
cmpal,1bh;判断是否为Esc键
jzexit;是退出键就退出
cmpal,'p';判断是否为p键
jzplay;是p键就playmusic
lookup:
cmpkey_t[bx],al;取出对应频率值
jenext
incbx;指针+1
jmplookup
next:
shlbx,1;指针×2,计算频率表指针
movcx,note_t[bx];取得对应数组下标值的频率值
callbeep;调用固定频率子程序
jmpkey_scan;否则继续扫描
;/*---------------------------------------*/
exit:
;退出
movah,4ch;调用中断21,4ch退出系统
int21h
;/*------------------------------------------*/
;音乐播放菜单
play:
showmsg_9
showmsg_10
showmsg_11
showmsg_12
showmsg_13
showmsg_21
input:
movah,00h;利用bios的16号中断,扫描键盘按键
int16h;AL中返回按键的ASCII码
cmpal,'q';判断是否为Enter键
jzstart;是'q'键就退到主菜单
cmpal,'1';判断是否为数字1
jznext6;是'1'键就播放相对应的歌曲
cmpal,'2';判断是否为数字2
jznext7;是'2'键就播放相对应的歌曲
cmpal,'3';判断是否为数字3
jznext8;是'3'键就播放相对应的歌曲
cmpal,'4';判断是否为数字4
jznext9;是'4'键就播放相对应的歌曲
jmpinput;否则继续扫描按键
next6:
callplay_m1
next7:
callplay_m2
next8:
callplay_m3
next9:
callplay_m4
start:
callmain
;/*--------------------------------------------*/
;音乐播放程序1
play_m1procnear
next5:
movbx,0
next3:
moval,music_n1[bx];取出music频率值
pushax
moval,music_d1[bx];取出music节拍
movjiepai,al
popax
cmpal,0;是否为音乐结束标志符
jeinput;是则退出play
pushbx;保存bx,bx为music频率指针
movbx,0
look1:
cmpkey_t[bx],al;查表取出对应频率值的指针bx
jenext1;找到就beep
incbx;指针+1
andbx,0ffh
jmplook1;未找到则继续查找
next1:
shlbx,1;指针×2,计算频率表指针
movcx,note_t[bx];取得对应数组下标值的频率值
cmpcx,0
jenext4
callbeep;调用固定频率子程序
callpause;调用停顿时间
popbx;获得music指针
incbx;继续取得下一个音符
jmpnext3
next4:
callnobeep
callpause;调用停顿时间
popbx;获得music指针
incbx;继续取得下一个音符
jmpnext3
play_m1endp
;/*------------------------------------------------*/
;音乐播放程序2
play_m2procnear
nex5:
movbx,0
nex3:
moval,music_n2[bx];取出music频率值
pushax
moval,music_d2[bx];取出music节拍
movjiepai,al
popax
cmpal,0;是否为音乐结束标志符
jeinput;是则退出play
pushbx;保存bx,bx为music频率指针
movbx,0
loo1:
cmpkey_t[bx],al;查表取出对应频率值的指针bx
jenex1;找到就beep
incbx;指针+1
andbx,0ffh
jmploo1;未找到则继续查找
nex1:
shlbx,1;指针×2,计算频率表指针
movcx,note_t[bx];取得对应数组下标值的频率值
cmpcx,0
jenex4
callbeep;调用固定频率子程序
callpause;调用停顿时间
popbx;获得music指针
incbx;继续取得下一个音符
jmpnex3
nex4:
callnobeep
callpause;调用停顿时间
popbx;获得music指针
incbx;继续取得下一个音符
jmpnex3
play_m2endp
;/*------------------------------------------------*/
;音乐播放程序3
play_m3procnear
nt5:
movbx,0
next10:
moval,music_n1[bx];取出music频率值
pushax
moval,music_d1[bx];取出music节拍
movjiepai,al
popax
cmpal,0;是否为音乐结束标志符
jeinput;是则退出play
pushbx;保存bx,bx为music频率指针
movbx,0
lk1:
cmpkey_t[bx],al;查表取出对应频率值的指针bx
jenext12;找到就beep
incbx;指针+1
andbx,0ffh
jmplk1;未找到则继续查找
next12:
shlbx,1;指针×2,计算频率表指针
movcx,note_t[bx];取得对应数组下标值的频率值
cmpcx,0
jenext11
callbeep;调用固定频率子程序
callpause;调用停顿时间
popbx;获得music指针
incbx;继续取得下一个音符
jmpnext10
next11:
callnobeep
callpause;调用停顿时间
popbx;获得music指针
incbx;继续取得下一个音符
jmpnext10
play_m3endp
;/*--------------------------------------------*/
;音乐播放程序4
play_m4procnear
nxt5:
movbx,0
next13:
moval,music_n1[bx];取出music频率值
pushax
moval,music_d1[bx];取出music节拍
movjiepai,al
popax
cmpal,0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 课程设计 PC 仿真 电子琴