基于STM32的电子琴设计说明
单片机创新实验报告--基于单片机的电子琴电路设计
Liaoning Normal University开放实验室项目研究论文题目:基于单片机的电子琴电路设计学院:物理与电子技术学院专业:电子信息工程班级序号:学号:学生姓名:指导教师:2011年12月基于单片机的电子琴电路设计学生:指导教师:物理与电子技术学院电子信息工程专业2009级摘要:电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89c51 单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16 个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
关键词:电子琴; AT89C51;编程;可控前言随着大规模集成电路的出现和发展,芯片生产厂家把中央处理器CPU,随机存取内存RAM,只读存储器ROM,定时器/计数器以及I/O接口电路等主要计算机部件,集成在一块集成电路芯片(硅片)上,形成芯片级计算机,称为单片微型计算机,直译为单片机。
单片机虽只是一个芯片,但从组成和功能上看,它已具有了微机系统的含义,又称微型处理部件MCU(Micro Controller Unit),单片机商品名称为微控制器单元。
虽然单片机出现的历史并不长,但发展十分迅猛,在集成度、功能、速度、可靠性、应用领域等全方位向更高水平发展。
目前单片机已用于工业控制、机电一体化设备、仪器仪表、信号处理、现代兵器、交通能源、商用设备、医疗设备及家用电器等各个领域,随着单片机性能的不断提高,它的应用将会更加广泛。
单片机技术发展非常快,所以目前的产品都致力于在功能全面、技术先进、操作简便、安全可靠、价格合理等方面进行仔细研究,精心设计;及时掌握最新的单片机技术,在条件允许的情况下,尽可能地利用最新的单片机技术来研制其应用系统,再利用单片机体积小、价格低、功能强等特点,以保证所设计的产品在未来的一段时间内仍具生命力。
基于单片机的电子琴设计报告-含有经典的程序案例
设计报告课程:微机接口技术与数字控制设计名称:基于单片机的电子琴设计小组成员:学号:专业:机械电子工程日期:指导老师:成绩:1 设计任务以生活中的电子琴为设计对象,实现音乐的按键控制功用。
尽量能弹奏出和谐而优美的旋律。
2 设计目的通过单片机电子琴的设计,更深层次的了解单片机技术。
熟悉单片机的控制功用和系统原理应用。
对系统设计与实用编程有进一步强化。
体验音乐的原理与魅力。
3 设计要求设计采用C语言编程控制,巧妙的运用单片机的定时器与中断功能,实现音乐的音频、节拍的实时控制。
具体要求如下:1)构造出微单片机的最小控制系统,能实现基本框架运作;2)学习音乐音符的发音原理与节拍原理,了解音乐的神奇效果,熟悉常用歌曲的歌谱,并为下面的相关实践打好理论基础;3)采用键盘设计理念,建立键符——音符的对应关系,巧妙运用音乐的频率特性,实现按键既得特定音符的功用;4)并增加按钮控制系统运作,数码管实现实时音符(按键)符显示的功能,使按键弹奏的效果更加人性化与和谐完美。
4 设计方案与技术分析4.1 某微机控制系统简介控制系统的整体设计框架,如图1所示。
图1 电子琴设计框架图设计中涉及被控对象模块和人机交互模块的电路设计,以及软件编程部分。
这将在后面的论述中逐一介绍。
本控制系统的整体设计图,如图2所示。
图2 控制系统整体设计硬件图上图为整体的电路设计,并利用PROTEUS进行了模拟仿真。
实现了预期效果。
设计中,选用两种工作模式:试音与弹奏。
通过两个按钮控制选取,并有相应的指示灯指示工作状态。
试音用于测试系统的可行性,选取童年歌曲“两只老虎”中的几句作为检测乐谱;弹奏模式下,通过4×4矩阵式键盘,完成美妙音乐的弹奏。
操作者可以按相应的键,弹奏出特定的音乐,实现作曲与奏乐的完美体验。
并且本设计中还添加了数码显示功能,用于显示实时的显示按下的键码,同时也与音符有内在的对应关系。
下面主要介绍,为何单片机可以实现美妙音乐的实时再现。
基于单片机系统的简易电子琴的设计与实现
题目基于单片机系统的简易电子琴的设计与实现设计要求:1、能实现电子琴的基本功能,可以用弹奏出简单的乐曲。
手动演奏,且能手动演奏八度音的高低音,音色纯真。
2、演奏不同的音时,数码管有对应的显示。
3、功率不大于500mw,音质悦耳,无失真。
摘要随着社会的发展进步,音乐逐渐成为我们生活中很重要的一部分,有人曾说喜欢音乐的人不会向恶。
我们都会抽空欣赏世界名曲,作为对精神的洗礼。
本论文设计一个基于单片机的简易电子琴。
我们对于电子琴如何实现其功能,如音色选择、声音强弱控制、节拍器、自动放音功能等等也很好奇。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文的主要内容是用AT89S52单片机为核心控制元件,设计一个电子琴。
以单片机作为主控核心,与键盘、扬声器等模块组成核心主控制模块,在主控模块上设有16个按键和扬声器。
本系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用和参考价值。
一、系统总体设计该设计要实现一种由单片机控制的电子琴,单片机工作频率为11.0592MHZ ,使用其定时/计数器T0,工作模式为1,改变计数值TH0和TL0可以产生不同频率的脉冲信号。
该设计具有16个音节的键盘,用户可以根据乐谱在键盘上进行演奏,音乐发生器会根据用户的弹奏,通过扬声器将音乐播放出来。
由于本例实现的音乐发生器是由用户通过键盘输入弹奏乐曲的,所以节拍由用户掌握,不由程序控制。
如图1所示系统总体框图。
图1 系统总体框图键盘扫描AT89S52数码管显示扬声器播放音乐电源部分二、系统硬件设计(1)系统复位电路单片机复位是使CPU和系统中的其他功能部件都处在一个确定的初始状态,并从这个状态开始工作。
无论是在单片机刚开始接上电源时,还是断电后或者发生故障后都要复位。
基于单片机的电子琴设计
基于单片机的电子琴设计一、引言二、总体设计方案(一)设计目标设计一款基于单片机的电子琴,能够实现基本的音符演奏、音色切换、节奏控制等功能,并且具有良好的音质和稳定性。
(二)系统组成本电子琴系统主要由单片机控制模块、键盘输入模块、音频输出模块、显示模块和电源模块等部分组成。
1、单片机控制模块选用 STM32 系列单片机作为控制核心,负责处理键盘输入信号、生成音频信号、控制显示等功能。
2、键盘输入模块采用矩阵键盘,通过扫描键盘获取用户的按键操作,将其转换为对应的音符编码发送给单片机。
3、音频输出模块使用DAC 芯片将单片机生成的数字音频信号转换为模拟音频信号,再通过放大器和扬声器输出声音。
4、显示模块采用液晶显示屏,用于显示当前的演奏状态、音色选择、节奏模式等信息。
5、电源模块为整个系统提供稳定的电源供应,可采用电池供电或外接电源适配器。
三、硬件设计(一)单片机最小系统STM32 单片机的最小系统包括时钟电路、复位电路和电源电路。
时钟电路为单片机提供工作时钟,复位电路用于系统初始化,电源电路为单片机提供稳定的电源。
(二)键盘电路矩阵键盘由行线和列线组成,通过逐行扫描的方式检测按键状态。
将键盘的行线和列线分别连接到单片机的 GPIO 引脚,通过编程实现键盘扫描和按键识别。
(三)音频输出电路选用高性能的 DAC 芯片,如 PCM1794,将单片机输出的数字音频信号转换为模拟音频信号。
为了提高音频输出的质量,还需要添加放大器和滤波电路,以增强信号的功率和去除噪声。
(四)显示电路液晶显示屏通过 SPI 接口或 I2C 接口与单片机连接,单片机通过发送指令和数据来控制显示屏的显示内容。
(五)电源电路根据系统的工作电压和电流需求,选择合适的电源芯片,如LM7805 等,将输入电源转换为所需的电压,并通过滤波电容等元件提高电源的稳定性。
四、软件设计(一)主程序流程主程序首先进行系统初始化,包括单片机初始化、键盘初始化、音频输出初始化、显示初始化等。
基于单片机的微型电子琴建模
基于单片机的微型电子琴建模引言随着科技的不断发展,电子琴已经成为了音乐爱好者们的最爱之一。
传统的电子琴大多采用单片机和其他电子元件来实现各种音效和功能,但是这种电子琴通常比较大而且价格昂贵。
为了满足人们对小巧便携且质量优良的需求,我们打算通过使用单片机来设计一种微型电子琴。
本文将介绍该微型电子琴的设计思路、具体实现方法以及未来的发展方向。
一、微型电子琴的设计思路1. 硬件设计我们打算采用STM32F103C8T6单片机作为微型电子琴的核心处理器。
这款单片机具有较高的性能和丰富的外设资源,能够满足我们对音乐输出和按键输入的需求。
我们还会使用一块音频解码芯片来解码各种音色样本,并通过单片机进行控制和输出。
在按键方面,我们打算使用一组多功能按键来实现琴键的弹奏和功能的选择。
为了提高音质和音量,我们还会加入一组功放电路和扬声器。
2. 软件设计在软件设计方面,我们将会使用C语言来编写单片机的驱动程序和控制程序。
通过对按键输入的检测和音频解码芯片的控制,我们能够实现琴键的弹奏和音色的切换。
我们还会对整个系统进行优化,以确保微型电子琴的稳定性和响应速度,并且可以支持各种音乐演奏模式。
二、微型电子琴的具体实现方法1. 硬件实现我们需要搭建一套原型系统来验证我们的设计方案。
我们会使用原型板来连接单片机、音频解码芯片、按键和功放电路,并且通过软件调试来保证各部分的正常工作。
一旦原型系统稳定运行,我们就可以进行电路的PCB设计和制作,以便于后期的小批量生产。
在PCB设计中,我们需要注意每个电子元件的布局和连线,以减少信号干扰和提高整个系统的可靠性。
2. 软件实现在软件实现方面,我们需要编写音频解码程序、按键检测程序和功放控制程序。
通过音频解码程序,我们能够实现各种音色样本的解码和播放,以满足不同演奏需求。
通过按键检测程序,我们能够实现琴键的弹奏和功能的选择。
通过功放控制程序,我们能够控制扬声器的音量和音质,以提供更好的音乐体验。
单片机课程设计电子琴
单片机课程设计 电子琴一、课程目标知识目标:1. 让学生理解单片机的基本原理,掌握单片机在电子琴设计中的应用。
2. 使学生掌握电子琴的基本结构,能运用单片机编程实现电子琴的基本功能。
3. 帮助学生了解电子琴音调产生原理,掌握音调与频率的关系。
技能目标:1. 培养学生运用单片机进行电子琴设计与编程的能力,能独立完成一个简单的电子琴项目。
2. 培养学生动手实践能力,提高焊接、调试和故障排除等技能。
3. 培养学生团队协作和沟通能力,能在项目过程中进行有效分工与合作。
情感态度价值观目标:1. 激发学生对单片机及电子制作的兴趣,提高学习积极性。
2. 培养学生勇于尝试、不断探索的精神,增强克服困难的信心。
3. 引导学生关注科技发展,认识到所学知识在现实生活中的应用,培养创新意识。
分析课程性质、学生特点和教学要求,本课程目标具体、可衡量,有助于学生和教师在教学过程中明确预期成果。
将目标分解为具体学习成果,为后续教学设计和评估提供依据。
在教学过程中,注重理论与实践相结合,充分调动学生的积极性,提高学生的实践能力。
二、教学内容1. 单片机基础知识:介绍单片机的组成、工作原理,重点讲解CPU、内存、I/O口等部分的功能与应用。
教材章节:第一章单片机基础2. 电子琴结构与原理:讲解电子琴的基本结构,音调产生原理,键盘与发音电路的连接方式。
教材章节:第三章电子乐器原理3. 单片机编程:以C语言为基础,讲解单片机编程方法,重点掌握延时、中断、I/O口控制等编程技巧。
教材章节:第二章单片机编程基础、第五章中断与定时器4. 电子琴设计与制作:结合单片机知识,指导学生进行电子琴设计,包括硬件电路设计、程序编写、调试与优化。
教材章节:第四章单片机应用实例、第六章电子琴设计与制作5. 实践操作:安排学生进行电子琴硬件焊接、程序烧写、调试与测试,培养动手实践能力。
教材章节:第七章实践操作教学内容安排与进度:第一周:单片机基础知识学习,完成CPU、内存、I/O口等功能的学习。
课程设计报告---基于单片机的电子琴设计
课程设计报告---基于单片机的电子琴设计河南理工大学《单片机应用与仿真训练》设计报告基于单片机的电子琴设计姓名:郭鹏超王芳学号: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口产生不同频率使扬声器发出不同的音调。
本文主要对单片机设计简易电子琴进行了分析,并介绍了基于单片机电子琴的硬件组成。
并且从原理图,主要芯片,各模块的原理和各个模块的程序调试来阐述。
利用单片机产生不同频率来获得我们要求的音阶,最终可以随意弹奏想要表达的音乐,还设计了一按键用来自动播放一首曲子。
基于单片机的电子琴设计程序
#include <reg51.h>#define uchar unsigned char#define uint unsigned int#define disp_Off 0x3e#define disp_On 0x3f#define page_Add 0xb8 //页#define col_Add 0x40 //列#define start_Line 0xC0 //行//以下是C调中音的音频宏定义#define Z1 523 //将"Z1"宏定义为中音"1"的频率523Hz #define Z2 587 //将"Z2"宏定义为中音"2"的频率587Hz #define Z3 659 //将"Z3"宏定义为中音"3"的频率659Hz #define Z4 698 //将"Z4"宏定义为中音"4"的频率698Hz #define Z5 784 //将"Z5"宏定义为中音"5"的频率784Hz #define Z6 880 //将"Z6"宏定义为中音"6"的频率880Hz #define Z7 987 //将"Z7"宏定义为中音"7"的频率523H //以下是C调高音的音频宏定义#define H1 1046 //将"H1"宏定义为高音"1"的频率1046Hz #define H2 1174 //将"H2"宏定义为高音"2"的频率1174Hz #define H3 1318 //将"H3"宏定义为高音"3"的频率1318Hz #define H4 1396 //将"H4"宏定义为高音"4"的频率1396Hz #define H5 1567 //将"H5"宏定义为高音"5"的频率1567Hz #define H6 1760 //将"H6"宏定义为高音"6"的频率1760Hz #define H7 1975 //将"H7"宏定义为高音"7"的频率1975Hz//液晶显示器的端口定义sbit cs1=P2^1 ; //片选1sbit cs2=P2^2 ; //片选2sbit res=P2^3 ; //复位信号sbit rs=P2^4 ; //数据/指令选择sbit rw=P2^5 ; //读/写选择sbit en=P2^6 ; //读/写使能sbit key2=P2^7 ; //定义功能键key2,按下后开始播放音乐sbit sound=P2^0; //定义音频输出端sbit key1=P3^7 ; //定义功能键key1,按下后键入电子琴状态//矩阵键盘的定义端口sbit P14=P1^4; //将P14位定义为P1.4引脚sbit P15=P1^5; //将P15位定义为P1.5引脚sbit P16=P1^6; //将P16位定义为P1.6引脚sbit P17=P1^7; //将P17位定义为P1.7引脚//定义led端口sbit d0=P3^0;sbit d1=P3^1;sbit d2=P3^2;sbit d3=P3^3;sbit d4=P3^4;sbit d5=P3^5;sbit d6=P3^6;uint C,ff,k,num; //c为初值,ff为频率uchar keyval; //定义变量储存按键值//数码管显示数组uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//以下是《天空之城》简谱uint code f[]={Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,/**/Z6,Z5,Z6,H1,/**/Z5,Z3,Z3, /**/Z4,Z3,Z4,H1,Z3,H1,H1,H1,/**/Z7,Z4,Z4,Z7,/**/Z7,Z6,Z7,/**/H1,Z7,H1,H3,/**/Z7,Z3,Z3,/**/Z6,Z5,Z6,H1, Z5,Z3,/**/Z4,H1,Z7,H1,/**/H2,H2,H2,H1,/**/H1,Z6,Z7,Z5,/**/Z6,H1,H2,/**/H3,H2,H3,H5, H2,Z5,Z5,/**/H1,Z7,H1,H3,/**/H3,/**/Z6,H1,Z7,H2,/**/H1,Z5,Z5,/**/H4,H3,H2,H1,H3, /**/Z3,H3,/**/H6,H5,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,H5,/**/H3,H3,H6,H5, /**/H3,H2,H1,H1,/**/H2,H1,H2,Z7,/**/Z6,Z6,Z7,/**/Z6,0xff}; //以0xff作为音符的结束标志//以下是简谱中每个音符的节拍//"4"对应4个延时单位,"2"对应2个延时单位,"1"对应1个延时单位uchar code JP[ ]={4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,4,12,20,4,4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,8,8,/**/20,4,4,/**/12,4,8,8,32,4,/**/8,4,6,8,/**/4,4,4,16,/**/8,4,6,8,/**/24,4,4,/**/12,4,8,8,24,4,4,/**/4,4,8,8,/**/32,/**/4,8,8,6,/**/12,4,16,/**/8,8,8,8,30,/**/20,8,/**/16,8,8,/**/4,4,16,8,/**/8,4,4,8,/**/20,8,16,16,/**/4,20,8,/**/8,4,4,8,/**/20,4,4,/**/32,};//定义"正(0) 在(1) 播(2) 放(3) :(4)"数组uchar code hz1[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xC2,0x02,0x02,0x02,0xFE,0x82,0x82,0x82,0x82,0x82,0x02,0x00,0x00,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x7F,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"正",0*///正0x08,0x08,0x88,0xC8,0x38,0x0C,0x0B,0x08,0x08,0xE8,0x08,0x08,0x08,0x08,0x08,0x00,0x02,0x01,0x00,0xFF,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x00,/*"在",1*///在0x10,0x10,0xFF,0x10,0x90,0x82,0x56,0x3A,0x12,0x7F,0x11,0x39,0x55,0x90,0x80,0x00,0x42,0x82,0x7F,0x01,0x00,0x00,0xFF,0x49,0x49,0x7F,0x49,0x49,0xFF,0x00,0x00,0x00,/*"播",2*///播0x08,0x08,0xF9,0x4A,0x48,0xC8,0x48,0x20,0xD8,0x17,0x10,0x10,0xF0,0x10,0x10,0x00,0x40,0x30,0x0F,0x20,0x40,0x3F,0x80,0x40,0x21,0x16,0x08,0x16,0x21,0x40,0x80,0x00,/*"放",3*///放0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*":",4*///:0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,};//定义"《(0) 天(1) 空(2) 之(3) 城(4) 》(5)"数组uchar code hz2[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x40,0x20,0x90,0x48,0x24,0x12,0x09,0x04,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02,0x04,0x09,0x12,0x24,0x48,0x10,0x20,0x00,0x00,/*"《",0*///《0x40,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x40,0x40,0x00,0x80,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x03,0x0C,0x10,0x20,0x40,0x80,0x80,0x00,/*"天",1*///天0x10,0x0C,0x44,0x24,0x14,0x04,0x05,0x06,0x04,0x04,0x14,0x24,0x44,0x14,0x0C,0x00,0x00,0x40,0x40,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x40,0x40,0x00,0x00,/*"空",2*///空0x00,0x10,0x10,0x10,0x10,0x10,0x11,0x16,0x10,0x90,0x50,0x30,0x10,0x00,0x00,0x00,0x00,0x40,0x20,0x10,0x10,0x28,0x44,0x42,0x41,0x40,0x40,0x40,0x40,0x40,0x40,0x00,/*"之",3*///之0x20,0x20,0xFF,0x20,0x20,0xF8,0x88,0x88,0x88,0x08,0xFF,0x08,0x09,0xCA,0x08,0x00,0x10,0x30,0x1F,0x88,0x68,0x1F,0x10,0x20,0x9F,0x40,0x27,0x18,0x26,0x41,0xF0,0x00,/*"城",4*///城0x00,0x00,0x02,0x04,0x09,0x12,0x24,0x48,0x90,0x20,0x40,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x20,0x10,0x48,0x24,0x12,0x09,0x04,0x02,0x01,0x00,0x00,0x00,0x00,0x00,/*"》",5*///》0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/************************************************函数功能:1个延时单位,延时200ms,用于节拍延时*************************************************/void delayjp(){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<250;j++);}/*************************************************函数功能:用于LCD显示延时程序**************************************************/void delaylcd(uchar x){int d;uchar y;for(y=0;y<x;y++)for(d=0;d<10;d++);}/*********************************************函数功能:一般延时函数**********************************************/void delayms(uint x){uint i,j;for(i=x;i>0;i--)for(j=110;j>0;j--);}/*********************************************函数功能:数码管显示函数**********************************************/void display(uchar key){uchar key1 ;key1=key-1 ;P0=table[key1];}/*******************************************函数功能:输出音频、输出数码管显示函数******************************************/void output(void){display(keyval);C=(46083/ff)*10; //计算定时常数,c为定时常数TH1=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL1=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR1=1 ; //开定时T0delayms(200) ; //延时200ms,播放音频TR1=0 ; //关闭定时器sound=~sound ; //关闭蜂鸣器keyval=0xff ; //播放按键音频后,将按键值更改,停止播放}/********************************************************函数功能:当播放音乐时使对应音符的LED灯亮*********************************************************/void opled(uint num){if((num==523)|(num==1046))d0=0;if((num==587)|(num==1174))d1=0;if((num==659)|(num==1318))d2=0;if((num==698)|(num==1396))d3=0;if((num==784)|(num==1567))d4=0;if((num==880)|(num==1760))d5=0;if((num==987)|(num==1975))d6=0;}/*************************************************函数功能:进行矩阵键盘扫描,判断键位**************************************************/void keyscan(void){P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下{delayms(10); //延时一段时间、软件消抖if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{ keyval=1; //可判断是S1键被按下while(!(P1==0xfe));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{keyval=2; //可判断是S2键被按下while(!(P1==0xfe));}if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{keyval=3; //可判断是S3键被按下while(!(P1==0xfe));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{ keyval=4; //可判断是S4键被按下while(!(P1==0xfe));}P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{ keyval=5; //可判断是S5键被按下while(!(P1==0xfd));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{ keyval=6; //可判断是S6键被按下while(!(P1==0xfd));}if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{ keyval=7; //可判断是S7键被按下while(!(P1==0xfd));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{ keyval=8; //可判断是S8键被按下while(!(P1==0xfd));}P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{keyval=9; //可判断是S9键被按下while(!(P1==0xfb));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{ keyval=10; //可判断是S10键被按下while(!(P1==0xfb)); }if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{keyval=11; //可判断是S11键被按下while(!(P1==0xfb));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{keyval=12; //可判断是S12键被按下while(!(P1==0xfb));}P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚的列线为低电平“0”{keyval=13; //可判断是S13键被按下while(!(P1==0xf7));}if(P15==0) //如果检测到接P1.5引脚的列线为低电平“0”{keyval=14; //可判断是S14键被按下while(!(P1==0xf7));}if(P16==0) //如果检测到接P1.6引脚的列线为低电平“0”{ keyval=15; //可判断是S15键被按下while(!(P1==0xf7));}if(P17==0) //如果检测到接P1.7引脚的列线为低电平“0”{keyval=16; //可判断是S16键被按下while(!(P1==0xf7));}}}}/*********************************************函数功能:检查LCD是否忙**********************************************/void checkstate(){uchar dat,DATA; //状态信息(判断是否忙)rs=0; // 数据\指令选择rw=1; //R/W="H" ,E="H"数据被读到DB7∽DB0do{DATA=0x00;en=1; //EN下降源delaylcd(1); //延时dat=DATA;en=0;dat=0x80 & dat; //仅当第7位为0时才可操作(判别busy信号) }while(!(dat==0x00));}/**********************************************函数功能:写命令到LCD程序***********************************************/void write_com(uchar cmdcode){checkstate(); //检测LCD是否忙rs=0;rw=0;P0=cmdcode;delaylcd(1);en=1;delaylcd(1);en=0;}/************************************************函数功能:写数据到LCD程序*************************************************/void write_data(uchar Dispdata){checkstate(); //检测LCD是否忙rs=1;rw=0;P0=Dispdata;delaylcd(1);en=1;delaylcd(1);en=0;}/*******************************************函数功能:LCD初始化程序********************************************/void init_lcd(){delaylcd(1);cs1=1; //刚开始关闭两屏cs2=1;delaylcd(1);write_com(disp_Off); //写初始化命令write_com(page_Add+0);write_com(start_Line+0);write_com(col_Add+0);write_com(disp_On);}/********************************************函数功能:清屏函数*********************************************/void clr_scr(){uchar j,k;cs1=0; //左、右屏均开显示cs2=0;write_com(page_Add+0);write_com(col_Add+0);for(k=0;k<8;k++) //控制页数0-7,共8页{write_com(page_Add+k); //每页每页进行写for(j=0;j<64;j++) //每页最多可写32个中文文字或64个ASCII字符{write_com(col_Add+j);write_data(0x00); //控制列数0-63,共64列,写点内容,列地址自动加1 }}}/**********************************************函数功能:LCD一行一行写入显示数据***********************************************/Disp(uchar page,uchar column, uchar code *word){uchar i;cs1=0;cs2=1;write_com(0xb8+page);write_com(0x40+column);for(i=0;i<16;i++)write_data(word[i]);for(i=32;i<48;i++)write_data(word[i]);for(i=64;i<80;i++)write_data(word[i]);for(i=96;i<112;i++)write_data(word[i]);cs1=1;cs2=0;write_com(0xb8+page);write_com(0x40);for(i=128;i<144;i++)write_data(word[i]);for(i=160;i<176;i++)write_data(word[i]);for(i=192;i<208;i++)write_data(word[i]);for(i=224;i<240;i++)write_data(word[i]);cs1=0;cs2=1;write_com(0xb8+page+1);write_com(0x40+column);for(i=16;i<32;i++)write_data(word[i]);for(i=48;i<64;i++)write_data(word[i]);for(i=80;i<96;i++)write_data(word[i]);for(i=112;i<128;i++)write_data(word[i]);cs1=1;cs2=0;write_com(0xb8+page+1);write_com(0x40);for(i=144;i<160;i++)write_data(word[i]);for(i=176;i<192;i++)write_data(word[i]);for(i=208;i<224;i++)write_data(word[i]);for(i=240;i<250;i++)write_data(word[i]);}/******************************************函数功能:程序主函数,进行功能选择*******************************************/void main(){uchar ii,jj; //ii确定音频数组元素,jj控制节拍数EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1; //定时器T1中断允许TMOD=0x00; //使用定时器T0、T1的模式0(13位计数器) P0=0; //开始使数码管不显示if(key2==0) //功能键key2按下,用于显示12864{delayms(10); //延时去抖if(key2==0) //功能键key2确实按下{P0=0;init_lcd();clr_scr();k=0;while(1){for(k=0xc0;k<0xff;k=k+16){Disp(2,0,hz1);Disp(4,0,hz2);}ii=0; //从第1个音符f[0]开始播放while(f[ii]!=0xff) //只要没有读到结束标志就继续播放{C=460830/f[ii]; //确定初值TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法 5TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法TR0=1; //启动定时器T0num=f[ii];opled(num);for(jj=0;jj<JP[ii];jj++) //控制节拍数delayjp(); //延时1个节拍单位TR0=0; //关闭定时器T0P3=0xff;ii++; //播放下一个音符}}}}if(key1==0) //功能键key1按下{delayms(10); //延时去抖if(key1==0) //功能键key1确实按下{cs1=1;cs2=1;P0=0xff; //使数码管全亮while(1) //无限循环{keyscan();switch(keyval){case 1:ff=Z1; //如果第1个键按下,将中音1的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 2:ff=Z2; //如果第2个键按下,将中音2的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 3:ff=Z3; //如果第3个键按下,将中音3的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 4:ff=Z4; //如果第4个键按下,将中音4的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 5:ff=Z5; //如果第5个键按下,将中音5的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 6:ff=Z6; //如果第6个键按下,将中音6的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 7:ff=Z7; //如果第7个键按下,将中音7的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 8:ff=H1; //如果第8个键按下,将高音1的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 9:ff=H2; //如果第9个键按下,将高音2的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 10:ff=H3; //如果第10个键按下,将高音3的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 11:ff=H4; //如果第11个键按下,将高音4的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 12:ff=H5; //如果第12个键按下,将高音5的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 13:ff=H6; //如果第13个键按下,将高音6的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 14:ff=H7; //如果第14个键按下,将高音7的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 15:ff=H1; //如果第15个键按下,将高音1的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;case 16:ff=H2; //如果第16个键按下,将高音2的频率赋给ffoutput(); //转去计算定时常数,输出音频和数字break;}}}}}/************************************************************函数功能:定时器T0的中断服务,使P2.0引脚输出音频方波播放音乐**************************************************************/void Time0() interrupt 1 using 1{sound=!sound; //将P2.0引脚输出电平取反,形成方波TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法}/************************************************************函数功能:定时器T1的中断服务,使P2.0引脚输出音频方波输出音符**************************************************************/void Time1() interrupt 3 using 1{TH1=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值方法TL1=(8192-C)%32; //可证明这是13位计数器TL0低5位的赋初值方法sound=!sound; //将P2.0引脚取反,输出音频方波}。
单片机课程设计——简易电子琴
汇报人:
单击输入目录标题 单片机基础知识 简易电子琴系统设计 单片机与简易电子琴的结合 简易电子琴的功能扩展 简易电子琴的优化与改进
添加章节标题
单片机基础知识
单片机简介
单片机是一种集成电路芯片,将微处理器、存储器、输入/输出接口等集成在一起 单片机具有体积小、功耗低、可靠性高、编程灵活等特点 单片机广泛应用于工业控制、家电、汽车电子等领域 单片机课程设计是学习单片机应用的重要环节,可以提高学生的实践能力和创新能力
音乐播放与控制
单片机控制:通过单片机控制电子琴的音色、音高和节奏 音乐播放:单片机通过控制电子琴的音色、音高和节奏,实现音乐的播放 控制方式:可以通过按键、触摸屏等方式控制音乐的播放 功能扩展:可以增加录音、播放、暂停、快进、快退等功能,提高用户体验
显示模块的应用
显示模块的作用:显示电子琴 的音色、音高、节奏等信息
单片机在简易电子琴中的应用
控制音量:通过单片机控制 音量的大小,实现电子琴的 音量调节功能。
控制音色:通过单片机控制 不同频率的音色,实现电子 琴的多种音色效果。
控制节奏:通过单片机控制 节奏的快慢,实现电子琴的
节奏调节功能。
控制和弦:通过单片机控制 和弦的演奏,实现电子琴的
和弦演奏功能。
单片机开发环境搭建
测试内容:音色、音调、 音量、节奏等性能指标
测试结果分析:对测试数 据进行分析,找出问题并 解决
测试报告:记录测试过程、 结果和分析,为后续改进 提供依据
单片机与简易电子琴的结合
单片机控制简易电子琴的原理
单片机作为核心控制单元,负责接收和处理来自键盘的输入信号
单片机根据接收到的输入信号,控制电子琴的音源产生相应的音调
基于单片机电子琴的设计
摘要当今社会,随着单片机的迅速发展以及电力电子器件的广泛应用。
能够熟练的掌握电力电子的应用以及功能成为屹立于沈阳理工大学自动化莘莘学子的一项必不可少的技能。
我所做的是基于单片机的电子琴的课题,单子琴在当今时代已经是很普遍的一种乐器了。
设计的初衷是秉乘低碳环保,节约资源的理念。
采用矩阵键盘,数码管等器件。
制作成本小,用处大。
满足了当今时代的基本要求。
设计完成后,我们可以利用电子琴来发出16个音节以及附属功能,就是16首歌曲的播放。
它被存储在程序内,玩家可以利用不同的按键调用不同的歌曲。
在实验及设计过程中难免有些疏漏及错误之处,望老师级同学及时的批评指出,我将不胜感激。
崔野2011 12 12目录摘要 (1)第一章目录 (2)第二章设计方案 (3)2.1目的及要求要求 (3)2.2 设计原理 (3)第三章硬件部分 (5)3.1 单片机简介及应用 (5)3.2 矩阵键盘 (10)3.3 数码管简介 (14)3.4 晶振电路 (16)3.5 设计图 (18)第四章软件部分 (19)4.1 目的及要求 (19)4.2 LED显示 (19)4.3 设计框图 (22)第五章调试 (23)5.1 仿真软硬件简介 (23)5.2 软硬件调试及结果 (25)第六章结束语 (33)参考资料 (34)实物展示 (35)第二章设计方案2.1目的及要求目的:实现电子琴播放与音乐播放功能要求:1.用键盘作出电子琴的按键,每键代表一个音符。
2.各音符按一定的顺序排列,必须符合电子琴的按键排列顺序。
3.弹奏电子琴时能播放出准确的声音,不弹奏时可以播放内置音乐。
2.2 设计原理单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储RAM、只读存储器、多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换等电路)集成到一块硅片上构成的一个小而完善的计算机系统。
单片机电子琴课程设计
单片机电子琴课程设计一、课程目标知识目标:1. 让学生掌握单片机的基本原理,理解其内部结构和功能。
2. 使学生了解电子琴的基本工作原理,掌握单片机控制电子琴的方法。
3. 帮助学生掌握编程语言,如C语言,用于编写单片机控制程序。
技能目标:1. 培养学生动手搭建单片机电子琴硬件电路的能力。
2. 培养学生运用编程语言编写单片机程序,实现电子琴的基本功能。
3. 提高学生分析问题和解决问题的能力,使学生能够独立调试和优化单片机电子琴程序。
情感态度价值观目标:1. 培养学生对电子技术的兴趣,激发学生创新意识和探索精神。
2. 培养学生团队协作意识,提高沟通与交流能力。
3. 引导学生关注单片机技术在现实生活中的应用,认识到科技对社会发展的推动作用。
分析课程性质、学生特点和教学要求:本课程为单片机电子琴课程设计,旨在让学生将所学理论知识与实际应用相结合,提高学生的动手实践能力。
针对初中年级学生,课程内容需符合学生的认知水平和兴趣。
在教学过程中,注重引导学生主动参与,培养其独立思考和解决问题的能力。
课程目标分解:1. 知识目标:通过讲解、示范和练习,使学生掌握单片机原理、电子琴工作原理及编程方法。
2. 技能目标:通过动手实践,培养学生搭建硬件电路、编写程序和调试设备的能力。
3. 情感态度价值观目标:通过课程学习,激发学生对电子技术的兴趣,培养其团队协作意识和创新能力。
二、教学内容1. 单片机原理及内部结构:讲解单片机的组成、工作原理、I/O口功能等基础知识,对应教材第3章内容。
2. 电子琴工作原理:介绍电子琴的基本构成、音阶产生原理、键盘扫描方法等,对应教材第5章内容。
3. C语言编程基础:讲解C语言的基本语法、数据类型、运算符、控制语句等,对应教材第2章内容。
4. 单片机编程与控制:结合实例,讲解如何使用C语言编写单片机程序,实现电子琴功能,对应教材第4章内容。
5. 硬件电路搭建:介绍电子琴硬件电路的组成、元件选型及连接方法,对应教材第6章内容。
基于STM32的电子琴设计
综合设计任务书学生班级:学生姓名:学号:设计名称:电子琴的设计与实现起止日期:2013.11.18—2013.12.15 指导教师:综合设计学生日志电子琴的设计与实现摘要:本次设计是xx专业专业方向设计,利用单片机设计简易电子琴。
其主要功能为:按下不同按键,发出不同 1 、2 、3、4 、5 、6 、7 七个音符并且用LED 或LCD显示当前按键。
选用stm32f103C8T6,它有8个定时器,部分定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。
利用芯片内部相关定时器来输出PWM,从而来驱动蜂鸣器。
通过读取外部按键输入的值来相应改变定时器相关寄存器的值,从而来改变PWM的输出频率来达到发出不同音调。
关键词:STM32f103C8T6;PWM;定时器The Design of the KeyboardAbstract:This design is the professional direction of biomedical engineering design. Using Single Chip Microcomputer to achieve a simple Keyboard. Its main function is: While a user press the different keys, it will make different sounds from the buzzer and display different numbers which corresponded to the sounds. Using stm32f103- -C8T6 as control chip. It has16-bit timers. Some of them with up to 4 IC/OC/PWM or pulse counter. Making use of the Timers to generate driving signal .By reading the state of the external key to change the frequency of output . Different frequency of the PWM will control buzzer makes different sounds.Key words: STM32f103C8T6; PWM; Timer一、设计目的和意义本综合设计是为xx专业高年级本科生开设的必修课,是对学生运用所学知识的一次综合训练。
根据STM32的电子琴设计
综合设计任务书学生班级:学生姓名:学号:设计名称:电子琴的设计与实现起止日期:2013.11.18—2013.12.15 指导教师:综合设计学生日志电子琴的设计与实现摘要:本次设计是xx专业专业方向设计,利用单片机设计简易电子琴。
其主要功能为:按下不同按键,发出不同 1 、2 、3、4 、5 、6 、7 七个音符并且用LED 或LCD显示当前按键。
选用stm32f103C8T6,它有8个定时器,部分定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。
利用芯片内部相关定时器来输出PWM,从而来驱动蜂鸣器。
通过读取外部按键输入的值来相应改变定时器相关寄存器的值,从而来改变PWM的输出频率来达到发出不同音调。
关键词:STM32f103C8T6;PWM;定时器The Design of the KeyboardAbstract:This design is the professional direction of biomedical engineering design. Using Single Chip Microcomputer to achieve a simple Keyboard. Its main function is: While a user press the different keys, it will make different sounds from the buzzer and display different numbers which corresponded to the sounds. Using stm32f103- -C8T6 as control chip. It has16-bit timers. Some of them with up to 4 IC/OC/PWM or pulse counter. Making use of the Timers to generate driving signal .By reading the state of the external key to change the frequency of output . Different frequency of the PWM will control buzzer makes different sounds.Key words: STM32f103C8T6; PWM; Timer一、设计目的和意义本综合设计是为xx专业高年级本科生开设的必修课,是对学生运用所学知识的一次综合训练。
基于单片机的微型电子琴建模
基于单片机的微型电子琴建模微型电子琴是一种基于单片机的电子乐器,它可以模拟出各种音乐乐器的声音,如钢琴、吉他、小提琴等,同时还可以通过按键演奏出各种音乐曲目。
在本文中,我们将讨论如何基于单片机制作一款微型电子琴,并进行建模分析。
一、硬件设计为了制作一款微型电子琴,首先需要选取合适的硬件设备。
在本项目中,我们选择使用STM32单片机作为主控芯片,因为它具有强大的性能和丰富的外设接口,非常适合用于音乐合成的应用。
除了主控芯片外,还需要选择合适的按键、音频输出设备和显示屏。
按键用于演奏音符,音频输出设备用于发声,显示屏用于显示当前演奏的音符和曲目信息。
在硬件设计中,需要合理布局这些设备,并设计合适的电路连接和供电方案,以确保整个系统的稳定和可靠性。
还需要考虑外设设备的尺寸和重量,以便将其集成到一个紧凑的外壳中,从而构成一款便携式的微型电子琴。
在软件设计中,主要需要实现音乐合成和按键控制两个功能。
音乐合成是通过模拟声音波形来模拟不同乐器的声音,按键控制是通过按键输入来演奏音符。
对于音乐合成功能,首先需要设计合适的算法来生成不同乐器的声音波形。
一种常用的方法是使用加法合成技术,通过叠加不同频率和幅度的正弦波来模拟乐器的音色。
还可以使用现成的乐器音色样本,通过数字信号处理技术来实现音乐合成。
对于按键控制功能,需要设计合适的按键扫描算法和音符映射表。
按键扫描算法用于检测按键输入,音符映射表用于将按键输入映射到具体的音符和音高。
还需要设计合适的节奏控制和声音效果,以实现丰富多彩的音乐演奏。
三、建模分析在完成硬件设计和软件设计后,需要进行建模分析来评估整个系统的性能和稳定性。
建模分析可以帮助我们发现潜在的问题和改进空间,从而优化整个系统的设计和实施方案。
需要进行电路建模分析,评估电路连接和供电方案的稳定性和可靠性。
通过电路建模分析,可以确定电路元件的参数和特性,从而优化电路连接和供电方案。
需要进行音乐合成算法的建模分析,评估音乐合成的性能和音色效果。
一种基于STM32的智慧钢琴助手
物联网技术 2020年 / 第6期460 引 言随着物联网技术的广泛应用,传统的儿童练琴方式暴露出诸多问题:儿童弹琴的坐姿不正确,导致练琴效率低下,长此以往不仅会形成不良习惯,更影响身体健康;冬天练琴时冰冷的琴键容易造成手指僵硬;缺少与老师交流的平台,儿童在家练琴暴露的问题家长无法及时指正。
针对上述问题,文中设计了一款多功能智慧钢琴助手。
1 系统总体设计系统总体设计如图1所示。
核心芯片采用STM32F407,外设包括指纹识别模块、无线传输模块、摄像头、语音播报模块、录放音模块和PTC 发热体送风模块等。
录音模块记录弹奏的曲目,指纹模块统计考勤,摄像头模块记录当前用户弹奏的坐姿,STM32F407单片机记录数据后,通过无线传输模块将数据传输至云端库中,待弹奏坐姿与正确坐姿对比后,将正误结果传输至APP 端显示,还可通过语音播报模块播报当前情况,人员考勤记录用以进行弹奏时间的计算。
系统还可判断弹奏者的练习曲目,并在APP 查看相关数据[1-4]。
2 系统功能及组成系统由音频系统、送风系统、信息采集系统、信息传输系统和信息处理及显示系统组成。
2.1 音频系统音频系统由话筒与扬声器模块构成,当用户弹奏琴曲时,按下按钮,系统将自动通过话筒模块记录弹奏过程并储存。
在弹奏结束后,可选择重复播放弹奏内容,以达到反思弹奏过程中存在的不足并及时改正的目的[5-6]。
2.2 送风系统送风系统可在天气寒冷时送出热风温暖琴键,减少用户弹奏时由于手指僵硬带来的不适和损伤,强化练琴效果。
系统由风机、PTC 发热体组成,通过调节控制器的机械旋钮,可对送风温度及风速进行调整。
2.3 信息采集系统信息采集系统由指纹模块及摄像头模块构成。
指纹模块用于采集练琴者的考勤信息,并传输至STM32F407单片机处理后储存;摄像头模块负责采集坐姿图像及实时图像。
2.4 信息传输系统信息传输系统由RT5350模块、ESP8266及GSM 模块组成。
基于MCU的简易激光电子琴设计与实现_毕业设计 (论文)
本科生毕业设计 (论文) 基于MCU的简易激光电子琴设计与实现Design And Implementation Of The Simple Laser Electronic OrganBased On MCU2012 年 04 月目录摘要 (I)ABSTRACT (II)第一章引言 (1)1.1 课题背景 (1)1.2 研究目的及意义 (1)第二章系统总体设计及方案论证 (2)2.1 总体设计方案 (2)2.2 设计方案的论证及选择 (2)2.2.1 主控制系统 (2)2.2.2 传感器系统 (4)2.2.3 发声系统 (5)2.2.4 电源系统 (6)第三章外观结构设计与实现 (8)3.1 外观结构设计思路 (8)3.2 外观设计元素 (8)3.3 结构设计 (9)第四章硬件电路设计与实现 (10)4.1 硬件设计方案 (10)4.2 各模块电路设计与实现 (10)4.2.1 单片机最小系统 (10)4.2.2 激光发射模块 (13)4.2.3 激光接收模块 (14)4.2.4 音响发声模块 (14)第五章软件设计与实现 (16)5.1 软件设计方案 (16)5.2 各模块程序设计与实现 (17)5.2.1 硬件资源配置 (17)5.2.2 端口信号检测 (19)5.2.3 数据处理 (19)5.3 软件开发工具介绍 (19)第六章软件仿真调试 (21)6.1 仿真软件介绍 (21)6.1.1 Protues的功能特点 (21)6.1.2 Protues各功能模块特点 (21)6.1.3 Protues仿真的意义 (23)6.2 Protues仿真方案设计 (23)6.3 Protues电路仿真设计与实现 (24)6.3.1 单片机最小系统仿真电路 (24)6.3.2 独立按键和虚拟仪器仿真电路设计 (25)6.3.3 仿真结果与设计方案可行性分析 (25)第七章总结和展望 (28)参考文献 (29)附录 (I)附录A 硬件电路原理图 (I)附录B 硬件电路PCB (VI)附录C 程序流程图 (VIII)附录D 程序源代码 (IX)附录E 实物图 (XI)致谢 (1)摘要本文提出了一个基于8051内核单片机的激光电子琴的设计方案。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
综合设计任务书学生班级:学生:学号:设计名称:电子琴的设计与实现起止日期:2013.11.18—2013.12.15 指导教师:综合设计学生日志电子琴的设计与实现摘要:本次设计是xx专业专业方向设计,利用单片机设计简易电子琴。
其主要功能为:按下不同按键,发出不同 1 、2 、3、4 、5 、6 、7 七个音符并且用LED 或LCD显示当前按键。
选用stm32f103C8T6,它有8个定时器,部分定时器有多达4个用于输入捕获/输出比较/PWM或脉冲计数的通道和增量编码器输入。
利用芯片部相关定时器来输出PWM,从而来驱动蜂鸣器。
通过读取外部按键输入的值来相应改变定时器相关寄存器的值,从而来改变PWM的输出频率来达到发出不同音调。
关键词:STM32f103C8T6;PWM;定时器The Design of the KeyboardAbstract:This design is the professional direction of biomedical engineering design. Using Single Chip Microcomputer to achieve a simple Keyboard. Its main function is: While a user press the different keys, it will make different sounds from the buzzer and display different numbers which corresponded to the sounds. Using stm32f103- -C8T6 as control chip. It has16-bit timers. Some of them with up to 4 IC/OC/PWM or pulse counter. Making use of the Timers to generate driving signal .By reading the state of the external key to change the frequency of output . Different frequency of the PWM will control buzzer makes different sounds.Key words: STM32f103C8T6; PWM; Timer一、设计目的和意义本综合设计是为xx专业高年级本科生开设的必修课,是对学生运用所学知识的一次综合训练。
其目的是让学生得到一次进行独立设计的工程实践锻炼,不仅培养严谨的科学态度和扎实的实践技能、良好的工程意识,并在设计中学会如何发现、分析和解决工程实践问题的技能和方法,将所学知识综合应用于工程实践中,为后续的毕业设计做好准备。
二、控制要求利用单片机设计简易电子琴。
功能要求:(1) 按下不同按键,发出不同1 、2 、3、4 、5 、6 、7 七个音符;(2) 用LED 或LCD显示当前按键。
总体要求:给出电路原理图、电路调试结果、程序源代码;提交设计报告。
三、设计方案论证3.1 设计方案:方案一:采用MCS-51系列单片机来实现设计要求的功能。
MCS-51系列单片机中的基本型产品是8051,8031和8751,这三个产品只是片程序存储器制造工艺不同。
8051的片程序存储器ROM为掩膜型的在制造芯片时已将应用程序固化进去,使它具有了某种专用功能。
8位CPU拥有片震荡器及时钟电路;32根I\O线;外部存储器ROM和RAM寻址围各64KB;2个16位的定时器/计数器;5个中断源,2个中断优先级;全双工串行口;8051的中央处理器CPU由运算器和控制逻辑构成51单片机是一款比较基础的单片机。
I/O(输入/输出)引脚系统结构紧凑,功能简单,低成本。
可以实现各种丰富的应用。
通过控制I/O口的输出电平的翻转频率来实现对蜂鸣器发音音调的控制。
方案二:采用STM32f03C8T6来实现此次设计,最高72MHz工作频率。
它有多个外部中断,八个定时器,有PWM输出模式,其中2个高级定时器,两个基本定时器,其他的是通用定时器,共48个引脚,除基本的I/O功能之外还包含有复用功能,其外设功能强大,是一款能够很方便使用的功能强大的芯片,同时可以直接对相关寄存器进行操作,。
3.2 方案选择上述两种方案相比,51单片机虽然价格便宜,但是其功能简单,I/O口少,并且仅仅只有5个中断源,而STM32f03C8T6共48个引脚,并且其定时器有PWM输出模式,可以更加方便的控制蜂鸣器的发音。
本次设计包括了七个按键,数码管,蜂鸣器,因此至少需要17个I/O口。
因此先比较而言选用I/O口较多的STM32f03C8T6来作为控制芯片。
四、系统设计4.1 硬件结构设计如图4-1所示,硬件系统主要由数码管显示电路、蜂鸣器驱动电路、按键电路、晶振、复位、电源指示、转压电路、控制芯片等组成。
图4-1 硬件系统图4.1.1 核心控制器硬件电路核心控制芯片的各个输出引脚如图4-2所示:图4-2 STM32f103C8T6引脚图核心控制器是由核心控制芯片以及相关的外围电路组成,包括了专业电路、外部晶振、滤波电路、按键复位电路、电源指示电路等,如图4-3所示。
图4-3核心控制器外围电路4.1.2 蜂鸣器驱动电路此次设计选用有源蜂鸣器。
有源蜂鸣器的发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发音,因此需要一定的电流才能驱动它。
单片机的I/O引脚的输出电流比较小输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路,如图4-4所示,选用NPN的三极管来达到电流放大的作用。
图4-4蜂鸣器驱动电路4.1.3 数码管电路:设计中需要使用一位数码管,如图4-5所示,为四位数码管的驱动电路,在实际的运用中仅仅选用了com4位选端口以及5、6、7、8、9、10、11、接口作为段选。
图4-5 数码管显示电路4.1.4按键电路:按键都采用了上拉电阻,当按键处于不被按下的状态时,连接到单片机的一端的输入信号为高电平,当按键按下时,输入为低电平,如图4-6所示。
图4-6按键电路4.2 软件系统设计4.2.1 软件系统框图设计选用STM32F103C8T6芯片,相关的配置主要包括:,时钟配置、I/O口配置、定时器配置。
主函数中进行显示参数以及PWM输出频率的改变,具体流程图如图4-7所示。
图4-7 软件流程图4.2.2 数码管显示相关段选计算:在此次设计中选用的是共阴极的数码管,段选为高电平有效,位选为低电平有效。
选用STM32f103C8T6的PB0、1、2、.10、11、12、13、14作为段选位,分别对应数码管的h、g、f、e、d、c、b、a段,PB15对应数码管的位选。
图4-8一位数码管当数码管显示0时,选用a、b、c、d、e、f、.段,对应的十六进制为:0x7c04;当数码管显示1时,选用b.、c.段,对应的十六进制为:0x7c04;当数码管显示2时,选用a、b、g、e、d.段,对应的十六进制为:0x7c04;当数码管显示3时,选用a、b、g、c、d.段,对应的十六进制为:0x7c04;当数码管显示4时,选用f、g、b、c.段,对应的十六进制为:0x7c04;当数码管显示5时,选用a、f、g、c、d段,对应的十六进制为:0x7c04;当数码管显示6时,选a、f、e、g、d、c.段,对应的十六进制为:0x7c04;当数码管显示7时,选用a、b、c.段,对应的十六进制为:0x7c04;4.2.3 蜂鸣器发音音调改变原理蜂鸣器分为有源蜂鸣器合无源蜂鸣器。
有源蜂鸣器部带震荡源,所以只要一通电就会叫,价格比无源贵。
无源蜂鸣器必须用2K-5K的方波去驱动它。
此次设计选用有源蜂鸣器。
有源蜂鸣器的发声原理是电流通过电磁线圈,使电磁线圈产生磁场来驱动振动膜发音,因此需要一定的电流才能驱动它。
单片机的I/O引脚的输出电流比较小输出的TTL电平基本上驱动不了蜂鸣器,因此需要增加一个电流放大的电路。
如图4-4所示蜂鸣器的正极接到VCC(+5V)电源上面,蜂鸣器的负极接到三极管的发射极E,三极管的基级B经过限流电阻R1后由单片机引脚控制,当单片机引脚输出高电平时,三极管T1截止,没有电流流过线圈,蜂鸣器不发声;当单片机引脚输出低电平时,三极管导通,这样蜂鸣器的电流形成回路,发出声音。
因此,我们可以通过程序控制引脚的电平来使蜂鸣器发出声音和关闭。
蜂鸣器是的音调改变实际上是通过改变驱动蜂鸣的高低电平的翻转频率来决定,高低电平的变化的频率不同,音调不同,在此次设计中采用TIM1的PWM的频率变化来控制。
4.2.4 PWM输出频率计算:TIM定时器相关配置:void TIM_yingyue(unsigned int NoteSet){static unsigned char IfIsInit=0;if(IfIsInit==0){TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;TIM_OCInitTypeDef TIM_OCInitStructure;TIM_TimeBaseStructure.TIM_Period = NoteSet;TIM_TimeBaseStructure.TIM_Prescaler = 0;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure);/* PWM1 Mode configuration: Channel4 */TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;TIM_OCInitStructure.TIM_Pulse = NoteSet/2;TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High ;TIM_OC1Init(TIM1, &TIM_OCInitStructure);TIM_CtrlPWMOutputs(TIM1,ENABLE);TIM_Cmd(TIM1,ENABLE);IfIsInit=1;}else{TIM1->ARR=NoteSet;TIM1->CCR1=NoteSet/2;} }TIM_Period 设置了在下一个更新事件装入活动的自动重装载寄存器周期的值。