单片机设计矩阵键盘电子琴
单片机电子琴的设计

单片机电子琴的设计单片机电子琴的设计随着科技的发展,单片机技术在电子领域的应用已经非常广泛。
其中,单片机电子琴是一种非常受欢迎的DIY 电子产品。
通过使用单片机,我们可以实现各种各样的功能,比如手风琴、钢琴、鼓等模拟音乐乐器。
那么,本文将详细讲解单片机电子琴的设计方法和实现过程。
一、硬件设计1.主板设计在单片机电子琴的设计中,主板是最核心的部件,因为它能够控制整个电子琴的运转。
主板设计所需要的元器件如下:(1)单片机:根据需要,选择一款传统型单片机或者ARM 处理器。
(2)输入输出模块:据需要选择合适的硬件平台,比如DAC/ADC、芯片集成的PWM 或外加的DAC 等。
(3)显示模块:可以选用LCD 模块或其它显示模块。
(4)驱动模块:选择一款合适的驱动模块,比如H 桥驱动器、音频功率放大器等。
2.键盘设计键盘设计是单片机电子琴中最为重要的元部件,因为它是与用户进行交互的部分。
键盘设计可能有不同的方法,但是本文所展示的方法采用的是与传统钢琴相似的电容式设计方式。
电容式键盘设计思路是这样的:在钢琴键盘下方安装一组与钢琴键盘平行的电容板。
当按下钢琴键时,会压缩键盘下方的电容板,导致电容板之间的电容值发生变化,这样就可以识别每个键位的编号。
作为键盘电容板有很多种选择,但选择正确的条件是符合设计条件。
在这里,我们用金属箔板作为电容板,每个键位产生的电容值被电路板上面的片式电容器取样。
所以,我们使用红外线LED 与光敏二极管来驱动键盘,金属箔板放在二者之间。
在不按键的情况下,光敏二极管可以检测到被金属箔板反射的红外线,导致电容板上的电容值稳定。
当按下键时,电容板之间的电容值发生变化,此时光敏二极管检测到的红外线信号也将会变化,通过这个变化可以确定该键是否被按下。
3.音频输出在单片机电子琴的设计中,音频输出也是非常重要的。
音频输出通常使用功率放大器和喇叭来完成,我们也可以通过DAC/ADC 或PWM 来实现音频输出。
基于51单片机的4×4矩阵键盘电子琴

基于51单片机的4×4矩阵键盘电子琴基于51单片机的4×4矩阵键盘电子琴前些日子,做而论道写了一篇关于单片机发音的文章,后来,就不断有网友来电询问单片机电子琴的设计方法。
以前制作过一个24键(独立按键)的,程序是用汇编语言写的,估计多数人看不了。
下面,把新设计的16按键的电子琴,公布给网友。
电路图如下:图片链接:/picture/detail/b05f67dd8b5c82da3af4 83a4f974902b5660a0da制作说明:单片机采用51系列的都行,AT89C2051也可;图中没有画出复位和晶振电路,实际制作时,不可省略,晶振可以使用11.0592或12MHz;扬声器应该按照图中给出的附图加上驱动电路;显示器及七段译码器不接,单片机电子琴也可以正常工作。
74LS47 和数码管之间,应该接上“限流电阻”,约470 欧姆即可。
C语言程序如下:/************************************************************* * 程序功能 : 对4×4矩阵键盘进行扫描,显示键值和输出音响**************************************************************/ #include <reg51.h>#include <intrins.h>#define uint unsigned int#define uchar unsigned charsbit SPK = P3^7; //P3.7外接扬声器uint FreqTemp;unsigned int code Freqtab[] = { //定时半周期的初始值64021,64103,64260,64400, //低音3 4 5 664524,64580,64684,64777, //低音7,中音1 2 364820,64898,64968,65030, //中音4 5 6 765058,65110,65157,65178}; //高音1 2 3 4//关于半周期的初始值与频率的关系,可见:///do_sermon/item/8cff22baf5142245bb 0e1247/************************************************************* * 函数功能 : 用扫描法读 P1 外接4×4 键盘* 函数返回 : 按下键:返回0~15、如无键按下:返回16**************************************************************/ uchar Keyscan(void){uchar i, j, temp, Buffer[4] = {0xfe, 0xfd, 0xfb, 0xf7};for(j = 0; j < 4; j++) { //循环四次,扫描四行P1 = Buffer[j]; //在低四位分别输出一个低电平_nop_();temp = 0x80; //计划先读出P1.7位for(i = 0; i < 4; i++) { //循环四次,检查四列if(!(P1 & temp)) { //从高四位,截取1位return (i + j * 4); //返回取得的按键值}temp >>= 1; //换右边一位} }return 16; //没有键按下就返回16}/************************************************************** * 函数功能 : 将参数分成十位、个位,分别显示到P2* 输入 : k (键盘数值)*************************************************************** /void Display(uchar k){P2 = ((k / 10) << 4) + (k % 10);}/************************************************************** * 主函数*************************************************************** /void Main(void){uchar Key_Value = 16, Key_Temp1, Key_Temp2;//读出的键值TMOD = 0x01; //T0定时方式1ET0 = 1; //允许T0中断EX0 = 1; //允许X0中断EA = 1;while(1) {TR0 = 0; //暂不发音Key_T emp1 = Keyscan(); //读入按键if(Key_Temp1 != 16) { //有键按下Display(Key_Value); //显示键值、延时消抖Key_T emp2 = Keyscan(); //再读一次if (Key_Temp1 == Key_T emp2) {//两次相等Key_Value = Key_T emp1; //就确认下来FreqTemp = Freqtab[Key_Value]; //根据键值,取出定时半周期的初始值Display(Key_Value); //显示TR0 = 1; //启动定时器,发音while (Keyscan() < 16); //等待释放SPK = 1; //停止发音} } } }//===================================== ==========void T0_INT(void) interrupt 1{TL0 = FreqTemp; //载入定时半周期的初始值TH0 = FreqTemp >> 8;SPK = ~SPK; //发音}//===================================== ==========#单片机有关。
单片机应用课程设计--简易电子琴设计

delay(5);
if (key1 == 0)
{
key_in_flag = 0;
key_value = 4;
}
}
else
{
key_in_flag = 1;
}
key8 = 1;
key7 = 0;
if (key4 == 0)
{
delay(5);
if (key4 == 0)
{
key_in_flag = 0;
参考文献
[1] 赵鑫,蒋亮,齐兆群.数字电路设计[M].北京机械工业出版社,2005年6月第一版
[2] 苏家健,曹柏荣,汪志锋.单片机原理及应用技术[M].高等教育出版社
[3] 李朝青.单片机原理及接口技术[M].北京:北京航天航空大学出版色,2001
[4] 胡汉才.单片机原理及其接口技术[M].北京:清华大学出版社,2004
{
key_in_flag = 0;
key_value = 2;
}
}
else
{
key_in_flag = 1;
}
if (key2 == 0)
{
delay(5);
if (key2 == 0)
{
key_in_flag = 0;
key_value = 3;
}
}
else
{
key_in_flag = 1;
}
if (key1 == 0)
方案二: 采用AT89C51单片机进行控制,由于AT89C51不具备ISP功能, 因此Atmel公司已经停产在市面上已经不常见,况且其ROM只有4K在系统将来升级方面没有潜力。
方案三:采用AT89S52单片机进行控制,由于其性价比高,完全满足了本作品智能化的要求,它的内部程序存储空间达到8K,使软件设计有足够的内部使用空间并且方便日后系统升级,使用方便,抗干扰性能提高。
基于单片机的电子琴设计报告-含有经典的程序案例

设计报告课程:微机接口技术与数字控制设计名称:基于单片机的电子琴设计小组成员:学号:专业:机械电子工程日期:指导老师:成绩:1 设计任务以生活中的电子琴为设计对象,实现音乐的按键控制功用。
尽量能弹奏出和谐而优美的旋律。
2 设计目的通过单片机电子琴的设计,更深层次的了解单片机技术。
熟悉单片机的控制功用和系统原理应用。
对系统设计与实用编程有进一步强化。
体验音乐的原理与魅力。
3 设计要求设计采用C语言编程控制,巧妙的运用单片机的定时器与中断功能,实现音乐的音频、节拍的实时控制。
具体要求如下:1)构造出微单片机的最小控制系统,能实现基本框架运作;2)学习音乐音符的发音原理与节拍原理,了解音乐的神奇效果,熟悉常用歌曲的歌谱,并为下面的相关实践打好理论基础;3)采用键盘设计理念,建立键符——音符的对应关系,巧妙运用音乐的频率特性,实现按键既得特定音符的功用;4)并增加按钮控制系统运作,数码管实现实时音符(按键)符显示的功能,使按键弹奏的效果更加人性化与和谐完美。
4 设计方案与技术分析4.1 某微机控制系统简介控制系统的整体设计框架,如图1所示。
图1 电子琴设计框架图设计中涉及被控对象模块和人机交互模块的电路设计,以及软件编程部分。
这将在后面的论述中逐一介绍。
本控制系统的整体设计图,如图2所示。
图2 控制系统整体设计硬件图上图为整体的电路设计,并利用PROTEUS进行了模拟仿真。
实现了预期效果。
设计中,选用两种工作模式:试音与弹奏。
通过两个按钮控制选取,并有相应的指示灯指示工作状态。
试音用于测试系统的可行性,选取童年歌曲“两只老虎”中的几句作为检测乐谱;弹奏模式下,通过4×4矩阵式键盘,完成美妙音乐的弹奏。
操作者可以按相应的键,弹奏出特定的音乐,实现作曲与奏乐的完美体验。
并且本设计中还添加了数码显示功能,用于显示实时的显示按下的键码,同时也与音符有内在的对应关系。
下面主要介绍,为何单片机可以实现美妙音乐的实时再现。
基于51单片机实现的电子琴设计

目录摘要 (3)Abstract (3)1绪论 (4)1.1背景 (4)1.2目的 (4)1.3 意义 (4)1.4基本理论依据和主要工作内容 (4)2 设计方案简述 (6)2.1键盘模块 (6)2.2发声模块 (6)2.3 8X8点阵显示模块 (6)2.4系统技术指标和预期功能 (7)3 详细设计 (8)3.1主要IC芯片介绍 (8)3.2硬件设计 (11)4 设计结果及分析 (19)4.1 测试 (19)5总结 (20)参考文献 (21)附录主要程序代码 (22)摘要单片机的应用已经越来越贴近生活,用单片机来实现一些电子设计也变得容易起来。
本设计阐述的主要内容是一种基于51 单片机的电子琴的设计,其核心芯片AT89S52 单片机,内部电路包括4X4行列式键盘模块、音频放大模块和8X8LED点阵显示模块,本系统运行稳定,功能较为完善,控制系统可靠,性价比较高等,具有一定的实用价值。
对于那些需要显示的信息量不是很大,分辨率不是很高,又需要制造成本相对比较低的场合,使用大、小屏幕LED点阵显示器是比较经济适用的,他可以显示字符、数字和简单图形,显示亮度较高,并且对环境条件要求比较低。
电子乐器的结构较为复杂,音源是由晶体管产生的电振动,并通过音色回路而产生各种音色;同时由周波数调制产生颤音效果,由振幅调制产生各种乐器的音效。
关键词:AT89S52单片机;音频放大模块;8X8点阵AbstractIts applications have become increasingly close to life, with a single chip to achieve a number of electronic design is becoming simpler. The main elements of the design described is based on 51 single-chip, the flower design, the core chip AT89S52 microcontroller Internal circuit including the 4X4 determinant keyboard module, audio amplifier module and 8X8LED dot matrix display module, the system is stable, function better, control system reliability, higher cost and so on, has some practical value. For those who need to display the amount of information is small, resolution is not high, they need to make the occasion a relatively low cost, using large and small screen, LED dot matrix display is more economical, and he can display characters, numbers and simple graphics, display brightness higher and lower demands on the environmental conditions. : The structure of more complex electronic instruments, the source is generated by the transistor electrical vibration, and sound loops generated by a variety of tone; also modulated by the frequency to produce vibrato effects, generated by the amplitude modulated sounds of various instruments.Keywords:AT89S52 Microcontroller;Audio Amplifier Module;8X8 matrix1绪论1.1背景单片机是随着大规模集成电路的出现极其发展,将计算机的CPU,RAM,ROM,定时/计数器和多种I/O接口集成在一片芯片上,形成了芯片级的计算机,因此单片机早期的含义称为单片微型计算机(single chipmicrocomputer).它拥有优异的性价比、集成度高、体积小、可靠性高、控制功能强、低电压、低功耗的显著优点.主要应用于智能仪器仪表、工业检测控制、机电一体化等方面,并且取得了显著的成果。
基于单片机的电子琴设计

基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。
(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。
1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。
2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。
3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。
4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。
5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。
三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。
时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。
(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。
将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。
(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。
为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。
(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。
(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。
四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。
单片机电子琴的设计

单片机电子琴的设计首先是硬件设计部分。
单片机电子琴所需的硬件主要包括按键、音频输出、显示器和电源等模块。
按键模块需要设计合适数量的按键,并使用矩阵键盘的方式将按键连接到单片机的IO口上,以实现按键的检测和输入。
音频输出模块通常采用DAC芯片来实现数字音频信号转换为模拟音频信号的功能,然后经过功放放大后输出到扬声器上。
显示器模块可以选择使用LCD液晶屏或LED数码管来显示琴键、音高等信息。
电源模块需要提供稳定的电源电压和电流,以供单片机和外围电路正常工作。
接下来是软件实现部分。
软件设计主要包括音符识别、声音发生和音效处理三个方面。
音符识别指的是按键被按下时,通过单片机程序判断出对应的音符,并通过输出特定的数字信号给DAC芯片生成对应的模拟音频信号。
声音发生部分需要设计合适的音色合成算法,将数字信号转化为合成的音乐音频信号,并通过DAC芯片输出到扬声器上。
音效处理部分可以实现对音频信号的各种音效处理,如混响、合唱、合成等效果,增强音乐的表现力。
在功能拓展方面,可以考虑添加MIDI接口,实现电子琴与其他音乐器材的连接和交互。
可以使用光敏电阻和温湿度传感器来实现环境音效的调整。
还可以设计一个简单的录音和播放功能,实现对演奏的录音和回放。
另外,还可以通过添加存储器模块,实现曲目的存储和选择功能。
总结起来,单片机电子琴的设计涉及到硬件设计、软件实现以及功能拓展等方面。
通过合理地设计硬件电路,采用适当的音符识别算法和声音合成算法,还可以扩展丰富的音效和功能,实现一个高性能的单片机电子琴。
课程设计报告---基于单片机的电子琴设计

课程设计报告---基于单片机的电子琴设计河南理工大学《单片机应用与仿真训练》设计报告基于单片机的电子琴设计姓名:郭鹏超王芳学号:310808010609 310808010602专业班级:电气08-6班指导老师:王莉所在学院:电气工程与自动化学院2012年5月19 日摘要当代,爱好音乐的人越来越多,有不少人自己练习弹奏乐器作为业余爱好和一种放松的手段,鉴于一些乐器学习难度大需要太多的学习时间,且其价格又太过于高昂,使得一部分有这种想法的人不得不放弃这种想法。
而一些简易的电子乐器价格相对便宜,学习上手快,一般人容易负担的起,能够满足一般爱好者的需求,故简易电子琴的研制具有一定的社会意义。
本次课程设计主要研究基于AT89S52单片机的简易电子琴设计。
整个系统主要包括以下几个部分组成:(1)单片机的最小系统:最小应用系统设计是单片机应用系统的设计基础。
它包括单片机的选择、时钟系统设计、复位电路设计、简单的I/O口扩展、掉电保护等。
(2)矩阵键盘:当按键数目较多时,为了节省I/O口线,通常采用矩阵式键盘接口电路。
本设计采用5*8矩阵键盘(共40个按键,其中36个按键用来显示高中低音的1、1#、2、2#、3、4、4#、5、5#、6、6#、7的36个音调,其它4个按键可以随意的播放已存歌曲)。
(3)产生外部中断的系统:它由两个四输入与非门74LS20和一个两输入或非门74LS02组成,把矩阵的五行与与非门74LS20和或非门74LS02相接后接在了单片机的P3.2口,下降沿触发产生中断INT0。
(4)发音电路:此电子琴发音电路是由或非门来驱动扬声器发音的,控制单片机的P2.7口产生不同频率使扬声器发出不同的音调。
本文主要对单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴的硬件组成。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,最终可以随意弹奏想要表达的音乐,还设计了一按键用来自动播放一首曲子。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(3)完成硬件电路的测试、以及软件的编程
(4) 最终完成具体的课设任务。
4.主要参考文献
1.张洪润等.单片机应用设计200例.北京:北京航空航天大学出版社,2006
2. 胡汉才.单片机原理及其接口技术. 北京: 清华大学出版社,2010
3.夏继强等.单片机实验与实践教程.北京:北京航空航天大学出版社,2006
音 符
频 率
简码值(T值)
低3 M
330
64021
低4 FA
349
64103
低5 SO
392
64260
低6 LA
440
64400
低7 SI
494
64524
中 1 DO
523
64580
中 2 RE
587
64684
中 3 M
659
64777
中 4 FA
698
64820
中 5 SO
784
64898
中 6 LA
break;
case 0xbe:
key=2,P0=xable[2];
break;
case 0x7e:
key=3,P0=xable[3];
break;
}
TH0=table[key]/256;
TL0=table[key]%256;
TR0=1;
while(temp!=0xf0) //松手检测
{
temp=P3;
if(temp!=0xf0) //检测第一行按键
{
delay(10);
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
temp=P3;
switch(temp)
{
case 0xee:
key=0,P0=xable[0];
break;
case 0xde:
key=1,P0=xable[1];
2.课程设计题目及要求
带存储播放功能的简易电子琴设计
要求:利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。其他扩展功能学生可自己添加,功能不限定与此。
3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕
(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。
4. 倪晓军等.单片机原理与接口技术教程.北京: 清华大学出版社,2007
5(1)硬件方面:单片机。4*4行列式键盘,蜂鸣器,独立数码管,独立建。硬件部分采用逐列扫描,16个键位对应16个音,不断检测16键位,当某个键位被按下,先检测哪一列再检测哪个按键被按下,同时设置四个功能键,p1.0,p1.1播放歌曲,p1.2暂停,p1.3复位,可控制歌曲的播放。
880
64968
中 7 SI
988
65030
高 1 DO
1064
65058
高 2 RE
1175
65110
高 3 M
1318
65157
高 4 FA
1397
65178
6程序设计的流程图如下图,不断检测16个音阶键或功能键哪个被按下,当音阶键被按下时,发出对应的音;当功能键被按下时,执行相应的功能。然后再检测按键释放成不成功,也就是平时所说的松手检测,不成功就不断再检测,成功就停止工作。
for(y=110;y>0;y--);
}
void initialize()
{
P1=0xff;//起初数码管不显示任何数
}
void main()
{
TMOD=0x01;
EA=1; //开总中断
ET0=1; //开定时器0中断
while(1)
{
P3=0xfe;
temp=P3;
temp=temp&0xf0;
课程设计任务书
课 程 名 称单片机原理及应用课程设计
1.课程设计应达到的目的
本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。
tempቤተ መጻሕፍቲ ባይዱtemp&0xf0;
}
TR0=0;
buz=1;
}
}
P3=0xfd; //检测第二行按键
temp=P3;
temp=temp&0xf0;
if(temp!=0xf0)
{
delay(10);
temp=P3;
插入图片
(2)音乐频率
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。单片机12MHZ晶振,高中低音符与单片机计数T0相关的计数值如下表所示:
sbit s3=P1^2; //定义功能键3
sbit s4=P1^3;
uint code table[]={64021,64103,64260,64400,
64524,64580,64684,64777,
64820,64898,64968,65030,
65058,65110,65157,65178}; //频率
8源程序
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit buz=P2^3; //定义蜂鸣器
uchar temp,key;
sbit s1=P1^0; //定义功能键1
sbit s2=P1^1; //定义功能键2
uint code xable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71
};
void delay(uint z) //延时程序
{
uint x,y;
for(x=z;x>0;x--)
插入图片
7心得体会:
通过这次课程设计,我学到了很多书本上学不到的知识与经验,同时也遇到了很多问题,并在这个过程中逐步尝试去解决他们,提高自己的实践能力,硬件设计上我发现通过不同的I/O口可以节省端口资源的利用,部分端口上的需求可以通过软件解决。从语法错误到程序功能的实现,前前后后也是改了又改,这次课程设计使我意识到很多存在的问题,必须在单片机方面读更多的书,更深入的去探究,去挖掘这些问题的答案。