基于单片机的简易电子琴电路设计.docx

上传人:b****5 文档编号:29539799 上传时间:2023-07-24 格式:DOCX 页数:24 大小:414.28KB
下载 相关 举报
基于单片机的简易电子琴电路设计.docx_第1页
第1页 / 共24页
基于单片机的简易电子琴电路设计.docx_第2页
第2页 / 共24页
基于单片机的简易电子琴电路设计.docx_第3页
第3页 / 共24页
基于单片机的简易电子琴电路设计.docx_第4页
第4页 / 共24页
基于单片机的简易电子琴电路设计.docx_第5页
第5页 / 共24页
点击查看更多>>
下载资源
资源描述

基于单片机的简易电子琴电路设计.docx

《基于单片机的简易电子琴电路设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的简易电子琴电路设计.docx(24页珍藏版)》请在冰豆网上搜索。

基于单片机的简易电子琴电路设计.docx

基于单片机的简易电子琴电路设计

单片机课程设计任务书

题目:

基于单片机的简易电子琴电路设计

初始条件:

简易电子琴一般具有弹奏一个自然大调7声音阶的功能。

本课程设计,要求用AT89C51等系列芯片实现控制功能,利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用LM386放大电路实现低音频功率放大;最后用蜂鸣器进行播放“送别”。

 

要求完成的主要任务:

1.设计任务 

根据已知条件,设计并制作一个简易电子琴。

 

2.设计要求 

(1)基本要求:

 

①具备7个按键,能够分别较准确地弹奏出1~7八个音符。

 

②选择电路方案,完成对确定方案电路的设计。

计算电路元件参数与元件选择、并画出总体电路原理图,阐述基本原理。

用EWB或MULTISIM软件完成仿真,之后制作出相应实物,并按规定格式写出课程设计报告书。

(2)扩展要求:

(在完成基本要求的前提下,学有余力的同学可完成) 

① 能够弹奏出至少21个音符(三个音阶)。

 

② 能够较便捷地完成音阶的升降。

(用另外三个按键开关实现正常、升8度和降8度的切换)。

 

时间安排:

序号

阶段容

所需时间(周)

1

方案选择及电路设计

假期进行

2

制作、编程、调试

1

3

撰写课程设计报告及答辩

1

合计

2

 

指导教师签名:

年月日

基于单片机的简易电子琴控制系统设计

摘要

目的:

本设计主要研究基于AT89C52单片机的简易电子琴设计。

方法:

它是以单片机作为主控核心,设置键盘、蜂鸣器等外围器件;另外还用到一些简单器件如:

两位数码管,和NPN型三极管及电阻等。

利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用NPN型三极管8550实现低音频功率放大;最后用蜂鸣器进行播放“送别”。

结果:

本设计硬件部分主要由最小系统,按键系统模块、数码管显示模块和蜂鸣器模块组成。

其软件部分主要有主程序模块、定时中断程序、定时计数程序、显示程序。

(1)最小系统:

它是单片机应用系统的设计基础。

它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。

(2)按键系统模块:

本设计采用10个按键,其中7个按键用来显示7个音调,其它3个按键可以进行高低中音的切换,并自动播放已存歌曲。

(3)数码管显示模块:

SM420562段选端接在单片机的P0口,两个位选端分别接在P2^0和P2^1。

(4)蜂鸣器模块:

此电子琴发音电路是通过三极管驱动蜂鸣器发音,经过上拉电阻提高驱动能力。

结论:

本次设计首先对单片机设计简易电子琴仔细分析,接着制作硬件电路和编写软件的程序,最后进行软硬件的调试运行。

并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。

利用单片机产生不同频率来获得我们要求的音阶,实现高、中、低共21个音符的发音和显示和音乐播放时的控制显示,并且能自动播放程序中编排的音乐。

系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比高等,具有一定的使用和参考价值。

关键词:

单片机定时中断蜂鸣器数码管c语言编程

 

1系统设计

本项目所制作的电子琴控制系统是以51单片机为核心的系统,它主要包括模拟信号

主控芯片89C52、发音单元、显示模块、按键模块组成。

具体方案如图1-1所示:

 

图1-1系统模块

采用AT89C52单片机作为主控芯片,设置键盘、蜂鸣器等外围器件,另外还用到一些简单器件如:

两位数码管,和NPN型三极管及电阻等。

利用按键实现音符和音调的输入;两位的数码管进行被操作的按键显示;用NPN型三极管8550实现低音频功率放大;最后用蜂鸣器发音。

2硬件电路设计

2.1显示部分设计

(1)数码显示方式

数码显示有静态显示方式与动态显示方式两种。

工作在静态显示方式时,数码管的位线与电源一直相连,数码管中的二极管均处于通电状态,即在静态工作方式下,显示电路中数码管的位选线是同时选通,而数码管的段选线是独立输入。

工作在动态显示方式时,数码管的位线在扫描控制电路的控制下按设定顺序导通,即电路中的数码管是逐个接通电源,数码管的段选线以并联方式与译码电路联接,即在动态工作方式下,数码管不是同时导通显示而是按照设定顺序分时导通显示。

(2)八位数码管的结构

本次课程设计的显示电路采用两位数码管进行显示,由于此设计采用的是共阴极的,使用时不加限流电阻为了显示字符,要为LED显示器段码,除了组成8字形的字符的7段,另加上1个小数点位,共计8段,因此提供给LED显示器的显示段码为1个字节。

 

图2-1数码管电路

2.2按键部分设计

(1)操作键设计

常用的按键有三种:

机械触点式按键、导电橡胶式和柔性按键(又称触摸式键盘)。

  机械触点式按键是利用机械弹性使键复位,手感明显,连线清晰,工艺简单,适合单件制造。

但是触点处易侵入灰尘而导致接触不良,体积相对较大。

  导电橡胶按键是利用橡胶的弹性来复位,通过压制的方法把面板上所有的按键制成一块,体积小,装配方便,适合批量生产。

但是时间长了,橡胶老化而使弹力下降,同时易侵入灰尘。

  柔性按键是近年来迅速发展的一种新型按键,可以分为凸球型和平面型两种。

柔性按键最大特点是防尘、防潮、耐蚀,外形美观,装嵌方便。

而且外形和面板的布局、色彩、键距可按照整机的要求来设计。

但是由于客观条件与经济能力有限,本系统采用机械触点式按键。

(2)键盘设计

键盘在单片机应用系统中是一个关键的部件,它能实现向计算机输入数据,传送命令等功能,是人工干预计算机的主要手段。

键盘可以分为2类:

独立连接式键盘和矩阵式键盘。

矩阵式键盘:

单片机系统中,若按键较多时,通常采用矩阵式(也称行列式)键盘。

矩阵式键盘由行线和列线组成,按键位于行、列线的交叉点上。

显然,在按键数量较多时,矩阵式键盘较之独立式按键键盘要节省很多I/O口。

矩阵式键盘中,行、列线分别连接到按键开关的两端,行线通过上拉电阻接到+5V上.当无键按下时,行线处于高电平状态;当有键按下时,行、列线将导通,此时,行线电平将由与此行线相连的列线电平决定。

这是识别按键是否按下的关键。

独立连接式键盘:

独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。

独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,然而,在按键较多时,I/O口线浪费较大,不宜采用。

独立式按键软件常采用查询式结构。

先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

由于本程序较为简单,为了使用方便及节省资源,选择独立式键盘。

下图为独立式键盘电路图:

 

图2-2独立式键盘电路图

(3)去抖动

键盘编程中主要考虑去抖动的问题。

当测试表明有键被按下之后,紧接着就进行去抖动处理。

因为键是机械开关结构,由于机械触点的弹性及电压突跳等原因,在触点闭合或断开的瞬间会出现电压抖动。

为保证键识别的准确,在电压信号抖动的情况下不能进行行状态输入。

为此需进行去抖动处理。

去抖动有硬件和软件两种方法。

硬件方法就是加去抖动电路,从根本上避免抖动的产生。

软件消抖,在第一次检测到有键按下时,执行一段延时程序之后,再检测此按键,如果第二次检测结果仍为按下状态,CPU便确认此按键己按下,消除了抖动。

2.3发音部分设计

如下图所示,发音电路是由蜂鸣器、三极管、上拉电阻构成。

由三极管来驱动扬声器发音的,同时加上拉电阻增强驱动电流,提高驱动能力。

图2-3独立式键盘电路图

 

3软件程序设计

3.1系统分析

(1)系统软件的组成

①键盘扫描程序:

检测是否有按键按下,有按键按下则记录按下键的键值,并跳转至功能转移程序;无按键按下,则返回键盘扫描程序继续检测。

②功能转移程序:

对检测到的按键值进行判断,是琴键则跳转至琴键处理程序,是功能键则跳转至相应的功能程序,我们设计的功能程序有两种,即音色调节功能和自动播放乐曲的功能。

③琴键处理程序:

根据检测到的按键值,查询音调表,给计时器赋值,使发出相应频率的声音。

④自动播放歌曲程序:

检测到按键按下的是自动播放歌曲功能键后执行该程序,电子琴会自动播放事先已经存放的歌曲,歌曲播放完毕之后自动返回至键盘扫描程序,继续等待是否有按键按。

3.2参数计算

(1)发音原理

若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。

利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。

就可在P1.0引脚上得到此频率的脉冲。

利用AT89C51的部定时器使其工作计数器模式(MODE1)下,改变计数值TH0及TL0以产生不同频率的方法产生不同音阶。

(2)计算举例

例如,频率为523Hz,其周期T=1/523=1912μs,因此只要令计数器计时956μs/1μs=956,每计数956次时将I/O反相,就可得到中音DO(523Hz)。

计数脉冲值与频率的关系式是:

N=fi÷2÷fr,式中,N是计数值;fi是机器频率(晶体振荡器为12MHz时,其频率为1MHz);fr是想要产生的频率。

其计数初值T的求法如下:

T=65536-N=65536-fi÷2÷fr

例如:

设K=65536,fi=1MHz,求中音DO(261Hz)。

T=65536-N=65536-fi÷2÷fr=65536-1000000÷2÷fr=65536-500000/fr,中音DO的T=65536-500000/523=64580。

(3)计算结果

(1)单片机12MHZ晶振,中音符与计数T0相关的计数值如表所示:

音符

频率(HZ)

计数值(T值)

音符

频率(HZ)

计数值(T值)

低1DO

262

63628

#4FA#

740

64860

#1DO#

277

63737

中5SO

784

64898

低2RE

294

63835

#5SO#

831

94934

#2RE#

311

63928

中6LA

880

64968

低3MI

330

64021

#6LA#

932

64994

低4FA

349

64103

中7SI

968

65030

#4FA#

370

64185

低1DO

1046

65058

低SO

392

64260

#1DO#

1109

65085

#5SO#

415

64331

高2RE

1175

65110

低6LA

440

64400

#2RE#

1245

65134

#6LA#

466

64463

高3MI

1318

65157

低7SI

494

64524

高4FA

1397

65178

中1DO

523

64580

#4FA#

1490

65198

#1DO#

554

64633

高5SO

1568

65217

中2RE

587

64633

#5SO#

1661

65235

#2RE#

622

64884

高6LA

1760

65252

中3MI

659

64732

#6LA#

1865

65268

中4FA

698

64820

高7SI

1967

65283

采用查表程序进行查表时,可以为这个音符建立一个表格,有助于单片机通过查表的方式来获得相应的数据:

低音0-19之间,中音在20-39之间,高音在40-59之间。

用单片机播放音乐,或者弹奏电子琴,实际上是按照特定的频率,输出一连串的方波。

为了输出合适的方波,首先应该知道音符与频率的关系。

(2)音调数据表

曲调值

DELAY

曲调值

DELAY

调4/4

125ms

调4/4

62ms

调3/4

187ms

调3/4

94ms

调2/4

250ms

调2/4

125ms

上表中的频率数值,有些过多,去掉不常用的黑键频率,只是把白键对应的数据存放在单片机中,即可满足绝大部分的应用需求。

定义音调数据表的程序如下:

DW63628,63835,64021,64103,64260,64400,6452464580,低音区:

1234567

DW64580,64671,64777,64820,64898,64968,6503065058中音区:

1234567

DW65058,65110,65157,65178,65217,65252,6528365312高音区:

1234567

把这个数据表,放在程序中,需要播音的时候,就从表中取出一个数据送到定时器,当定时器溢出中断的时候,再对输出引脚取反,那么,在扬声器中,即可听到上表中频率的声音。

3.3程序设计

(1)判断音阶(高中低音)子程序

在软件设计中采用yinjie代表音阶,如下所示

音阶

Yinjie值

2

1

0

初始化状态为中音(yinjie=1),电路中设计高、低两个音阶键。

上电后,若无按键按下,则为中音模式。

若音阶键被按下,则如下流程图所示,初始化后进行按键扫描,在高音键按下,若初始yinjie不为2,则另yinjie=2,进入高音工作模式,若初始yinjie为2,则对yinjie进行初始化,即另yinjie=1,重新进入进入中音工作模式,这样即实现了高音键切换高、中音方式的转换。

同理,用低音键实现中、低音的切换。

图3-1判断音阶(高中低音)子程序

(2)播放子程序(包括自动播放存储音乐和按键发音)

本设计共两种播放模式,包括自动播放存储音乐和按键发音。

上电后,首先开中断并设定定时器0为工作方式1,当自动播放键按下时,进入中断,根据乐谱在定义的音频数组中查找相应音律,然后给定时器赋初值,即开始播放音乐。

当DO、RE、MI、FA、SO、LA、SI七种音符键按下时,根据音阶值(如3.3.1中高中低对应)和音符值在定义的音频数组中查找相应音律,然后给定时器赋初值,即按键发音。

图3-2播放子程序

 

(3)由此可得系统总体功能流程图

图3-3系统总功能流程图

4系统仿真与调试

4.1硬件调试

硬件调试主要是针对单片机部分进行的调试。

在上电之前,先确保电路中不存在断路或短路情况,这一工作是整个调试工作的第一步,也是非常重要的一个步骤。

在这部分调试中主要使用的工具是万用表,用来完成检测电路中是否存在断路或者短路情况的任务。

注意焊点之间,确保焊点没有短接在一起,同时注意焊点的美观,确保没有开路以及短路的现象出现。

在确保硬件电路正常且无异常情况(断路或短路)的情况下方可上电调试,上电调试的目的是检验电路是否接错,同时还要检验原理是否正确,在本次设计中,上电调试主要是检测单片机控制部分、数码管点亮部分、和音频转换电路硬件调试。

(1)、数码管LED电路调试:

接通电源,随机按下按钮可以看到数码管显示数字。

(2)、键盘单片机控制部分调试:

上电后,随机按动键盘可以发现各个按键对应的音正确。

4.2软件调试

调试主要方法和技巧:

通常一个调试程序应该具备至少四种性能:

跟踪、断点、查看变量、更改数值。

整个程序是一个主程序调用各个子程序实现功能的过程,要使主程序和整个程序都能平稳运行,各个模块的子程序的正确与平稳运行必不可少,所以在软件调试的最初阶段就是把各个子程序模块进行分别调试。

4.3仿真结果(任举一例)

图4-1低音音符DO仿真图

4.4结果分析

根据仿真结果可知,本次课程设计能够准确并彻底的完成设计要求。

左侧数码管可以显示a、b、c三种结果,分别代表低音、中音和高音。

右侧数码管可以显示1、2、3、4、5、6、7七个数字,分别代表DO、RE、MI、FA、SO、LA、SI七种音符。

下面以4.3为例具体进行分析:

当系统上电后,若按下低音键(如图P3.6),,则选定工作方式为低音模式,图中a即代表低音。

P0口连接数码管段选端,右侧数码管显示的1即代表DO。

两位数码管即代表低音DO。

5总结与展望

总体来说,此次单片机课程设计使我们收获良多,虽然课程设计的过程中遇到了很多困难与问题,但我们最终还是完成了设计的任务及要求。

具体来说可以分为以下几点:

第一,不够细心,不够严谨(如因为粗心大意而焊错线);第二,因对课本理论的掌握度不够导致编程出现错误;第三,硬件方面,刚开始有的程序模块不能实现预期的效果,对于有的硬件,在实物制作过程中焊了比较多的排线,同时对于整体各元器件的布局都有很高的要求。

不过在向同学请教,各方面都有了不同程度的改善;第四,在做人方面,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力和决心,有足够的挑战困难的勇气,就没有什么办不到的。

这次课程设计中,经过我们的努力,在仿真软件和实物上都实现了高、中、低21个音符的发声和音乐的自动播放,使我们有了一定的成就感,也使我们进一步熟悉和掌握了单片机的部结构和工作原理,了解了单片机应用系统设计的基本方法和步骤,掌握了单片机仿真软件Proteus的使用方法和键盘、显示器在的单片机控制系统中的应用,同时也掌握了撰写课程设计报告的方法。

总之,通过这次课程设计,我们都清楚明白了自己的能力有多深,想提高还得归于多锻炼,多动手,多向别人学习。

6参考文献

【1】余发山、王福忠.单片机原理及应用技术.中国矿业大学.2008年6月第1版

【2】凌霄.微型计算机原理与应用,中国矿业大学.2008年8月第一版

【3】康华光.电子技术基础(数字部分),高等教育.第五版

【4】徐志军,伊廷辉等.EDA技术与PLD设计人民邮电,2006年2月第1版

【5】朝青.单片机原理及接口技术[M].:

航天航空大学出版色,2001.

【6】胡汉才.单片机原理及其接口技术[M].:

清华大学,2004.

 

附件1:

源程序代码

#include

#definekeyportP1

#defineucharunsignedchar

#defineuintunsignedint

ucharhigh,low;//定时器预装值的高8位和低8位

sbitspeak=P3^0;

sbitgao=P3^5;

sbitdi=P3^6;

sbitzdbf=P3^7;

ucharyinjie=1;

uchartime;

ucharn=0;

ucharbo=0;

ucharcodefre[][2]={

0x8c,0xf8,

0x5b,0xf9,

0x15,0xfa,

0x67,0xfa,

0x90,0xfb,

0xae,0xfb,

0x0c,0xfc,//低音

0x44,0xfc,

0xac,0xfc,

0x09,0xfd,

0x34,0xfd,

0x82,0xfd,

0xc2,0xfd,

0x06,0xfe,//中音

0x22,0xfe,

0x56,0xfe,

0x85,0xfe,

0x9a,0xfe,

0xc1,0xfe,

0xe4,0xfe,

0x03,0xff,//高音

};

voiddelay(uint);

voidITimer0(void);//定时器初始化

voidkey(void);

voiddtxs(int,int);

voidsong()

{

TH0=high;

TL0=low;

TR0=1;

delay(time*240);

}

voidyinyue()

{

ucharcodehls[]={5,2,2,3,2,1,5,2,1,1,3,4,6,2,2,1,3,2,5,2,4,5,2,2,1,2,1,2,2,1,3,2,2,2,2,1,

1,2,1,2,2,6,5,2,2,3,2,1,5,2,1,1,3,3,7,2,1,6,2,2,1,3,2,5,2,4,5,2,2,

2,2,1,3,2,1,4,2,3,7,1,1,1,2,6,6,2,2,1,3,2,1,3,4,7,2,2,6,2,1,7,2,1,1,3,4,6,2,1,

7,2,1,1,3,1,6,2,1,6,2,1,5,2,1,3,2,1,1,2,1,2,2,6,5,2,2,3,2,1,

1,2,1,1,3,3,7,2,1,6,2,2,1,3,2,5,2,4,5,2,2,2,2,1,3,2,1,4,2,3,7,1,1,1,2,6

};

ucharm;

n=0;

while(n<174)

{

m=hls[n]+7*(hls[n+1]-1)-1;

high=fre[m][1];

low=fre[m][0];

time=hls[n+2];

n=n+3;

song();

}

}

voidmain(void)

{

ucharnum;

ITimer0();

speak=0;

while

(1)

{

key();

switch(keyport)

{

case0xfe:

num=1;break;

case0xfd:

num=2;break;

case0xfb:

num=3;break;

case0xf7:

num=4;break;

case0xef:

num=5;break;

case0xdf:

num=6;break;

case0xbf:

num=7;break;

case0x7f:

num=8;break;

default:

num=0;break;

}

if(num==0)

{

TR0=0;

speak=0;

}

else

{

high=fre[7*yinjie+num-1][1];

low=fre[7*yinjie+num-1][0];

TR0=1;

}

dtxs(yinjie,num);

}

}

voidITimer0(void)

{

TMOD|=0x01;//使用模式1,16位定时器,使用"|"符号可以在使用多个定时器时不受影响

EA=1;//总中断打开

ET0=1;//定时器中断打开

TR0=1;//定时器开关打开

}

voidTimer0_isr(void)interrupt1

{

TH0=high;

TL0=low;

speak=!

speak;

if(zdbf==0)

{

delay(100);

if(zdbf==0)

{

bo++;

if(bo/2==1)

{delay(100);

if(n<174)n=500;//n赋值大于174,跳出while,停止音乐

else

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

当前位置:首页 > 经管营销 > 经济市场

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

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