单片机课程设计简易电子琴.docx
《单片机课程设计简易电子琴.docx》由会员分享,可在线阅读,更多相关《单片机课程设计简易电子琴.docx(24页珍藏版)》请在冰豆网上搜索。
![单片机课程设计简易电子琴.docx](https://file1.bdocx.com/fileroot1/2022-11/16/d1600d5f-9328-4d1a-a92a-fa473b0c653e/d1600d5f-9328-4d1a-a92a-fa473b0c653e1.gif)
单片机课程设计简易电子琴
《单片机技术及应用》
课程设计报告
专业:
电子信息工程
班级:
姓名:
指导教师:
二0一0年十一月十五日
目录
1、引言..................................................2
2、课题的方案设计与论证..................................2
3、系统的硬件设计........................................5
4、系统软件的设计.......................................10
5、系统软件调试.........................................14
6、系统软件仿真.........................................15
7、系统硬件焊接.........................................17
8、系统常见问题总结.....................................19
9、系统设计改进.........................................20
10、课程小结............................................20
11、指导老师意见........................................20
参考书目................................................21
附录一程序清单........................................21
附录二元器件清单......................................24
基于单片机的16键简易电子琴设计
1、引言
单片机(单片微型计算机)是大规模集成电路技术发展的产物,具有高性能、高速度、体积小、价格低廉、稳定可靠等特点。
单片机的应用相当广泛,从平常的家用电器到航空航天系统和国防军事、尖端武器都能找到它的身影。
因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
随着社会的发展进步,音乐已经成为了我们生活中很重要的一部分。
电子琴则是一种很常见的键盘乐器,是现代电子科技与音乐结合的产物,在现代音乐中扮演着重要的角色。
单片机具有强大的控制功能和灵活的编程实现特性,早已溶入现代人们的日常生活中,成为不可替代的一部分。
本文的主要内容是用AT89C52单片机为核心控制元件,设计一个简易电子琴。
2、系统方案设计与论证
2、1系统基本组成
本系统以AT89C52为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
2、2系统基本原理
声音的频率范围约是几十到几千赫兹,若能利用程序来控制单片机某个口线不断地输出高低电平,则在改口线上就能产生一定频率的方波,将该方波接上喇叭就能发出一定频率的声音。
本系统就是按此原理设计,对于AT89C52而言要产生一定频率的方波一般是先将某口线输出高电平,延迟一段时间后再输出低电平。
通过改变延迟时间可以改变单片机的输出频率。
单片机的延时主要有两种方式,即软件延时和使用定时/计数器延时。
其中软件延时不是很精确,而电子琴电路由于每个音符的频率值要求比较严格,因此我们选用定时/计数器延时。
键盘电路
AT89C52
扬声器
时钟电路
数码显示管
74LS247
复位电路
图2-1系统原理框图
2.3音乐相关知识
乐音听起来有的高、有的低,这就叫做音高。
音高是由发声物体振动频率的高低决定的,频率高声音就高,频率低声音就低。
音持续时间的长短即时值,一般用拍数表示。
休止符表示暂停发音。
一首音乐是由许多不同的音符组单片机产生的音频脉冲信号没有足够的驱动能力,因此要在扬声器前加一放大电路,保证扬声器能产生所要实现的音符成的,而每个音符对应着不同的频率,这样就可以利用不同的频率组合,加以拍数对应的延时,构成音乐。
如果单片机要自己播放音乐就必须考虑到节拍的设置。
由于本例中是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
因此,我们只需弄清楚音乐中的音符和对应的频率。
要产生相应的音频脉冲,只需要计算出某音频的周期,再除以2单片机产生的音频脉冲信号没有足够的驱动能力,因此要在扬声器前加一放大电路,保证扬声器能产生所要实现的音符。
利用计数器计时半周期,计满时使P2.0反向,然后重复计时再反向。
本例中,单片机工作在12MHz时钟,使用定时器/计数器T0,工作模式为1,改变计数初值TH0、TL0就可产生不同频率的脉冲信号。
例如低3MI音,频率为330Hz,其周期T=1/f=1/330=3030us,计数值N=3030/2=1515,所以每计数1515次P2.0反向。
计数初值T=65536-N=64021。
C调的各音符频率与计数值T的对照表如表2-1所示。
表2-1C调各音符频率与计数值T对照表
音符
频率(HZ)
简谱码(T值)
音符
频率(HZ)
简谱码(T值)
低1DO
262
63628
#4FA#
740
64860
#1DO#
277
63731
中5SO
784
64898
低2RE
294
63853
#5SO#
831
64934
#2RE#
311
63928
中6LA
880
64968
低3M
330
64021
#6
932
64994
低4FA
349
64103
中7SI
988
65030
#4FA#
370
64185
高1DO
1046
65058
低5SO
392
64260
#1DO#
1109
65085
#5SO#
415
64331
高2RE
1175
65110
低6LA
440
64400
#2RE#
1245
65134
#6
466
64463
高3M
1318
65157
低7SI
494
64524
高4FA
1397
65178
中1DO
523
64580
#4FA#
1480
65198
#1DO#
554
64633
高5SO
1568
65217
中2RE
587
64684
#5SO#
1661
65235
#2RE#
622
64732
高6LA
1760
65252
中3M
659
64777
#6
1865
65268
中4FA
698
64820
高7SI
1967
65283
3、硬件设计
3.1主控核心
一、本实例采用AT89C52作为主控核心。
图3-1AT89C52芯片引脚图
AT89C52是一个低电压,高性能CMOS8位单片机,片内含8kbytes的可反复擦写的Flash只读程序存储器和256bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
主要引脚功能:
1.RST(9):
复位输入。
当振荡器复位时,要保持RST引脚2个机器周期的高电平时间;
2.XTAL1(19):
反向振荡器放大器的输入及内部时钟工作电路的输入;
3.XTAL2(18):
来自反向振荡器的输出;
4.P1口(1-8):
P1口是从内部提供上拉电阻器的8位双向I/O口,P1口缓冲器能接收和输出4个TTL门电流;
5.ALE/PROG(30):
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节,在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6,它可用作对外部输出的脉冲或用于定时目的,要注意的是,每当访问外部数据存储器时,将跳过1个ALE脉冲;
6.PSEN(29):
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期2次PSEN有效,但在访问外部数据存储器时,这2次有效的PSEN信号将不出现;
二、本实例采用7段共阳极数码管作显示
.
图3-2数码管引脚图
三、本实例采用74LS247作数码管控制芯片.
图3-374LS247引脚图
主要引脚功能:
1、BCD输入(1、2、6、7):
接AT89C52;
2、BCD输出(9—15):
接七段译码器;
3、8脚:
地线;
4、16脚:
电源VCC;
图3-474LS247与显示数码管连接图
3.2键盘模块
键盘是最常用的单片机输入设备,大致可以分为独立连接式键盘和矩阵式。
独立连接式键盘是最简单的键盘电路,每个键独立接入一根数据线。
这种键盘结构简单,使用方便,但是占用的I/O口线较多。
矩阵式键盘由行线和列线组成,按键位于行列的交叉点上,行线通过上拉电阻接到高电平。
行列式键盘可节省I/O口,适合按键数较多的场合。
所以本例的4X4键盘采用矩阵式键盘。
图3-5键盘输入模块
通过行列键盘扫描的方法可获取键盘输入的键值,从而知道按下的是哪个键,具体过程如下:
(1)查询是否键按下。
单片机向行扫描口输出全为“0”的扫描码,然后检测列线信号,只要有一列信号不为“1”,则表示有键按下,且不为“1”的列即是按下的键的所在列。
(2)查询按下键所在具体位置。
用逐行扫描的方法确定按下键所在的行号。
单片机先使第一行为“0”,其余行为“1”,接着进行信号检测,若全为“1”则按下键不在第一行;然后是第二行为“0”,其余行为“1”,接着进行信号检测,若全为“1”,则按下键不在第二行;往下依次类推。
(3)将得到的行号列号译码。
对于4X4行列式键盘,可用一个字节(8位)来对键盘编码。
本例中,将直接的高4为表示列号,低4位表示行号。
在键盘扫描过程中,应该注意以下几个问题:
(1)按下按键时,按键会产生机械抖动,一般持续几到几十毫秒。
在键盘扫描过程中,必须注意键盘的消抖处理,我们在实际制作中采用延时的方法来进行简易消抖。
(2)在键盘扫描过程中,应防止按一次键而多个对应键输入的情况。
在按键处理完毕后,还应检测按下的键是否松开,只有按下的键松开后程序才往下执行。
这样每按一个键,只做一个键处理。
表3-1键盘的按键与键值编码对应关系表
按键
列号
行号
键值编码
1(低3MI)
1
1
11H(00010001)
2(低4FA)
1
2
21H(00100001)
3(低5SO)
1
3
41H(01000001)
4(低6LA)
1
4
81H(10000001)
5(低7SI)
2
1
12H(00010010)
6(中1DO)
2
2
22H(00100010)
7(中2RE)
2
3