电子琴设计Word下载.docx

上传人:b****3 文档编号:16751677 上传时间:2022-11-25 格式:DOCX 页数:82 大小:593.74KB
下载 相关 举报
电子琴设计Word下载.docx_第1页
第1页 / 共82页
电子琴设计Word下载.docx_第2页
第2页 / 共82页
电子琴设计Word下载.docx_第3页
第3页 / 共82页
电子琴设计Word下载.docx_第4页
第4页 / 共82页
电子琴设计Word下载.docx_第5页
第5页 / 共82页
点击查看更多>>
下载资源
资源描述

电子琴设计Word下载.docx

《电子琴设计Word下载.docx》由会员分享,可在线阅读,更多相关《电子琴设计Word下载.docx(82页珍藏版)》请在冰豆网上搜索。

电子琴设计Word下载.docx

考虑到稳定性因素,选用方案

(1)。

5、键盘输入模块

采用矩阵键盘(N×

M),每个按键占据行列的一个交点,需要的I/O口数目是N+M,容许的最大键数是N×

M。

新型键盘,用N个I/O口以及一个中断口,可以实现N×

N个按键,比较节省I/O资源,故采用之。

二、系统框图

基于AtmelMega16L电子琴系统的硬件总体结构图如图1所示,主要包括中央处理器MCU、单键开关机电路,1602显示模块、功放模块、键盘模块、电平灯频谱显示模块等。

三、各模块的设计与论证

1、中央处理器MCU

中央处理器选用的是ATMega16l,ATmega16是基于增强的AVRRISC结构的低功耗8位CMOS微控制器。

具体的电路连接图如图2所示。

PB0~PB7用于连接键盘输入(INT2用于键盘的中断输入);

PD0用于连接单键开关电路的续电;

PD2(INT0)用于连接单键开关电路按键的检测;

PD5用于音律PWM的输出;

PC0~PC7用于连接LCD1602显示输出,其中PC0~PC2用于控制1602的选通、读写控制等的操作,PC3~PC7连接74HC595,实现串行数据转并行数据。

单片机输出频率CTC不同的信号来产生各种音符,将歌曲各个音符的转化成相应的数字信号,存放在单片机程序寄存器中,当播放音乐时,程序从该寄存器里读取数据,然后以CTC信号的模式传给功放电路,实现放音乐的功能。

当要向单片机录入音乐时,通过键盘上的按键,输入不同的音符,接下来单片机可以记录下音符以及其持续的时间,然后存入程序寄存器中,当录音结束,按下“录入确认键”,按下来就可以从菜单里选择播放刚才录入的音乐。

2、单键开关机模块

该电路的工作原理是:

接通K1(总电源开关,外电源接到P0)后,按动轻触开关S2,三极管Q29012导通,VCC输出高电平,单片机接通电源工作后,第一时间给P_OUT一个高电平,三极管Q19013导通,这样,即使按键S2松开了,Q2也依然导通,电路依然接通。

当按键S2再次按下时,单片机检测到P_IN为低电平,这是单片机可以延时一段时间后,将P_OUT置为低电平,Q1截止,Q2也同时截止,电路断开。

3、电平灯频谱显示模块

为了显示的效果更炫,本硬件电路特意增加了一个电平灯频谱显示模块,该模块采用的是一块TP7666芯片,该芯片在老式收音机上非常常见,现在已经很难买到。

该芯片具有双路5点电平显示,而且外围电路原件很少。

4、6×

6键盘模块

该电路的工作原理是:

待机时,PORT1~PORT6输出高电平;

当某个键按下时,PORT7由高电平变为低电平,由此产生一个中断;

MCU启动按键扫描,如按下的是K30时,置PORT1=H,扫描PORT2~6的输入结果为LLLL,没有扫描到所需的结果;

继续置PORT2=H,扫描PORT1、PORT3~6的输入结果为HLLL,按键S30就被唯一确定了。

5、LCD1602液晶显示模块

该模块的连接比较简单,但是若直接使用并行数据传送的话要用到11个IO口,这里为了节省IO口资源,使用也一片74HC595串行数据转并行数据芯片,该芯片与单片机连接最多只需要5个IO口,这样连接一片1602只需要8个IO口,节省了3个IO口。

具体的硬件连接图如下图5所示。

电位器RW1可用于调节背光的亮度,RW2可用于调节液晶的对比度。

6、小功率功放模块

这里的功放模块采用了传统的LM386芯片,采用该芯片是因为LM386具有自身功耗低,电压增益可调整,电源电压范围大,外接元件少和总谐波失真小等优点,尤其是在增益为20DB时使用的外围原件极少。

具体的单路连接如下图6所示。

四、软件程序流程图

五、测量与分析

1(do)

2(re)

3(mi)

4(fa)

5(sol)

6(la)

7(si)

降C

131Hz

147Hz

165Hz

174.5Hz

196Hz

220Hz

247Hz

中央C

261.5Hz

293.5Hz

329.5Hz

349Hz

392Hz

440Hz

494Hz

升C

523Hz

587Hz

659Hz

698Hz

784Hz

880Hz

988Hz

输出音调对应的频率表

按C调来说

1=261.5HZ

2=293.5HZ

3=329.5HZ

4=349HZ

5=392HZ

6=440HZ

7=494HZ

低7个音调后

1=131Hz

2=147Hz

3=165Hz

4=174.5Hz

5=196Hz

6=220Hz

7=247Hz

高7个音调后

1=523Hz

2=587Hz

3=659Hz

4=698Hz

5=784Hz

6=880Hz

7=988Hz

六、总结

经过一翻辛苦努力,终于搞定了电子琴了。

这个过程中团队合作让我们收获很多。

三个同学一起做,不可能每个同学对每项内容都了解得很透彻,需要知识互补。

另外,遇到困难的时候不能指望让一个同学独自解决,团队合作不崇尚单打独斗。

 

七、源程序

主文件go.c:

//主文件,包含主函数

#include<

iom16v.h>

macros.h>

eeprom.h>

#defineucharunsignedchar

#defineuintunsignedint

#definevucharvolatileunsignedchar

#definevuintvolatileunsignedint

#definerecord_max160

//变量定义

vucharkey_int=0,mode_fr=0,counter_en_fr=0,pop_en_fr=0;

vucharrow=0,scrollbar=1,volume,temp,delayMs,tonality,tone;

vucharinttemp;

ucharmusicLength,recordLength;

uintbell_standard_time;

vuintcounter_ms=0;

vucharcounter_record;

vucharsong_4[record_max][2];

//包含头文件

//子函数清单

#include"

function_list.h"

//数据

data.h"

//延时

delay.h"

//键盘中断

int2.h"

//液晶

ts1620.h"

//发声部分

bell.h"

//功能函数1

fun.h"

//功能函数2

fun_need_check.h"

voidmain()

{

power_init();

//一键关机初始化

while

(1)

{

ts1620_init();

//液晶初始化

welcome();

//欢迎界面

all_init();

//各类变量初始化

int2_init();

//键盘中断初始化

mode_fr=0;

//极其的关键变量,记录状态

while(key_int!

=keyreset)

{

if(mode_fr==0)menu();

//主菜单

if(mode_fr==1)manul();

//模式1,手动弹奏初始化

if(mode_fr==1)manul_check();

//模式1,手动弹奏

if(mode_fr==20)autoplay();

//模式20,自动弹奏主菜单

if(mode_fr==210)demand_menu();

//模式210,点播菜单

if(mode_fr==211)demand_play(key_int);

//模式211,点播演奏初始化

if(mode_fr==211)demand_play_check(key_int,211);

//模式211,点播演奏

if(mode_fr==212)demand_play(keyfun4);

//模式212,点播演奏初始化(录音部分)

if(mode_fr==212)demand_play_check(keyfun4,212);

//模式212,点播演奏(录音部分)

if(mode_fr==22)order_play();

//模式22,顺序弹奏

if(mode_fr==23)outorder_play();

//模式23,乱序弹奏

if(mode_fr==31)record();

//模式31,录音初始化

if(mode_fr==31)record_check();

//模式31,录音

if(mode_fr==32)replay();

//模式32,放音

if(mode_fr==50)settings();

//模式50,设置菜单

if(mode_fr==51)settings1();

//模式51,设置拍长

if(mode_fr==52)settings2();

//模式52,设置音阶

}

}

}

以下是function_list.h

//各子程序清单

voiddelay_nop(void);

voiddelay(uint/*_delay_ms*/);

voidint2_init(void);

ucharkey_line(uchar);

ucharkey_search(uchar);

ucharkey_find(void);

voidkey_int2(void);

voidwrite_com(uchar);

voidwrite_data(uchar);

voidclear(void);

voidcursor_return(void);

voidentry_mode_set(uchar,uchar);

voiddisplay_on_off(uchar,uchar,uchar);

voidshift(uchar,uchar);

voidset_function(uchar,uchar,uchar);

voidset_address(uchar,uchar);

voidts1620_init(void);

voidscreen_same(uchar,uchar,uchar);

voidscreen_one(uchar,uchar);

voidscreen_sleep(void);

voidshow_menu(constuchar*,constuchar*);

voidshow_vol(void);

voidshow_screen(constuchar*,uchar,constuchar*,uchar);

voidshow_saving(void);

voidmenu_move(uchar);

voidwelcome(void);

voidall_init(void);

voidmenu(void);

voidmanul(void);

voidmanul_check(void);

voiddelay_check(uint);

voidtonality_c(uchar);

voidbell_init(void);

voidautoplay(void);

voiddemand_menu(void);

voiddemand_play(uchar);

voiddemand_play_check(uchar,uchar);

voidbell_music(uchar,uchar);

voidrecord(void);

voidrecord_check(void);

voidreplay(void);

voidsettings(void);

voidsettings1(void);

voidsettings2(void);

voidorder_play(void);

voidoutorder_play(void);

ucharout_order(void);

voidpower_init(void);

voidpower_off(void);

以下是delay.h

#define_nopdelay_nop()

voiddelay_nop()//微妙级别延时函数

asm("

nop"

);

voiddelay(uint_delay_ms)//毫秒级别延时函数

uint_delay_i,_delay_j;

for(_delay_i=0;

_delay_i<

_delay_ms;

_delay_i++)

for(_delay_j=0;

_delay_j<

1711;

_delay_j++);

以下是data.h

//此头文件包含各类数据,data(存放在程序存储区)

#pragmainterrupt_handlerkey_int2:

iv_INT2

#pragmainterrupt_handlerpower_off:

iv_INT0

#defineINTPORT10

#defineINTPORT21

#defineINT_22

#defineINTPORT33

#defineINTPORT44

#defineINTPORT55

#defineINTPORT66

#defineton10x16

#defineton20x26

#defineton30x36

#defineton40x46

#defineton50x56

#defineton60x66

#defineton70x13

#defineton80x15

#defineton90x25

#defineton100x35

#defineton110x45

#defineton120x55

#defineton130x65

#defineton140x23

#defineton150x14

#defineton160x24

#defineton170x34

#defineton180x44

#defineton190x54

#defineton200x64

#defineton210x33

#definekeysleep0x61

#definekeyreturn0x51

#definekeymenu0x52

#definekeyreset0x62

#definekeyvolOn0x11

#definekeyvolDn0x12

#definekeymenuUp0x41

#definekeymenuDn0x42

#definekeyfun10x21

#definekeyfun20x31

#definekeyfun30x22

#definekeyfun40x32

#definekeyreplay0x63

#definekeypause0x53

#definekeyres0x43

#pragmadata:

code

constucharwelcome_0[]="

Welcome..."

;

constucharpower_0[12]="

GOODBYE"

constucharpower_1[15]="

poweroff:

3s"

constucharwelcome_1[]="

madByBinFenLinYe"

constucharmanul_0[14]="

ManulModeton"

constucharmanul_1[9]="

Tonality:

"

constucharrecord_0[14]="

Recordington"

constucharreplay_0[14]="

Replayington"

constucharsaving[9]="

Saving..."

constucharIc_0[][15]={{"

WhichmodedoU"

},

{"

wanttochoose?

1.Manualplay"

2.Autoplay"

3.Recordmode"

4.Setting"

}};

constucharIc_20[][15]={{"

1.Playmusicon"

demand"

2.Playinorder"

3.Playoutof"

order"

constucharIc_210[][16]={{"

1.Welcometo"

Beijing"

2.Legend"

3.Myth"

4.PlaybyMyself"

constucharIc_50[][16]={{"

1.Beatlength"

2.Toneselection"

constucharIc_51[][15]={{"

1.1200ms/Beat"

2.1100ms/Beat"

3.1000ms/Beat"

4.900ms/Beat"

5.800ms/Beat"

6.700ms/Beat"

7.300ms/Beat"

constucharIc_52[][15]={{"

1.Ctone"

2.Dtone"

3.Etone"

4.Ftone"

5.Gtone"

constucharbjhyn_title[]="

WelcomeToBjt"

constuchardemand_title[]="

OnPlay"

constucharlegend_title[]="

Legendt"

constucharmyth_title[]="

Mytht"

constucharplayBm_title[]="

PlayByMet"

constucharsongs[][2]={{10,0x84},

{16,0x84},{10,0x84},{9,0x84},{10,0x84},{9,0x84},

{10,0x88},{10,0x86},{9,0x82},{6,0x84},{8,0x84},

{10,0x84},{9,0x8c},{9,0x84},{8,0x84},{6,0x84},

{8,0x84},{9,0x84},{10,0x84},{12,0x84},{9,0x84},

{10,0x84},{13,0x84},{12,0x84},{5,0x84},{9,0x88},

{8,0x88},{9,0x84},{8,0x84},{6,0x84},{8,0x84},

{9,0x84},{10,0x84},{12,0x84},{9,0x84},{10,0x84},

{13,0x84},{12,0x84},{10,0x90},{9,0x84},{10,0x84},

{9,0x84},{8,0x84},{12,0x86},{13,0x82},{10,0x88},

{6,0x84},{10,0x84},{9,0x84},{9,0x84},{8,0x8c},

{0,0x84},{10,0x84},{12,0x84},{15,0x84},{12,0x84},

{13,0x8c},{12,0x84},{13,4},{12,0x84},{10,0x84},

{10,0x84

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

当前位置:首页 > 工程科技 > 能源化工

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

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