电子琴实训报告.docx

上传人:b****6 文档编号:8529128 上传时间:2023-01-31 格式:DOCX 页数:18 大小:80.85KB
下载 相关 举报
电子琴实训报告.docx_第1页
第1页 / 共18页
电子琴实训报告.docx_第2页
第2页 / 共18页
电子琴实训报告.docx_第3页
第3页 / 共18页
电子琴实训报告.docx_第4页
第4页 / 共18页
电子琴实训报告.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

电子琴实训报告.docx

《电子琴实训报告.docx》由会员分享,可在线阅读,更多相关《电子琴实训报告.docx(18页珍藏版)》请在冰豆网上搜索。

电子琴实训报告.docx

电子琴实训报告

北方名族大学

电气信息工程学院

课程设计实训报告

设计题目:

简易电子琴设计与制作

报告人:

刘泽华

学院:

电器信息工程学院

专业:

测控技术与仪器

班级:

08级测控班学号:

实训地点:

4#教学楼

指导教师姓名:

毛建东,周春燕

实训日期:

2010.12.19-2010.12.24

 

1.实训课题…………………………………3

2.设计目的…………………………………3

3.设计原理…………………………………3

4.硬件电路…………………………………4

5.软件流程…………………………………8

6.Proteus仿真……………………………14

7.C语言源程序…………………………18

8.元件清单…………………………………25

9.心得体会…………………………………26

 

一.设计的课题:

简易电子琴的设计与制作

二.课程设计的目的:

培养和锻炼在校学生综合应用所学理论知识解决实际问题能力。

为了巩固和运用所学课程,理论联系实际,提高分析、解决实际问题以及团队的合作能力,旨培养在培养大学生理论联系实际、敢于动手、善于动手和独立自主解决设计实践中遇到的各种问题能力的一种较好方法。

电子琴能够弹奏出美妙的音符,对我们充满了吸引同时也让我们充满了好奇,通过此次的课程设计让我们亲手来揭开电子琴神秘的面纱。

让我们知道我们也是有能力来制作出一个简易的电子琴的。

三、课程设计原理:

电子琴是由4*4个组成16个按钮矩阵,设计成16个音。

然后利用三极管放大的原理使声音变大,可通过16个按钮组成16种不同的音节。

本文的主要内容是用AT89S51单片机为核心控制元件,设计一个电子琴。

以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。

声音的产生方法:

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。

 

四、硬件电路

(一)、系统板硬件连线

系统板硬件连线如图1-1所示,发生模块,键盘模块,及电源模块连接如下:

1.把“单片机系统”区域中的P2.0端口用导线连接到“音频放大模块”区域中的SPKIN端口上;

2.把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;

3.把电源电路与扬声器连接,直接对扬声器供电。

(二)、主要芯片简介

1、AT89S51简介

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等三种封装形式,以适应不同产品的需求。

主要功能特性

·兼容MCS-51指令系统      

·32个双向I/O口

·2个16位可编程定时/计数器  

·全双工UART串行中断口线

·2个外部中断源      

·中断唤醒省电模式

图1-2引脚图

·看门狗(WDT)电路  

·灵活的ISP字节和分页编程

·4k可反复擦写ISPFlashROM

·4.5-5.5V工作电压

·时钟频率0-33MHz 

·128*8bit内部RAM

·低功耗空闲和省电模式  

·3级加密位

·软件设置空闲和省电功能 

·双数据寄存器指针

2、7805简介:

  

  

  

  电子产品中,常见的三端稳压集成电路有正电压输出的78××系列和负电压输出的79××系列。

顾名思义,三端IC是指这种稳压用的集成电路,只有三条引脚输出,分别是输入端、接地端和输出端。

它的样子象是普通的三极管,TO-220的标准封装,也有9013样子的TO-92封装。

  用78/79系列三端稳压IC来组成稳压电源所需的外围元件极少,电路内部还有过流、过热及调整管的保护电路,使用起来可靠、方便,而且价格便宜。

该系列集成稳压IC型号中的78或79后面的数字代表该三端集成稳压电路的输出电压,如7806表示输出电压为正6V,7909表示输出电压为负9V。

因为三端固定集成稳压电路的使用方便,电子制作中经常采用。

五、软件流程

(一)、4X4行列式键盘识别及显示

组成键盘的按键有机械式、电容式、导电橡胶式、薄膜式多种,但不管什么形式,其作用都是一个使电路接通与断开的开关。

目前微机系统中使用的键盘按其功能不同,通常可分为编码键盘和非编码键盘两种基本类型。

编码键盘:

键盘本身带有实现接口主要功能所需的硬件电路。

不仅能自动检测被按下的键,并完成去抖动、防串键等功能,而且能提供与被按键功能对应的键码(如ASCII码)送往CPU。

所以,编码键盘接口简单、使用方便。

但由于硬件电路较复杂,因而价格较贵。

非编码键盘:

键盘只简单地提供按键开关的行列矩阵。

有关按键的识别、键码的确定与输入、去抖动等功能均由软件完成。

目前微机系统中,一般为了降低成本大多数采用非编码键盘。

键盘接口必须具有去抖动、防串键、按键识别和键码产生4个基本功能:

(1)去抖动:

每个按键在按下或松开时,都会产生短时间的抖动。

抖动的持续时间与键的质量相关,一般为5—20mm。

所谓抖动是指在识别被按键是必须避开抖动状态,只有处在稳定接通或稳定断开状态才能保证识别正确无误。

去抖问

题可通过软件延时或硬件电路解决。

(2)防串键:

防串键是为了解决多个键同时按下或者前一按键没有释放又有新的按键按下时产生的问题。

常用的方法有双键锁定和N键轮回两种方法。

双键锁定,是当有两个或两个以上的按键按下时,只把最后释放的键当作有效键并产生相应的键码。

N键轮回,是当检测到有多个键被按下时,能根据发现它们的顺序依次产生相应键的键码。

(3)被按键识别:

如何识别被按键是接口解决的主要问题,一般可通过软硬结合的方法完成。

常用的方法有行扫描法和线反转法两种。

行扫描法的基本思想是,由程序对键盘逐行扫描,通过检测到的列输出状态来确定闭合键,为此,需要设置入口、输出口一个,该方法在微机系统中被广泛使用。

线反转法的基本思想是通过行列颠倒两次扫描来识别闭合键,为此需要提供两个可编程的双向输入/输出端口。

(4)键码产生:

为了从键的行列坐标编码得到反映键功能的键码,一般在内存区中建立一个键盘编码表,通过查表获得被按键的键码。

用AT89S51的并行口P1接4×4矩阵键盘,以P1.0-P1.3作输入线,以P1.4-P1.7作输出线。

 

(二)、系统板上硬件连线设计

1、把“单片机系统”区域中的P1.0-P1.7端口用8芯排线连接到“4X4行列式键盘”区域中的C1-C4 R1-R4端口上;

2、把扬声器的基极输出接单片机的P2.0端口;

3、在单片机31脚和9脚接复位电路;

4、在单片机19脚和18脚接12MHZ的晶体振荡电路。

(三)、程序设计内容

1、4×4矩阵键盘识别处理,每个按键有它的行值和列值,行值和列值的组合就是识别这个按键的编码。

矩阵的行线和列线分别通过两并行接口和CPU通信。

每个按键的状态同样需变成数字量“0”和“1”,开关的一端(列线)通过电阻接VCC,而接地是通过程序输出数字“0”实现的。

2、键盘处理程序的任务是:

确定有无键按下,判断哪一个键按下,键的功能是什么;还要消除按键在闭合或断开时的抖动。

两个并行口中,一个输出扫描码,使按键逐行动态接地,另一个并行口输入按键状态,由行扫描值和回馈信号共同形成键编码而识别按键,通过软件查表,查出该键的功能。

电路图如下

(四)、音乐产生的方法

一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这

样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。

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

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

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

   利用AT89S51的内部定时器使其工作计数器模式(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

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

低音DO的T=65536-/262=63627

中音DO的T=65536-/523=64580

高音DO的T=65536-/1046=65059

单片机12MHZ晶振,高中低音符与计数T0相关的计数值如表2-2所示

表2-2音符频率表

Table2-2notesthefrequencytable

音符

频率(HZ)

简谱码(T值)

音符

频率(HZ)

简谱码(T值)

低1 DO

262

63628

#4FA#

740

64860

#1 DO#

277

63731

中5SO

784

64898

低2 RE

294

63835

#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

我们要为这个音符建立一个表格,单片机通过查表的方式来获得相应的数据

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

TABLE:

DW0,63628,63835,64021,64103,64260,64400,64524,0,0

DW0,63731,63928,0,64185,64331,64463,0,0,0

DW0,64580,64684,64777,64820,64898,64968,65030,0,0

DW0,64633,64732,0,64860,64934,64994,0,0,0

DW0,65058,65110,65157,65178,65217,65252,65283,0,0

DW0,65085,65134,0,65198,65235,65268,0,0,0

DW0    

 

音乐的音拍,一个节拍为单位(C调)(如表2-3所示)

表2-3曲调值表

Table2-3Tunethevalueofthetable

曲调值

DELAY

曲调值

DELAY

调4/4

125ms

调4/4

62ms

调3/4

187ms

调3/4

94ms

调2/4

250ms

调2/4

125ms

 

对于不同的曲调我们也可以用单片机的另外一个定时/计数器来完成。

琴键处理程序,根据检测到得按键值,查询音律表,给计时器赋值,发出相应频率的声音。

对音调的控制:

根据不同的按键,对定时器T1送入不同的初值,调节T1的溢出时间,这样就可以输出不同音调频率的方波。

不同音调下各个音阶的定时器。

在这个程序中用到了两个定时/计数器来完成的。

其中T0用来产生音符频率,T1用来产生音拍。

 

六、proteus仿真

 

七、程序

#include//包含51单片机寄存器定义的头文件

sbitP14=P1^4;//将P14位定义为P1.4引脚

sbitP15=P1^5;//将P15位定义为P1.5引脚

sbitP16=P1^6;//将P16位定义为P1.6引脚

sbitP17=P1^7;//将P17位定义为P1.7引脚

unsignedcharkeyval;//定义变量储存按键值

sbitsound=P2^0;//将sound位定义为P3.7

unsignedintC;//全局变量,储存定时器的定时常数

unsignedintf;//全局变量,储存音阶的频率

//以下是C调低音的音频宏定义

#definel_dao262//将“l_dao”宏定义为低音“1”的频率262Hz

#definel_re286//将“l_re”宏定义为低音“2”的频率286Hz

#definel_mi311//将“l_mi”宏定义为低音“3”的频率311Hz

#definel_fa349//将“l_fa”宏定义为低音“4”的频率349Hz

#definel_sao392//将“l_sao”宏定义为低音“5”的频率392Hz

#definel_la440//将“l_a”宏定义为低音“6”的频率440Hz

#definel_xi494//将“l_xi”宏定义为低音“7”的频率494Hz

//以下是C调中音的音频宏定义

#definedao523//将“dao”宏定义为中音“1”的频率523Hz

#definere587//将“re”宏定义为中音“2”的频率587Hz

#definemi659//将“mi”宏定义为中音“3”的频率659Hz

#definefa698//将“fa”宏定义为中音“4”的频率698Hz

#definesao784//将“sao”宏定义为中音“5”的频率784Hz

#definela880//将“la”宏定义为中音“6”的频率880Hz

#definexi987//将“xi”宏定义为中音“7”的频率53

//以下是C调高音的音频宏定义

#defineh_dao1046//将“h_dao”宏定义为高音“1”的频率1046Hz

#defineh_re1174//将“h_re”宏定义为高音“2”的频率1174Hz

#defineh_mi1318//将“h_mi”宏定义为高音“3”的频率1318Hz

#defineh_fa1396//将“h_fa”宏定义为高音“4”的频率1396Hz

#defineh_sao1567//将“h_sao”宏定义为高音“5”的频率1567Hz

#defineh_la1760//将“h_la”宏定义为高音“6”的频率1760Hz

#defineh_xi1975//将“h_xi”宏定义为高音“7”的频率1975Hz

/**************************************************************

函数功能:

软件延时子程序

**************************************************************/

voiddelay20ms(void)

{

unsignedchari,j;

for(i=0;i<100;i++)

for(j=0;j<60;j++)

;

}

/*******************************************

函数功能:

节拍的延时的基本单位,延时250ms

******************************************/

voiddelay()

{

unsignedchari,j;

for(i=0;i<250;i++)

for(j=0;j<250;j++)

;

}

/*******************************************

函数功能:

输出音频

入口参数:

F

******************************************/

voidOutput_Sound(void)

{

C=(46083/f)*10;//计算定时常数

TH0=(8192-C)/32;//可证明这是13位计数器TH0高8位的赋初值方法

TL0=(8192-C)%32;//可证明这是13位计数器TL0低5位的赋初值方法

TR0=1;//开定时T0

delay();//延时200ms,播放音频

TR0=0;//关闭定时器

sound=1;//关闭蜂鸣器

keyval=0xff;//播放按键音频后,将按键值更改,停止播放

}

/*******************************************

函数功能:

主函数

******************************************/

voidmain(void)

{

EA=1;//开总中断

ET0=1;//定时器T0中断允许

ET1=1;//定时器T1中断允许

TR1=1;//定时器T1启动,开始键盘扫描

TMOD=0x10;//分别使用定时器T1的模式1,T0的模式0

TH1=(65536-500)/256;//定时器T1的高8位赋初值

TL1=(65536-500)%256;//定时器T1的高8位赋初值

while

(1)//无限循环

{

switch(keyval)

{

case1:

f=dao;//如果第1个键按下,将中音1的频率赋给f

Output_Sound();//转去计算定时常数

break;

case2:

f=l_xi;//如果第2个键按下,将低音7的频率赋给f

Output_Sound();//转去计算定时常数

break;

case3:

f=l_la;//如果第3个键按下,将低音6的频率赋给Output_Sound();//转去计算定时常数

break;

case4:

f=l_sao;//如果第4个键按下,将低音5的频率赋给f

Output_Sound();//转去计算定时常数

break;

case5:

f=sao;//如果第5个键按下,将中音5的频率赋给f

Output_Sound();//转去计算定时常数

break;

case6:

f=fa;//如果第6个键按下,将中音4的频率赋给f

Output_Sound();//转去计算定时常数

break;

case7:

f=mi;//如果第7个键按下,将中音3的频率赋给f

Output_Sound();//转去计算定时常数

break;

case8:

f=re;//如果第8个键按下,将中音2的频率赋给f

Output_Sound();//转去计算定时常数

break;

case9:

f=h_re;//如果第9个键按下,将高音2的频率赋给f

Output_Sound();//转去计算定时常数

break;

case10:

f=h_dao;//如果第10个键按下将高音1的频率赋给f

Output_Sound();//转去计算定时常数

break;

case11:

f=xi;//如果第11个键按下,将中音7的频率赋给f

Output_Sound();//转去计算定时常数

break;

case12:

f=la;//如果第12个键按下,将中音6的频率赋给f

Output_Sound();//转去计算定时常数

break;

case13:

f=h_la;//如果第13个键按下,将高音6的频率赋给f

Output_Sound();//转去计算定时常数

break;

case14:

f=h_sao;//如果第14个键按下,将高音5的频率赋给f

Output_Sound();//转去计算定时常数

break;

case15:

f=h_fa;//如果第15个键按下,将高音4的频率赋给f

Output_Sound();//转去计算定时常数

break;

case16:

f=h_mi;//如果第16个键按下,将高音3的频率赋给f

Output_Sound();//转去计算定时常数

break;

}

}

}

/**************************************************************

函数功能:

定时器T0的中断服务子程序,使P2.0引脚输出音频方波

******************************************************

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

当前位置:首页 > 解决方案 > 学习计划

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

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