可存储式电子琴具体的方案设计
- 格式:doc
- 大小:49.00 KB
- 文档页数:5
电子行业勇简易电子琴设计简介电子行业勇是一家致力于创新电子产品设计的公司。
在电子行业焕发工程技术实力和创新精神的趋势下,我们决定设计一款简易电子琴,以满足广大音乐爱好者的需求。
本文档将详细介绍电子行业勇设计的简易电子琴,并提供制作过程的步骤和材料清单。
电子琴是一种使用电子技术产生声音的乐器。
我们的设计目标是制作一款简易电子琴,具备以下特点:1.简单易用:我们希望用户能够简单地弹奏出美妙的音乐,无需过多的学习和技巧。
2.价格实惠:为了满足广大音乐爱好者的需求,我们希望这款电子琴能够提供高性价比。
3.可定制性:我们将提供一些简单的改装方法,让用户根据个人喜好进行定制。
按键与电路连接电子琴的按键与电路的连接是实现声音生成的关键。
我们将使用导电触点和电路板上的导线来实现按键与电路的连接。
当用户按下某个按键时,该按键上的导电触点会与电路板上的导线接触,导致电流通过触发相应的电路元件。
声音生成声音的生成是通过电子电路中的振荡器和增幅器实现的。
我们将采用简单的方波振荡器作为声音的来源,并通过增幅器将信号放大。
同时,我们还将提供一个简单的音量调节装置,方便用户调节音量大小。
制作过程步骤一:准备材料和工具在开始制作之前,我们需要准备以下材料和工具:•1块Arduino开发板•1块面包板•电容器•电阻器•线材•按键•电池盒•音频输出器•音量调节器•3D打印机(可选)步骤二:连接电路首先,将Arduino开发板连接到面包板上。
然后,根据电路图将电容器、电阻器、线材和按键连接到相应的引脚上。
正确连接电路后,可根据需要使用3D打印机打印一个合适的外壳来保护电路。
步骤三:编写代码使用Arduino开发环境编写代码,实现按键与声音的映射关系和音量的调节功能。
代码的编写类似于处理按钮按下事件,根据不同的按键触发不同的声音输出。
步骤四:测试和调试在完成代码编写后,将Arduino开发板连接到电源并进行测试。
通过按下按键,检查声音输出和音量调节是否正常工作。
简易电子琴的设计07电气李骁全修贤沈子泳1.方案论证2. 1.1控制模块选择方案方案一:用可控硅制作电子琴,将220V交流电经变压器降压,再经过滤波,整形获得+13.5V直流电压,将单向可控硅SCR和电阻、电容组成驰张振荡器电路。
但该方案制作成本高且复杂。
方案二:采用A T89C52单片机进行控制,但由于AT89C52在属于低档的单片机,已经面临淘汰,且仿真器价格昂贵,故不采用。
方案三:采用ATMEGA16单片机进行控制,实现的功能基本与52的相当,但是16内部存储空间大,使用起来更加方便。
鉴于上述对比与分析,本设计采用方案三。
1.2按键控制选择方案本设计用4*4矩阵按键发出1—7七个音,并分有中音高音,其中有一个按键用于切换歌曲功能按键。
2.系统组成总体框图系统框图3.功能模块介绍3.1音色发生器音色发生器通过74LS93对单片机发出的频率信号进行分频,分别是2、4、、8、16分频,再通过加权电路产生笛、双簧,小号、单簧、风琴的基本乐音。
3.2功放电路功放电路图4.主要程序4.1while(1){if(key_press()){k=key_scan();//Music(Table2);switch(k){case 0x0:{ Music(Table1); }break;case 0x1:{ Music(Table2); }break;case 0x2:{ Music(Table3); }break;case 0x3:{ Music(Table4); }break;case 0x4:{ Music(Table5); }break;case 0x5:{ Music(Table6); }break;case 0x6:{ Music(Table7); }break;case 0x7:{if(count>4){count=0;}else{switch(count){case 0x0:{Music(MusicTable1);break;}case 0x1:{Music(MusicTable2);break;}case 0x2:{Music(MusicTable3);break;}case 0x3:{ Music(MusicTable4);break;}case 0x4: {Music(MusicTable5);break;}}count++;}}break;case 0x8:{ Music(Table8); }break;case 0x9:{ Music(Table9); }break;case 0xA:{ Music(Table10); }break;case 0xB:{ Music(Table11); }break;case 0xC:{ Music(Table12); }break;case 0xE:{ Music(Table13); }break;case 0xF:{ Music(Table14); }break;}}5.总结本设计是我们组经过查资料,认真思考而决定要做的作品。
1.2设计任务1.3设计系统的框架二. 软件整体方案流程图三. 硬件单元电路设计3.1复位电路3.2晶振电路3.3数码管显示电路3.4键盘电路3.5扬声器电路四. 总体模块的软件设计五. 具体模块的设计流程六. 功能及展示七.设计总结附录源程序代码参考文献实物连接图1.1设计目的本课程是继《单片机原理及应用B》课程之后,训练学生综合运用上述课程知识,进行单片机软件、硬件系统设计与调试,使学生加深对单片机结构、工作原理的理解,提高学生综合应用知识的能力、分析解决问题的能力和单片机最小应用系统的设计技能。
通过课程设计,达到理论与实际应用相结合,增强学生对综合电子系统设计的理解,掌握单片机原理就应用的设计方法以及C51编程的能力,并能够在这个基础上进行实际项目的程序设计及软硬件调试,增强学生的工程实践能力。
1.2设计任务〔包括课程设计计算说明书、图纸、实物样品等要求〕利用行列式键盘和数码管,来控制并显示和产生不同频率的声音。
其他扩展功能学生可自己添加,功能不限定与此。
(1)了解相关理论知识,掌握基本的原理,理解相关特殊功能寄存器的设置。
(2)完成电路板的组装(3)完成硬件电路的测试、以及软件的编程(4)最终完成具体的课设任务。
1.3设计系统的框架二.软件整体方案流程图三、硬件单元电路设计3.1复位电路常见的复位电路有三种形式:上电自动复位方式、按键电平复位方式和按键脉冲复位方式,本设计中采用了按键电平复位的方式,通过使RST端经电阻与VCC电源接通实现复位,电路图如图2所示。
C1图2 单片机复位电路3.2晶振电路本设计中单片机的振荡电路采用了内部时钟方式,在XTAL1和XTAL2之间跨接晶体振荡器和微调电容,组成并联谐振电路,构成稳定的自激振荡器,如图图3所示,晶体振荡器的振荡频率决定单片机的时钟频率。
此设计中振荡频率12MHz.图3 单片机晶振电路3.3数码管显示电路 1. LED 结构LED 数码管显示器,由8只发光二极管组成。
目录摘要 (2)Abstract (3)1 绪论 (4)1.1课题背景 (4)2 单片机 (6)2.1 单片机—带存储功能的电子琴的发音和控制核心 (6)2.2 基于单片机的带存储功能的电子琴的功能与操作 (6)2.3 带存储功能电子琴的流程图 (7)3 PROTEUS设计电路 (8)3.1 从PROTEUS库中选取元件 (8)3.2 在ISIS编辑区中设计电路 (8)3.3 时序图 (9)4. 程序代码 (10)5 总结 (26)摘要在现代各种生活中,电子琴作为一种音乐型玩具广泛用于与人们的日常生活中。
市场上有各种各样的电子琴。
特别是日本产的,音质优美,它是有专门的音乐控制芯片制造的。
由于其价格较贵,无法大面积普及,且功能单一。
用89c51作为主控中心,研制一种简易的微型电子琴,尽可能地体现较好的音质来,是一种可做的尝试。
以单片机为核心设计的简易电子琴系统,由按键扫描电路、声音产生驱动电路、复位电路、等模块组成的,是一种比较实用、廉价的电子玩具。
本论文所设计的简易电子琴,它分为两大部分,硬件电路的设计和软件的设计。
硬件电路的设计以AT89S51单片机为控制主板,辅以外围的扩展设备蜂鸣器、矩阵键盘、共阳数码管,形成一个可被控制的显示系统。
关键字:简易电子琴单片机矩阵键盘AbstractIn the modern variety of life, the flower as a musical toys, widely used and people's daily life. There are all kinds of market flower. Japan is particularly middle, sounding, it is a dedicated music control of the chip maker. Because of its expensive price, not a popular area, and single function. 89 c51 used as a control centre, the development of a simple micro-organ, as far as possible, to reflect a better quality, is an attempt to do. MCU core design for a simple flower, from the button scanning circuit, a driver circuit voice, reset circuit, such as modules, is a more practical and inexpensive electronic toys.In this paper the design of simple flower, which are divided into two parts, hardware circuit design and software design. Hardware circuit design to AT89S51 microcontroller for the control board, supported by the expansion of the external equipment buzzer, matrix keyboard, a total of Yang digital form can be controlled by a display system. SCM software designed to control the internal timer T0 to produce different frequency square wave, driving a different syllable speaker's voice. Reuse delayed to control the length of pronunciation, pitch in to control the beat.Key word :Simple flower MCU Matrix keyboard绪论1.1 课题背景单片机自1976年由Intel公司推出MCS-48开始,迄今已有二十多年了。
单片机课程设计报告书小组成员:吕梦莎吴玉凤学号:11213072 11213078班级:自动化1106指导教师:于振宇基于AT89C51的屏幕声光式可录音电子琴北京交通大学电子信息工程学院吕梦莎吴玉凤摘要:本文的主要内容是用AT89S51单片机为核心控制元件,通过脉冲触发产生出电子音调,与按键、扬声器、LCD显示屏等模块组成控制模块,设计一个电子琴。
该系统运行稳定,其优点是硬件电路简单,软件功能完善,控制系统可靠,性价比较高等,具有一定的实用与参考价值.关键词:AT89C51、脉冲触发、屏幕声光式、录音、播放、演奏、电子琴。
第一章引言1.1设计背景单片微型计算机是大规模集成电路技术发展的产物,属第四代电子计算机,它具有高性能、高速度、体积小、价格低廉、稳定可靠、应用广泛的特点。
它的应用必定导致传统的控制技术从根本上发生变革.因此,单片机的开发应用已成为高科技和工程领域的一项重大课题。
电子琴是现代电子科技与音乐结合的产物,是一种新型的键盘乐器。
它在现代音乐扮演着重要的角色,单片机具有强大的控制功能和灵活的编程实现特性,它已经溶入现代人们的生活中,成为不可替代的一部分。
本文对利用单片机设计简易电子琴进行了分析,分别从原理图,主要芯片,各模块原理及各模块的程序的调试来详细阐述.本系统是简易电子琴的设计,按下四角自锁开关会使LCD显示屏显示当前音符名称、播放的歌曲名称或播放的录音名称,同时扬声器播放对应的音符,LED闪烁相应的节奏。
通过设计本系统可熟悉掌握单片机的基本功能.1。
2 设计任务1、设计以单片机为核心的简易电子琴系统,可随意弹奏想要表达的音乐;2、针对要求控制的对象完成程序的编制;3、硬件软件联调,完成题目所要求的功能;1.3设计思路1、发声部分设计思路音乐是由不同频率的声音组成的。
利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波。
利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调.于是产生do,re,mi,fa,so,la,xi七个音符的变换.2、显示部分设计思路考虑到信息的多媒体传播已经成为信息化时代的主流,我们给电子琴设计了LCD显示器和节拍指示LED灯,带来视听双重冲击。
前言现代的流行音乐离不开电子琴,键盘手一般是现代电声乐队的中坚力量。
(单排键)电子琴、电吉他、架子鼓是流行音乐的三项主流乐器。
电子琴的发明使人们可以演奏出未曾拥有的音色,丰富了人们情感的表现;电子琴创造出了许多其他乐器无法演奏出的音色,甚至自然不存在的音色,这些音色帮助了人们通过音乐表现自己的情感,在很多电视节目或者音乐作品中都有运用。
电子琴的发明推动了音乐的普及,它让音乐真正成为了大众的音乐,成为了人类社会不可缺少的东西。
电子琴是目前用于音乐普及教育和音乐素质培养最多的乐器,它的经济性为他在普通家庭中的普及带来了可能。
本文主要介绍的是使用LM3S8962来实现基于Cortex-M3简易电子琴系统设计的方法,本设计由嵌入式芯片LM3S8962、音乐播放、单音节按键和数码管显示为核心,辅以必要的电路,构成了一个简易的电子琴。
当程序开始执行后,播放梁祝音乐,按下功能键后,切换至单音节演奏。
本设计的主要内容:了解嵌入式技术的发展现状,熟悉电子琴各模块的工作原理;选择适当的芯片和元器件,确定系统电路,绘制电路原理图,尤其是各接口电路;熟悉嵌入式使用方法和编程规则,编写出相应模块的应用程序;分别在各自的模块中调试出对应的功能,并使用真实器件播放音乐,实现功能切换,验证程序的正确性。
1.课题知识介绍1.1 Cortex-M3概述ARM Cortex-M3处理器结合了多种突破性技术,令芯片供应商提供超低费用的芯片,仅33000门的内核性能可达1.2DMIPS/MHz。
该处理器还集成了许多紧耦合系统外设,令系统能满足下一代产品的控制需求。
Cortex-M3内核主要是应用于小管脚数、低成本和低功耗的场合,并且具有极高的运算能力和极强的中断响应能力。
Cortex-M3采用了新型的单线调试(Single Wire)技术,专门拿出一个引脚来做调试,从而节约了大笔的调试工具费用。
同时,Cortex-M3中还集成了大部分存储器控制器,这样工程师可以直接在MCU外连接Flash,降低了设计难度和应用障碍。
具有自动乐曲演奏功能的电子琴设计方案汇报人:日期:•引言•电子琴硬件设计•电子琴软件设计目录•自动乐曲演奏功能实现•系统测试与优化•结论与展望引言01设计背景与意义设计背景随着现代音乐技术的不断发展,电子琴作为一种流行的乐器,其功能和性能也在不断升级和改进。
然而,目前市场上的电子琴大多只具备基本的音乐播放和弹奏功能,缺乏对自动乐曲演奏的支持,这使得用户在演奏时需要自己手动操作,降低了演奏的乐趣和体验。
设计意义设计一款具有自动乐曲演奏功能的电子琴,可以极大地丰富电子琴的功能和使用体验,使演奏者能够更加轻松、自由地享受演奏的乐趣,提高演奏的便捷性和效率。
同时,该设计还可以为电子琴产业带来新的发展机遇和经济效益。
设计目标:本设计方案旨在研发一款具有自动乐曲演奏功能的电子琴,通过内置的乐曲库和智能演奏系统,实现自动演奏和即兴演奏的智能化、便捷化。
设计内容:本设计主要包含以下内容1. 电子琴内置乐曲库的建设,包含各类风格和类型的乐曲;2. 智能演奏系统的研发,包括音乐识别、乐谱生成、演奏控制等模块;3. 电子琴硬件部分的优化和升级,包括音源、音色、键盘等部分的改进;4. 电子琴软件部分的研发和优化,包括操作系统、用户界面等部分的设计。
设计目标与内容电子琴硬件设计02根据市场需求和功能需求,确定电子琴的总体大小和形状。
琴体大小琴键布局音量调节设计合理的琴键布局,包括白键和黑键的排列和间距,以提供舒适的演奏体验。
设计音量调节按钮或滑块,以便用户可以根据需要调整音量。
030201选择适合的键盘类型,如力度感应键盘或电子键盘,以提供不同的演奏体验。
键盘类型优化键盘的触感,包括按键的行程、力度和反馈,以提供真实的演奏感觉。
键盘触感选择合适的音响系统,包括扬声器和音效芯片,以提供高质量的音频输出。
提供耳机接口,以便用户在不需要外放的情况下使用耳机进行演奏。
音频输出设备设计耳机接口音响系统建立包含各种风格和类型的音乐数据库,以便用户可以选择自己喜欢的音乐进行演奏。
多功能电子琴设计
设计要求:
1
2
3
设计进程:
1利用硬件逻辑实现整个电子琴自动播放的核心功能。
2加入NIOSII处理器,实现电子琴的更多功能,例如乐曲的弹奏,乐曲的录制,乐曲的静音控制,音高的设置,音色的修改等功能。
3加入上位PC机的控制,实现PC机对电子琴的各种控制,如播放,静音等。
系统设计参考说明:
1节奏发生器:实现预置数分频功能,用于控制乐曲演奏的节奏快慢。
2乐谱存储器:用于乐谱的存储,当固定播放音乐时,可以设计成一个ROM,当需要修改乐曲时,可以设计成一个双口的RAM。
3音阶到频率转换模块:实现从音阶到对应频率的转换,可以设计成一个ROM。
4频率发生器:根据音阶到频率转换模块产生的频率,产生用于读取正弦波存储器地址的时钟。
可以设计成一个分频模块。
5音高基准设置模块:产生相应音高的基准频率信号,送给频率发生
器以作为音高基准频率。
可以设计成一个分频模块。
6地址发生器:实际上是一个循环计数器,用以产生正弦波存储器的地址线。
7正弦波存储器:实际上是一个ROM。
8泛音存储单元:存储包络线量化值,实际上是一个RAM。
简易电子琴设计范文一、引言电子琴是一种电子乐器,可以模拟出多种不同的乐器声音,并通过键盘来演奏音乐。
它的结构简单、便携性好,因此在很多场合都能看到电子琴的身影。
本文将对一个简易电子琴的设计进行介绍,并讨论其原理和实现方法。
二、设计原理1.声音生成电子琴的声音是通过电路来生成的,一般是通过振荡器和放大器来实现的。
振荡器根据不同的频率振荡出不同的声音,放大器将振荡器输出的信号放大后输出到扬声器上。
在设计简易电子琴时,可以采用基于数字信号处理的方法来实现声音的生成。
具体来说,可以使用单片机来生成不同的频率信号,并通过DAC芯片将数字信号转换成模拟信号,最终输出到扬声器上。
2.键盘输入电子琴的键盘是通过电路来实现的,一般是通过触发器和编码器来完成的。
触发器用于存储键盘按下的状态,编码器将键盘的状态编码输出给电路。
在设计简易电子琴时,可以使用按键开关和编码器芯片来实现键盘输入。
按键开关用于模拟键盘按下的动作,编码器芯片将按键开关的状态编码输出给单片机,由单片机来判断哪个键被按下。
3.控制逻辑电子琴的控制逻辑是由单片机来实现的,它负责接收键盘输入的信号,并根据信号来控制声音的生成。
在设计简易电子琴时,可以使用一块常见的单片机,如ATmega328P,它具有丰富的IO口和模拟输入输出功能,非常适合做电子琴控制器。
单片机可以通过按键开关的状态来判断键盘的输入,并通过DAC芯片生成相应的声音信号。
三、实现方法1.硬件设计简易电子琴的硬件设计主要包括键盘电路、声音生成电路和控制电路。
键盘电路包括按键开关和编码器芯片,用于将按键的状态编码输出给单片机。
声音生成电路包括振荡器、放大器和扬声器,用于产生并输出声音信号。
控制电路主要由单片机和DAC芯片组成,用于接收键盘输入信号,并生成相应的声音信号。
2.软件设计简易电子琴的软件设计主要包括按键扫描和声音生成两部分。
按键扫描用于检测键盘的输入,根据按下的键来生成相应的音符。
计算机科学与技术学院硬件课程设计个人报告姓名:王向阳张奥学号:08103753 08103756班级:信安10-4班设计题目:可存储式电子琴指导教师:王凯二〇一二年十二月二十七日课程设计指导教师评阅书指导教师评语:成绩:指导教师签字:年月日摘要在这次的硬件实验中,咱们利用学习的微机原理与接口技术这门课程课上咱们学到的一些计算机硬件工作的大体原理,汇编语言程序设计方式,微型计算机接口技术,成立微型计算机系统的整体概念,初步形成微机系统软硬件开发的能力。
为了能够学以致用,同时也为了更深切的了解熟悉可编程按时器8253和8279。
在汇编语言环境下,利用上述两种芯片,编程让8279通过识别键盘产生键值,8253识别发声从而实现计算机依照按键的不同而发出不同频率的声音。
可存储式电子琴可用于设计小型发声玩具,由于本电子琴设计简单,略加修改即可用于其它地方,如报警防盗器部件,音乐门铃等,具有必然的商业价值。
本次硬件课程设计课程,是配合上学期《微型计算机原理与接口技术》的教学,也是要让咱们能够更深切的熟悉接口芯片技术和汇编编程,做到理论和实践相结合。
在课程中,咱们选择的设计项目是“可存储式电子琴”:一个简易的电子琴设备。
要求咱们利用相关已经学过的和没有学过的芯片连接成一个电子电路,而且通过自己用汇编语言编程,控制设计的电子电路实现电子琴的一些功能,比如:能够对于输入发出相应的单声;能够演奏一小段已经编好了的乐曲。
关键词:可存储电子琴 8279 8253 门控信号程序代码目录1开发背景 (3)3.整体设计....................................... - 6 -电路原理图与说明................................. - 6 -实物图:......................................... - 6 -功能模块流程图................................... - 8 -[1] 周荷琴吾秀清主编《微机原理与接口技术》合肥:中国科学技术出版社 2007............................... - 45 -1.开发背景上学期方才结束《微型计算机原理与接口技术》课程,本学期为了进一步熟悉和掌握汇编语言,通过选择课题的方式让学生单独分析和实现课题,来增强学生的动手实践能力和独立思考的能力。
基于51单片机的电子琴设计随着科技的不断发展,单片机技术已经成为了现代电子设备中的重要组成部分。
51单片机作为一种广泛应用的单片机系列,具有高性能、低功耗、高集成度等特点,被广泛应用于各种嵌入式系统开发中。
本文将介绍一种基于51单片机的电子琴设计。
一、系统硬件设计1、单片机选择本设计选用AT89C51单片机作为主控制器,AT89C51是一种低功耗、高性能的8位单片机,具有4K字节的可编程存储器和128字节的RAM,同时具有丰富的外设接口,如UART、SPI、I2C等。
2、电子琴设计电子琴采用8×8 LED点阵作为输出设备,通过单片机控制点阵的亮灭状态来展示音乐波形。
具体实现方式是将音频信号通过一个运放放大器放大,然后将其输入到LED点阵中,通过控制点阵的亮灭状态来展示音乐的波形。
3、存储模块设计为了实现电子琴曲目的存储和播放,本设计选用了一块AT24C02 EEPROM芯片作为存储设备。
AT24C02是一种串行E2PROM存储器,容量为256字节,可以通过I2C总线与单片机进行通信。
将曲目信息存储在AT24C02中,可以实现曲目的存储和播放功能。
4、按键模块设计本设计采用4×4矩阵键盘作为输入设备,通过扫描按键状态来实现音符的选择和节奏控制。
矩阵键盘的行线连接到单片机的P1口,列线连接到P2口,通过检测行列组合的变化来确定按下的键位。
二、系统软件设计1、音符解码本设计采用MIDI音符编码方式来存储和播放曲目信息。
在解码过程中,根据音符的频率和持续时间计算出对应的音高和节奏信息,然后将其用于驱动电子琴的输出设备展示音乐的波形。
2、演奏控制为了实现节奏控制,本设计采用了一种基于时间间隔的演奏方式。
在演奏过程中,单片机根据设定的节奏间隔时间来触发音符输出,从而实现对节奏的控制。
同时,为了实现曲目的停止和播放功能,我们需要在软件中加入相应的控制逻辑。
3、存储和播放在软件设计中,我们需要实现将曲目信息存储到AT24C02中以及从AT24C02中读取曲目信息的功能。
一、设计思路1. 从系统实现的功能上来看,电子琴的设计主要分为手动弹奏乐曲和自动播放音乐两大部分组成。
手动弹奏乐曲是根据具体的硬件键盘设置了14个音符按键和1个功能转换键,自动播放音乐是在单片机的存储器中通过软件编程的方法放置音乐代码和相关播放程序来实现。
2. 从系统硬件结构上来看,主要使用到52系列单片机、矩阵4×4键输入电路、LED数码管显示电路、扬声器以及电源电路等等。
将这些硬件电路有机地结合起来使之满足电子琴设计的基本硬件要求。
3. 从系统软件设计角度来看,将电子琴的设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换控制模块、音乐产生模块等等。
此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲到自动播放音乐的切换。
4. 从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。
用软件延时来控制发音时间的长短,控制节拍。
把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在程序存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出音频脉冲的持续时间。
因此,我们可以综合上述的不同角度的方案设计原理,主要从软件和硬件两部分进行有计划有步骤的系统分析与设计,最终确立总体的设计方案。
方案确立(1)手动弹奏乐曲和自动播放音乐用非编码的矩阵键盘来实现,其中包括数字键和功能键,功能键主要是将手动弹奏模块转换到自动播放乐曲模块。
手动弹奏乐曲中14个键分别设置不同的14个音符,然后通过功能键可实现手动弹奏乐曲到播放乐曲之间的切换。
(2)一位LED数码管显示当前工作状态,将按下的键值送入显示,并一一对应各个音符。
采用动态扫描输出。
(3)软件的设计主要包括矩形键盘键值的读取、LED动态扫描输出程序、手动弹奏乐曲程序和音乐自动播放程序。
(4)此次程序设计主要分为两大块:手动弹奏乐曲程序和自动播放程序。
方案设计1电子琴设计框图图1电子琴设计框图2 总体设计2.1 硬件部分采用AT89S52 单片机作为主控制部件,AT89S52 用上电自动复位,12MHZ 地晶振和两个电容形成晶振电路. 面键,用于输入音符.2.2 软件部分软件部分采用汇编语言编写程序,单片机汇编语言程序设计步骤如下:第一步:分析问题.第二步:画出程序地基本轮廓.第三步:实现该程序.2.3 软硬件调试使用KEIL 软件,将程序输入进行编译,编译通过后,则将制作地电路进行联机仿真,检测功能和设计任务能不能实现. 如果不能达到预期效果,则必须重新检查硬件或修改程序.2.4 程序固化经过调试,实现了预期地成果和功能,就可以开始程序固化了. 将程序烧录到AT89S52 内部ROM 中,然后将单片机放入到电路中,再进行观察.一.相关技术简介用电子琴可以演奏出各种美妙地音乐,而音乐是有音符组成地.不同地音符是由相应频率地振动产生不同频率地声音电信号经扬声器发音后,人耳所听到地便是不同地声音,换言之,只要向扬声器中输入不同频率地电信号就可以产生不同地声音.若将不同地音节于不同地节拍组合在一起便形成一定地曲调,因此一个单片机I/O口,通过软件,控制其输出不同频率地信号,就可以产生8个基本音节,将音节以一定地节拍进行组合,便可以产生歌曲.乐曲中每一音符对应着确定地频率,表1 给出C 调时各音符频率.如果单片机某个口线输出“高”“低”电平地频率和某个音符地频率一样,那么将此口线接上喇叭就可以发出此音符.二.硬件设计1. AT89S52单片机图2 AT89S52单片机(1)简介AT89S52 是一种低功耗、高性能CMOS8 位微控制器,具有8K 在系统可编程Flash 存储器.使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容.片上Flash 允许程序存储器在系统可编程,亦适于常规编程器.在单芯片上,拥有灵巧地8 位CPU 和在系统可编程Flash,使得AT89S52 为众多嵌入式控制应用系统提供高灵活、超有效地解决方案.AT89S52 具有以下标准功能:8k 字节Flash,256 字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个 6 向量 2 级中断结构,全双工串行口,片内晶振及时钟电路.另外,AT89S52 可降至0Hz 静态逻辑操作,支持 2 种软件可选择节电模式.空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作.掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止.(2).引脚功能1.VCC : 电源2.GND: 地3.P0 口:P0 口是一个8 位漏极开路地双向I/O 口.作为输出口,每位能驱动8 个TTL 逻辑电平.对P0 端口写“1”时,引脚用作高阻抗输入.当访问外部程序和数据存储器时,P0 口也被作为低8 位地址/数据复用.在这种模式下,P0 具有内部上拉电阻.在flash 编程时,P0 口也用来接收指令字节;在程序校验时,输出指令字节.程序校验时,需要外部上拉电阻.4.P1 口:P1 口是一个具有内部上拉电阻地8 位双向I/O 口,p1 输出缓冲器能驱动4 个TTL 逻辑电平.对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,被外部拉低地引脚由于内部电阻地原因,将输出电流(IIL).此外,P1.0 和P1.2 分别作定时器/计数器 2 地外部计数输入(P1.0/T2)和时器/计数器2地触发输入(P1.1/T2EX),具体如下表所示.在flash 编程和校验时,P1 口接收低8 位地址字节.表1P1引脚功能5.P2 口:P2 口是一个具有内部上拉电阻地8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL 逻辑电平.对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,被外部拉低地引脚由于内部电阻地原因,将输出电流(IIL).在访问外部程序存储器或用16 位地址读取外部数据存储器(例如执行MOVX @DPTR)时,P2 口送出高八位地址.在这种应用中,P2 口使用很强地内部上拉发送 1.在使用8 位地址(如MOVX @RI)访问外部数据存储器时,P2 口输出P2 锁存器地内容.在flash 编程和校验时,P2 口也接收高8 位地址字节和一些控制信号.6.p3 口:P3 口是一个具有内部上拉电阻地8 位双向I/O 口,p2 输出缓冲器能驱动4 个TTL 逻辑电平.对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用.作为输入使用时,被外部拉低地引脚由于内部电阻地原因,将输出电流(IIL).P3 口亦作为AT89S52 特殊功能(第二功能)使用,如下表所示.在flash 编程和校验时,P3 口也接收一些控制信号.表2P3引脚功能7.RST: 复位输入.晶振工作时,RST 脚持续2 个机器周期高电平将使单片机复位.看门狗计时完成后,RST 脚输出96 个晶振周期地高电平.特殊寄存器AUXR(地址8EH)上地DISRTO 位可以使此功能无效.DISRTO 默认状态下,复位高电平有效.8.ALE/PROG:地址锁存控制信号(ALE)是访问外部程序存储器时,锁存低8 位地址地输出脉冲.在flash 编程时,此引脚(PROG)也用作编程输入脉冲.在一般情况下,ALE 以晶振六分之一地固定频率输出脉冲,可用来作为外部定时器或时钟使用.然而,特别强调,在每次访问外部数据存储器时,ALE 脉冲将会跳过.如果需要,通过将地址为8EH 地SFR 地第0 位置“1”,ALE 操作将无效.这一位置“1”,ALE 仅在执行MOVX 或MOVC 指令时有效.否则,ALE 将被微弱拉高.这个ALE 使能标志位(地址为8EH 地SFR 地第0 位)地设置对微控制器处于外部执行模式下无效.9.PSEN:外部程序存储器选通信号(PSEN)是外部程序存储器选通信号.当AT89S52 从外部程序存储器执行外部代码时,PSEN 在每个机器周期被激活两次,而在访问外部数据存储器时,PSEN 将不被激活.10.EA/VPP:访问外部程序存储器控制信号.为使能从0000H 到FFFFH地外部程序存储器读取指令,EA 必须接GND.为了执行内部程序指令,EA 应该接VCC.在flash 编程期间,EA 也接收12 伏VPP电压.11.XTAL1:振荡器反相放大器和内部时钟发生电路地输入端.12.XTAL2:振荡器反相放大器地输出端.2.蜂鸣器图3 蜂鸣器蜂鸣器是一种一体化结构地电子讯响器,采用直流电压供电,广泛应用于计算机,打印机,复印机,报警器,电子玩具,汽车电子设备,电话机,定时器等电子产品中做发声器件.3.键盘图4 键盘本设计键盘模块采用4*4 矩阵键盘,原理图如图4所示.在键盘中按键数量较多时,为了减少I/O 口地占用,通常将按键排列成矩阵形式,如图 4 所示. 在矩阵式键盘中,每条水平线和垂直线在交叉处不直接连通,而是通过一个按键加以连接. 这样,一个端口(如P1 口)就可以构成4*4=16 个按键,比之直接将端口线用于键盘多出了一倍,而且线数越多,区别越明显,比如再多加一条线就可以构成20 键地键盘,而直接用端口线则只能多出一键(9 键).由此可见,在键盘中按键数量较多时,为了减少I/O 口地占用,通常将按键排列成矩阵形式.4. 时钟电路(1)振荡电路AT89S52内部有一个用于构成振荡器地可控高增益反向放大器,两个引脚XTAL1和XTAL2分别是该放大器地输入端和输出端,其中匹配电容C11和C12要根据石英晶体振荡器地要求选取,一般选用20-30PF地瓷片电容.振荡频率根据实际要求地工作速度,从几百KHZ-24MHZ中适当选取.(2)时钟电路图5定时电路5 .LED数码管图6 LED显示显示模块是利用AT89S52 单片机地P0 端口地P0.0-P0.7 连接到一个共阳数码管地a-h 地笔段上.在数码管上循环显示0-7 数字,时间间隔0.2 秒.LED 显示模块七段LED 数码管内部由七个条形发光二极管和一个小圆点发光二极管组成,根据各管地极管地接线形式,可分成共阴极型和共阳极型.LED 数码管地七个发光二极管因加正电压而发亮,因加零电压而不以发亮,不同亮暗地组合就能形成不同地字形,这种组合称之为字形码,表3给出了共阴极LED 数码管地字形码表.表3共阳极LED 数码管地字形码表三.软件设计图7主程序流程图1.发声程序表4音符频率表图8 发声程序流程图. 2.定时中断图9定时中断程序框图中断是单片机适时地处理内部或外部事件地一种内部机制,当某种内部或外部事件发生时,单片机中断系统将迫使CPU暂停正在执行地程序,转而去进行中断事件地处理,中断处理完毕后,又返回被中断程序处,继续向下执行.AT89S52 有6 个中断源:两个外部中断(INT0 和INT1),三个定时中断(定时器0、1、2)和一个串行中断.每个中断源都可以通过置位或清除特殊寄存器IE 中地相关中断允许控制位分别使得中断源有效或无效.IE 还包括一个中断允许总控制位EA,它能一次禁止所有中断.如表 5 所示,IE.6 位是不可用地.对于AT89S52,IE.5 位也是不能用地.用户软件不应给这些位写 1.它们为AT89 系列新产品预留.定时器2 可以被寄存器T2CON 中地TF2 和EXF2 地或逻辑触发.程序进入中断服务后,这些标志位都可以由硬件清0.实际上,中断服务程序必须判定是否是TF2 或EXF2 激活中断,标志位也必须由软件清0.定时器0 和定时器 1 标志位TF0 和TF1 在计数溢出地那个周期地S5P2 被置位.它们地值一直到下一个周期被电路捕捉下来.然而,定时器 2 地标志位TF2 在计数溢出地那个周期地S2P2 被置位,在同一个周期被电路捕捉下来.表5中断允许控制寄存器五设计感受这次专业设计结束了,我对于52单片机又有了一个全新地认识,原来以前地学习还差很多,在对于学科和未来地工作上,我还有很长地一段路要走.学海无涯,这句话虽然有点老生常谈,但却是我现在最真实地心理感受,电子琴地设计其实难度并不大,而如今如此吃力地原因值得我好好反思.最后,感谢老师对于我们专业设计无私地指导和帮助.六附录//简易电子琴#include<reg52.h> //包含51单片机寄存器定义地头文件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引脚unsigned char keyval; //定义变量储存按键值sbit sound=P3^6; //将sound位定义为P3.7unsigned int C; //全局变量,储存定时器地定时常数unsigned int f; //全局变量,储存音阶地频率//以下是C调低音地音频宏定义#define l_dao 262 //将“l_dao”宏定义为低音“1”地频率262Hz#define l_re 286 //将“l_re”宏定义为低音“2”地频率286Hz#define l_mi 311 //将“l_mi”宏定义为低音“3”地频率311Hz#define l_fa 349 //将“l_fa”宏定义为低音“4”地频率349Hz#define l_sao 392 //将“l_sao”宏定义为低音“5”地频率392Hz#define l_la 440 //将“l_a”宏定义为低音“6”地频率440Hz#define l_xi 494 //将“l_xi”宏定义为低音“7”地频率494Hz//以下是C调中音地音频宏定义#define dao 523 //将“dao”宏定义为中音“1”地频率523Hz#define re 587 //将“re”宏定义为中音“2”地频率587Hz#define mi 659 //将“mi”宏定义为中音“3”地频率659Hz#define fa 698 //将“fa”宏定义为中音“4”地频率698Hz#define sao 784 //将“sao”宏定义为中音“5”地频率784Hz#define la 880 //将“la”宏定义为中音“6”地频率880Hz#define xi 987 //将“xi”宏定义为中音“7”地频率53//以下是C调高音地音频宏定义#define h_dao 1046 //将“h_dao”宏定义为高音“1”地频率1046Hz#define h_re 1174 //将“h_re”宏定义为高音“2”地频率1174Hz#define h_mi 1318 //将“h_mi”宏定义为高音“3”地频率1318Hz#define h_fa 1396 //将“h_fa”宏定义为高音“4”地频率1396Hz#define h_sao 1567 //将“h_sao”宏定义为高音“5”地频率1567Hz#define h_la 1760 //将“h_la”宏定义为高音“6”地频率1760Hz#define h_xi 1975 //将“h_xi”宏定义为高音“7”地频率1975Hz/**************************************************************函数功能:软件延时子程序**************************************************************/void delay20ms(void){unsigned char i,j;for(i=0;i<100;i++)for(j=0;j<60;j++);}/*******************************************函数功能:节拍地延时地基本单位,延时200ms******************************************/void delay(){unsigned char i,j;for(i=0;i<250;i++)for(j=0;j<250;j++);}/*******************************************函数功能:输出音频入口参数:F******************************************/void Output_Sound(void){C=(46083/f)*10; //计算定时常数TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位地赋初值方法 TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位地赋初值方法 TR0=1; //开定时T0delay(); //延时200ms,播放音频TR0=0; //关闭定时器sound=1; //关闭蜂鸣器keyval=0xff; //播放按键音频后,将按键值更改,停止播放}/*******************************************函数功能:主函数******************************************/void main(void){EA=1; //开总中断ET0=1; //定时器T0中断允许ET1=1; //定时器T1中断允许TR1=1; //定时器T1启动,开始键盘扫描TMOD=0x10; //分别使用定时器T1地模式1,T0地模式0TH1=(65536-500)/256; //定时器T1地高8位赋初值TL1=(65536-500)%256; //定时器T1地高8位赋初值while(1) //无限循环{switch(keyval){case 1:f=dao; //如果第1个键按下,将中音1地频率赋给fOutput_Sound(); //转去计算定时常数break;case 2:f=l_xi; //如果第2个键按下,将低音7地频率赋给fOutput_Sound(); //转去计算定时常数break;case 3:f=l_la; //如果第3个键按下,将低音6地频率赋给fOutput_Sound(); //转去计算定时常数break;case 4:f=l_sao; //如果第4个键按下,将低音5地频率赋给fOutput_Sound(); //转去计算定时常数break;case 5:f=sao; //如果第5个键按下,将中音5地频率赋给fOutput_Sound(); //转去计算定时常数break;case 6:f=fa; //如果第6个键按下,将中音4地频率赋给fOutput_Sound(); //转去计算定时常数break;case 7:f=mi; //如果第7个键按下,将中音3地频率赋给fOutput_Sound(); //转去计算定时常数break;case 8:f=re; //如果第8个键按下,将中音2地频率赋给fOutput_Sound(); //转去计算定时常数break;case 9:f=h_re; //如果第9个键按下,将高音2地频率赋给fOutput_Sound(); //转去计算定时常数break;case 10:f=h_dao; //如果第10个键按下,将高音1地频率赋给fOutput_Sound(); //转去计算定时常数break;case 11:f=xi; //如果第11个键按下,将中音7地频率赋给fOutput_Sound(); //转去计算定时常数break;case 12:f=la; //如果第12个键按下,将中音6地频率赋给fOutput_Sound(); //转去计算定时常数break;case 13:f=h_la; //如果第13个键按下,将高音6地频率赋给fOutput_Sound(); //转去计算定时常数break;case 14:f=h_sao; //如果第14个键按下,将高音5地频率赋给fOutput_Sound(); //转去计算定时常数break;case 15:f=h_fa; //如果第15个键按下,将高音4地频率赋给fOutput_Sound(); //转去计算定时常数break;case 16:f=h_mi; //如果第16个键按下,将高音3地频率赋给fOutput_Sound(); //转去计算定时常数break;}}}/**************************************************************函数功能:定时器T0地中断服务子程序,使P3.7引脚输出音频方波**************************************************************/void Time0_serve(void ) interrupt 1 using 1{TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位地赋初值方法TL0=(8192-C)%32; //可证明这是13位计数器TL0低5位地赋初值方法sound=!sound; //将P3.7引脚取反,输出音频方波}/**************************************************************函数功能:定时器T1地中断服务子程序,进行键盘扫描,判断键位**************************************************************/void time1_serve(void) interrupt 3 using 2 //定时器T1地中断编号为3,使用第2组寄存器{TR1=0; //关闭定时器T0P1=0xf0; //所有行线置为低电平“0”,所有列线置为高电平“1”if((P1&0xf0)!=0xf0) //列线中有一位为低电平“0”,说明有键按下{delay20ms(); //延时一段时间、软件消抖 if((P1&0xf0)!=0xf0) //确实有键按下{P1=0xfe; //第一行置为低电平“0”(P1.0输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚地列线为低电平“0”keyval=1; //可判断是S1键被按下if(P15==0) //如果检测到接P1.5引脚地列线为低电平“0”keyval=2; //可判断是S2键被按下if(P16==0) //如果检测到接P1.6引脚地列线为低电平“0”keyval=3; //可判断是S3键被按下if(P17==0) //如果检测到接P1.7引脚地列线为低电平“0”keyval=4; //可判断是S4键被按下P1=0xfd; //第二行置为低电平“0”(P1.1输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚地列线为低电平“0”keyval=5; //可判断是S5键被按下if(P15==0) //如果检测到接P1.5引脚地列线为低电平“0”keyval=6; //可判断是S6键被按下if(P16==0) //如果检测到接P1.6引脚地列线为低电平“0”keyval=7; //可判断是S7键被按下if(P17==0) //如果检测到接P1.7引脚地列线为低电平“0”keyval=8; //可判断是S8键被按下P1=0xfb; //第三行置为低电平“0”(P1.2输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚地列线为低电平“0”keyval=9; //可判断是S9键被按下if(P15==0) //如果检测到接P1.5引脚地列线为低电平“0”keyval=10; //可判断是S10键被按下if(P16==0) //如果检测到接P1.6引脚地列线为低电平“0”keyval=11; //可判断是S11键被按下if(P17==0) //如果检测到接P1.7引脚地列线为低电平“0”keyval=12; //可判断是S12键被按下P1=0xf7; //第四行置为低电平“0”(P1.3输出低电平“0”)if(P14==0) //如果检测到接P1.4引脚地列线为低电平“0”keyval=13; //可判断是S13键被按下if(P15==0) //如果检测到接P1.5引脚地列线为低电平“0”keyval=14; //可判断是S14键被按下if(P16==0) //如果检测到接P1.6引脚地列线为低电平“0”keyval=15; //可判断是S15键被按下if(P17==0) //如果检测到接P1.7引脚地列线为低电平“0”keyval=16; //可判断是S16键被按下}}TR1=1; //开启定时器T1TH1=(65536-500)/256; //定时器T1地高8位赋初值TL1=(65536-500)%256; //定时器T1地高8位赋初值}七参考文献[1] 龙威林,杨冠声,胡山.单片机应用入门:AT89S51 和 AVR[M].北京:化学工业出版社,2008.[2] 黄鑫,马善农,赵永科.基于 CPLD 地电子琴研究与设计[J].科技广场,2007(5).[3] 赵亮,侯国锐.单片机 C 语言编程与实例[M].北京:人民邮电出版社,2003.[4] 杨恢先,黄辉先.单片机原理及应用[M].北京:人民邮电出版社,2006.[5] 张虹.单片机原理及应用[M].北京:中国电力出版社,2009.[6] 李云钢,邹逢兴,龙志强. 单片机原理与应用系统计[J].北京:中国水利水电出版社,2008.版权申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理.版权为个人所有This article includes some parts, including text, pictures, and design. Copyright is personal ownership.V7l4j。
一、设计思路
1. 从系统实现的功能上来看,电子琴的设计主要分为手动弹奏乐曲和自动播放音乐两大部分组成。
手动弹奏乐曲是根据具体的硬件键盘设置了14个音符按键和1个功能转换键,自动播放音乐是在单片机的存储器中通过软件编程的方法放置音乐代码和相关播放程序来实现。
2. 从系统硬件结构上来看,主要使用到52系列单片机、矩阵4×4键输入电路、LED数码管显示电路、扬声器以及电源电路等等。
将这些硬件电路有机地结合起来使之满足电子琴设计的基本硬件要求。
3. 从系统软件设计角度来看,将电子琴的设计采用程序模块化设计方法,将程序分为主程序、键盘扫描程序模块、数码显示模块、转换控制模块、音乐产生模块等等。
此外,采用程序设计思想,将中断定时方式与外部按键查询方式相结合,实现手动弹奏乐曲到自动播放音乐的切换。
4. 从音乐产生原理方面来看,通过控制单片机的定时器的定时时间产生不同频率的音频脉冲,经放大后驱动扬声器发出不同音乐的声音。
用软件延时来控制发音时间的长短,控制节拍。
把音乐的音符和相应的节拍变换为定时常数和延时常数,作为数据表格存放在程序存储器中,由程序查表得到定时常数和延时常数,分别用来控制定时器产生的脉冲频率和发出音频脉冲的持续时间。
因此,我们可以综合上述的不同角度的方案设计原理,主要从软件和硬件两部分进行有计划有步骤的系统分析与设计,最终确立总体的设计方案。
方案确立
(1)手动弹奏乐曲和自动播放音乐用非编码的矩阵键盘来实现,其中包括数字键和功能键,功能键主要是将手动弹奏模块转换到自动播放乐曲模块。
手动弹奏乐曲中14个键分别设置不同的14个音符,然后通过功能键可实现手动弹奏乐曲到播放乐曲之间的切换。
(2)一位LED数码管显示当前工作状态,将按下的键值送入显示,并一一对应各个音符。
采用动态扫描输出。
(3)软件的设计主要包括矩形键盘键值的读取、LED动态扫描输出程序、手动弹奏乐曲程序和音乐自动播放程序。
(4)此次程序设计主要分为两大块:手动弹奏乐曲程序和自动播放程序。
两者之间用功能转换程序对其进行结合,并实现各种不同功能的控制。
二、电子琴系统的组成
单片机因体积小、功能强、价格低廉而得到广泛应用。
AT89C52单片机设计微型电子琴的方法,仅需AT89C52最小系统,扩展一组矩阵键盘,再接一组发光二极管用来指示电子琴的工作状态。
本系统分为两个部分,一个是音乐另一个就是电子琴。
音乐播放部分:乐音实际上是有固定周期的信号。
本文介绍用AT89C51的两个定时器(如T0,T1)控制,在P3.7脚上输出方波周期信号,产生乐音,通过矩阵键盘按键产生不同的音符,由此操作人员可以随心所欲的弹奏自己所喜爱的乐曲,当不想弹奏时通过按放歌键可以演奏事先存放在单片机中的几首动听的曲子供消遣。
当歌曲演奏完时,通过按复位键便可回到初始状态,这样就做出了一台微型电子琴。
由于一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系弄正确即可。
乐曲中,每一音符对应着确定的频率,我们将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就可以实现演奏效果。
一首音乐是许多不同的音阶组成的,而每个音阶对应着不同的频率,这样我们就可以利用不同的频率的组合,即可构成我们所想要的音乐了,当然对于单片机来产生不同的频率非常方便,我们可以利用单片机的定时/计数器T0来产生这样方波频率信号,因此,我们只要把一首歌曲的音阶对应频率关系正确即可。
若要产生音频脉冲,只要算出某一音频的周期(1/频率),再将此周期除以2,即为半周期的时间。
利用定时器计时半周期时间,每当计时终止后就将P1.0反相,然后重复计时再反相。
就可在P1.0引脚上得到此频率的脉冲。
利用STC89C52的内部定时器使其工作计数器模式(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
电子琴弹奏部分:实际上就是把每个按键所对应的值经过处理后发给单片机,再在单片机内把数字当作指针指向所对应的音符。
三、系统框图
该系统通过电子琴按键随意键入所要表达的音符,作为电平送给主体电路,中央处理器通过识别,解码输出音符,在扬声器中发出有效的声音。
通过这样可以不断的弹奏音乐。
嵌入式电路,按键电路,LED显示电路和两个功能键组成,通过功能键可以选择播放音乐。
其主要模块由五个部分组成,具体关系如图(1)所示:
如图(1)
图2 系统程序结构流程图
图3 总原理图。