基于单片机的电子琴大学论文.docx
- 文档编号:27179071
- 上传时间:2023-06-27
- 格式:DOCX
- 页数:16
- 大小:251.30KB
基于单片机的电子琴大学论文.docx
《基于单片机的电子琴大学论文.docx》由会员分享,可在线阅读,更多相关《基于单片机的电子琴大学论文.docx(16页珍藏版)》请在冰豆网上搜索。
基于单片机的电子琴大学论文
大学毕业设计论文
1.1目的和意义
单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本文主要对使用单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴统硬件组成。
利用单片机产生不同频率来获得我们要求的音阶,最终可随意弹奏想要表达的音乐。
并且本文分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述。
本系统是简易电子琴的设计,按下键盘矩阵中的按键会使扬声器播放对应的音符。
通过设计本系统可了解单片机的基本功能。
对单片机的了解有一个小的飞跃。
1.2本系统主要研究内容
1.由4X4组成16个按钮矩阵,设计成16个音对应音乐音符。
2.每按一个键,单片机检测按下的那个键并查表查找相应的音符,输出到音频处理模块驱动喇叭发出音符。
3.设计控制器的硬件电路原理图,合理选择元器件;编写使用说明书,说明使用方法。
4.设计在实验板上实现该功能的程序并进行调试。
1.3主要芯片简介
AT89S51是一个低功耗,高性能CMOS8位单片机,片内含4kBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统提供高性价比的解决方案。
AT89S51具有如下特点:
40个引脚(引脚图如图1-2所示),4kBytesFlash片内程序存储器,128bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。
此外,AT89S51设计和配置了振荡频率可为0Hz并可通过软件设置省电模式。
空闲模式下,CPU暂停工作,而RAM定时计数器,串行口,外中断系统可继续工作,掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
2系统分析
2.1系统组成
本系统只要以51单片机为主控核心,与矩阵键盘、扬声器一起组合而成。
具体如下:
图一电路方框图
2.2系统工作原理
本系统扫描键盘矩阵、显示按键、扬声器发出对应音符。
4X4行列式键盘识别及显示原理如下:
组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。
目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。
编码键盘:
键盘本身带有实现接口主要功能所需的硬件电路。
不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。
所以,编码键盘接口简单、使用方便。
但由于硬件电路较复杂,因而价格较贵。
非编码键盘:
键盘只简单地提供按键开关的行列矩阵。
有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。
目前微机系统中,一般为了降低成本大多数采用非编码键盘。
键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能。
(1)去抖动:
每个按键在按下或松开时,都会产生短时间的抖动。
抖动的持续时间与键的质量相关,一般为5—20ms。
所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。
去抖问
题可通过软件延时或硬件电路解决。
(2)防串键:
防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。
常用的方法有双键锁定和N键轮回两种方法。
双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。
N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。
(3)被按键识别:
如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。
常用的方法有行扫描法和线反转法两种。
行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。
线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。
(4)键码产生:
为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。
用AT89S51的并行口P3接4×4矩阵键盘,以P3.0-P3.3作输入线,以P3.4-P3.7作输出线.
3系统硬件设计
3.1系统硬件总体设计
本系统由键盘矩阵、扬声器这几个部分组成,扬声器发出对应音符。
硬件总体设计图如下:
图二电路原理图
3.2子系统(模块)一
矩阵扫描扬声器发出对应音符模块如下:
图三矩阵扫描扬声器
3.3子系统(模块)二
矩阵键盘模块图如下:
图四矩阵键盘
4系统软件设计
4.1系统软件总体设计
本系统的软件流程图如下:
图五软件流程图
4.2子系统
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
利用AT89C51的内部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶,例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。
计数脉冲值与频率的关系式(如式2-1所示)是:
N=fi÷2÷fr 2-1
式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。
其计数初值T的求法如下:
T=65536-N=65536-fi÷2÷fr
例如:
设K=65536,fi=1MHz,求低音DO(261Hz)、中音DO(523Hz)、高音DO(1046Hz)的计数值。
T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr
低音DO的T=65536-500000/262=63627
中音DO的T=65536-500000/523=64580
高音DO的T=65536-500000/1046=65059
本系统按键发出对应音符模块软件流程图如下:
图六音符模块软件流程图
5系统使用说明
5.1系统安装及配置说明
5.1.1系统运行环境
WINDOWSXPPROTEUS7.1SP2Keiluv32.12
5.1.2系统安装及配置
安装Protues和keiluVsision3。
5.2系统操作说明
(1)Keil下编译,产生目标HEX文件,Proteus下ProgrammeFiles选择产生的HEX文件,点击运行开始模拟。
(2)按任意键盘,扬声器发出相应的音符。
6结论
本次的课程设计,使关于51系列单片机的,在平时课程的学习中,我们仅限于理论知识的讲解,即使知识是很扎实的,实际应用并不是这样的。
开始时我也觉得自己的理论知识已经够了,但当我拿到课题时,在脑海里想的是非常好的,但真正编程和控制时,理论和实际结合不到一起,甚至于51芯片的使用我都感觉很迷茫,还是经过搜集大量资料才将理论与实际结合到一起了。
通过这次课程设计,我们学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。
经过我们长时间的设计及调试,本系统基本能实现按下键盘矩阵中的按键会使数码管显示当前按键,扬声器播放对应的音符。
但由于仿真系统原因,本设计音频效果不是很好。
不足之处有:
1.可弹奏的音符数较少,只能在一定范围内满足用户需要。
可通过改进键盘识别模块和发生模块来增加其复杂度。
2.音量不可调。
通过这次课程设计——电子琴设计,使我又重新开始复习了汇编语言,因为汇编语言是前段时间学习的,从学完就再也没用过,所以开始很陌生,我又找了有关资料来了解,才有了一点眉目。
刚开始以为可以用汇编很容易就写出来,但是用汇编时才发现原来都不怎么熟练,编了一会程序发现只有一种感觉——举步维艰啊!
对于单片机,我们课本学习的是80C51,但是这次做课程设计用的是89C51,这样不仅使我们掌握了80C51,而且对89C51也有了一定的了解了,在课堂上学习的都理论的,跟实际永远有一定的差距,不实践就不会发现问题。
通过这次课程设计使我把课堂上学习的东西都用到了实践中,例如:
定时/计数器的应用与中断。
学习的时候不怎么理解,但是在实践中应用了以后就自然了解了。
这次课程设计使我受益匪浅,而且都是实际的东西。
通过本次设计实验,使我对所学51系列的单片机从理论知识到实践硬件的应用以及汇编语言知识的回顾,更加熟悉了89C51单片机的每一个引脚的输出和各项功能,而且对硬件电路的布线以及焊接能力有了很大的进步。
我们的综合设计主要涉及硬件和软件两方面的内容,通过这些我们的硬件和软件开发能力都获得了提高。
首先硬件方面,基本了解了电子产品的开发流程和所要做的工作;基本掌握了Proteus绘制原理图的方法,并设计了一个单片机最小系统。
通过开发板的设计和硬件搭建的过程,使我们对51系单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路引脚和连接方法,如LED数码管,键盘等。
并且我们学会了分析问题解决问题的能力,加深了对所学理论知识的理解和运用。
我们的动手能力得到了很大的提高,创新意识得到了锻炼。
参考文献
[1]彭伟.单片机C语言程序设计实训100例.电子工业出版社.2009
[2]吴运昌.模拟电子线路基础.广州:
华南理工大学出版社,2004
[3]阎石.数字电子技术基础.北京:
高等教育出版社,1997
[4]张晓丽等.数据结构与算法.北京:
机械工业出版社,2002
[5]马忠梅等.ARM&Linux嵌入式系统教程.北京:
北京航空航天大学出版社,2004
[6]李建忠.单片机原理及应用.西安:
西安电子科技大学,2002
[7]韩志军等.单片机应用系统设计[M].机械工业出版社,2004
[8]周润景等.Proteus在MCS-51&ARM7系统中的应用百例[M].电子工业出版社,2006
[9]马忠梅等.单片机的C语言应用程序设计[M].北京航空航天大学出版社,2006
[10]刘树中,孙书膺,王春平.单片机和液晶显示驱动器串行接口的实现[J].微计算机信息,2007
附录:
主要程序
KEYBUFEQU30H ; KEYBUF定义为30H
STH0EQU31H ;STH0定义为,31H
STL0EQU32H ;STL0定义为,32H
TEMPEQU33H ;TEMP定义为,33H
ORG00H
LJMPSTART
ORG0BH
LJMPINT_T0
START:
MOVTMOD,#01H ;设置定时器0的工作方式
SETBET0 ;设置定时器中断
SETBEA ;开总中断
WAIT:
MOVP3,#0FFH ;设置P3口为输入模式
CLRP3.4 ;清0P3.4,按键的第一行扫描
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JZNOKEY1 ;
LCALLDELY10MS ;延时10ms
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JZNOKEY1 ;
MOVA,P3 ;
ANLA,#0FH ;
CJNEA,#0EH,NK1 ;
MOVKEYBUF,#0 ;
LJMPDK1 ;
NK1:
CJNEA,#0DH,NK2 ;K1键按下
MOVKEYBUF,#1 ;
LJMPDK1 ;
NK2:
CJNEA,#0BH,NK3 ;K2键按下
MOVKEYBUF,#2 ;
LJMPDK1 ;
NK3:
CJNEA,#07H,NK4 ;K3键按下
MOVKEYBUF,#3 ;
LJMPDK1 ;
NK4:
NOP ;K4键按下
DK1:
MOVA,KEYBUF
MOVB,#2
MULAB ;因为查表里都是字,所以乘2的查表数据
MOVTEMP,A ;
MOVDPTR,#TABLE ; 指向表头
MOVCA,@A+DPTR ;查表
MOVSTH0,A ;
MOVTH0,A ;将数据高位送TH0
INCTEMP ;
MOVA,TEMP ;
MOVCA,@A+DPTR ;
MOVSTL0,A ;
MOVTL0,A ;将数据低位送TH0
SETBTR0 ;启动定时器T0
DK1A:
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JNZDK1A ;
CLRTR0 ;关闭定时器T0
NOKEY1:
MOVP3,#0FFH ;设置P3口为输入模式
CLRP3.5 ;清0P3.5,按键的第二行扫描
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JZNOKEY2 ;
LCALLDELY10MS ;延时10ms
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JZNOKEY2 ;
MOVA,P3 ;
ANLA,#0FH ;
CJNEA,#0EH,NK5 ;
MOVKEYBUF,#4 ;
LJMPDK2 ;
NK5:
CJNEA,#0DH,NK6 ;K5键按下
MOVKEYBUF,#5 ;
LJMPDK2 ;
NK6:
CJNEA,#0BH,NK7 ;K6键按下
MOVKEYBUF,#6 ;
LJMPDK2 ;
NK7:
CJNEA,#07H,NK8 ;K7键按下
MOVKEYBUF,#7 ;
LJMPDK2 ;
NK8:
NOP ; K8键按下
DK2:
MOVA,KEYBUF ;
MOVB,#2 ;
MULAB ;因为查表里都是字,所以乘2的查表数据
MOVTEMP,A ;
MOVDPTR,#TABLE ;指向表头
MOVCA,@A+DPTR ;查表
MOVSTH0,A ;
MOVTH0,A ;将数据高位送TH0
INCTEMP ;
MOVA,TEMP ;
MOVCA,@A+DPTR ;
MOVSTL0,A ;
MOVTL0,A ;将数据低位送TH0
SETBTR0 ;启动定时器T0
DK2A:
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JNZDK2A ;
CLRTR0 ; 关闭定时器T0
NOKEY2:
MOVP3,#0FFH ;设置P3口为输入模式
CLRP3.6 ;清0P3.6,按键的第三行扫描
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JZNOKEY3 ;
LCALLDELY10MS ;延时10ms
MOVA,P3 ;
ANLA,#0FH ;
XRLA,#0FH ;
JZNOKEY3 ;
MOVA,P3 ;
ANLA,#0FH ;
CJNEA,#0EH,NK9 ;
MOVKEYBUF,#8 ;
LJMPDK3 ;
NK9:
CJNEA,#0DH,NK10 ;K9键按下
MOVKEYBUF,#9 ;
LJMPDK3 ;
NK10:
CJNEA,#0BH,NK11 ;K10键按下
MOVKEYBUF,#10 ;
LJMPDK3 ;
NK11:
CJNEA,#07H,NK12 ;K11键按下
MOVKEYBUF,#11 ;
LJMPDK3 ;
NK12:
NOP ;K12键按下
DK3:
MOVA,KEYBUF ;
MOVB,#2 ;
MULAB ;因为查表里都是字,所以乘2的查表数据
MOVTEMP,A ;
MOVDPTR,#TABLE ;指向表头
MOVCA,@A+DPTR ;查表
MOVSTH0,A ;
MOVTH0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 电子琴 大学 论文