基于Proteus的单片机演奏系统的设计

发布者:书卷气息最新更新时间:2012-10-10 来源: 21ic 关键字:Proteus  单片机  演奏系统 手机看文章 扫描二维码
随时随地手机看文章

    当前的很多用单片机实现音乐演奏的系统都是利用开发板结合仿真器实现的,这种方法不是很复杂,实现也较方便,但是调试不是很方便,且成本也较高。 本文提出的一种基于Proteus 的单片机演奏音乐的方法,非常简单实用,且该方法基于软件来实现的,所以成本非常低,调试方便,效果也很不错,适合于爱好音乐的单片机学习者。 单片机系统的设计分两大部分:硬件设计部分和软件设计部分。

    1 硬件设计

    硬件部分比较简单,如果在开发板上做实验可仿下面图1 电路连接。

   

    AT89C51 单片机的P2.5 口控制一个8550 的三极管,三极管控制电磁蜂鸣器的电源通断。

    如果用Proteus 软件来仿真的话,电路更加简单,见图2。

   
图2 在Proteus 环境下用单片机控制蜂鸣器发声的原理图。[page]

    需要的关键元件:单片机和蜂鸣器。

    为了便于软件编程,先要了解单片机唱歌的基本原理。

    什么是声音呢?声音是空气的振荡,不同的振荡频率我们就可以听到不同声调的声音。 音的频谱范围约在几十到几千赫兹。

    其次,如何让蜂鸣器发声?蜂鸣器有很多种类,但大致分为两类:有源式(直流电就发声,但频率单一);无源式(根据输入方波频率而发出不同的声音)。 这里选择无源式蜂鸣器。

    单片机唱歌的基本原理:利用程序来控制单处机某个口线出一定频率的方波到蜂鸣器,蜂鸣器就可以发出一定音调的声音,若再利用不同的延时程序改变输出频率,就可以改变音调,进而就可让单片机发出"1"、"2","3","4","5","6","7"的音乐。

    2 软件设计

    通过软件延时或者定时器延时来的方式以不同频率改变口线的的高低电平状态来实现的。 如果只是让蜂鸣器发声这已经够了。 但是我们要的是唱歌,所以还有一些工作需要作。

    2.1 音调

    输出不同频率的方波,以实现1、2、3、4 等的不同音调;比如,发出200Hz 的音频,其周期为1/200s,即5ms. 这样,当 P2.5 的高电平或低电平的持续时间为2.5ms 时,就能发出200HZ 的音调。 我们可以写一个延时子程序,用R3 来提供参数,R3=1 时,延时为20us,那么R3 取2500/20=125(7DH)时,就可以发出200Hz 的音调,提供不同的R3 常数,可以得到不同的音调变化。

    利用通用发声程序可以编写乐曲演奏程序,乐曲是按照一定的高低,长短和强弱的关系组成的音调,在一首乐曲中,每音符的音高和音长与频率和节拍有关(如图3 所示)。

   
图3 音符的音高和音长与频率的关系

    图3 画出了两个音阶(一个音阶是8 个音符)的钢琴键和每个键的音符名及其频率(HZ),低音阶以低C(130.8Hz)到中C(261.7Hz)高音阶以中C 到高C(523.3Hz)黑键比它旁边的白键高半个音或低半个音。 组成乐曲的每个音符的频率和持续时间是乐曲程序发声所需要的两个重要数据。 频率可以从图中得到,音符的持续时间可根据乐曲速度及每个音符的节拍数来确定,是可以从乐谱中得到的。

    2.2 节拍

    控制一个音符输出的时间,比如1 拍、1/4 拍。 在4/4(四四拍)中,四分音符为一拍,每小节4 拍,全音符持续4 拍,二分音符持续2 拍,四分音符持续1 拍,八分音符持续半拍。 而全音符需要1s 的时间,则二分音符持续时间为0.5s(50×10ms),四分音符的持续时间为0.25s(25×10ms),八分音符持续时间为0.125s(12.5×10ms)。

    知道了音调与频率和时间的关系,就可以按照乐曲的曲谱将每个音符的频率和持续时间定义成两个数据表,然后编写程序依次取出表中的时间值和频率值。

    仅上所叙还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。 例如,一首曲子的节奏为每分种94 拍,那么一拍就为60/94=0.64s.

    音乐的节拍我们可用定时器来控制,简单的说,一个一拍的音符唱0.64s,我们就设置一个定时器定时0.64s,时间一到就换下一个音符。 但是,由于单片机的T0,在12MHz 晶振下最大定时时间只能为65ms,因此不可能直接用改变T0 的时间初值来实现不同节拍。 如何定时一个更大的时间,我们可以用T0 来产生10ms 的时间基准,然后设置 一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。

    例如对1/4 拍音符,定时时间为0.16s,相应的时间常数(中段计数器)为16(即10H);对3 拍音符,定时时间为1.92s,相应时间长数为192(即C0H)。[page]

    2.3 电路实现

    因为一首曲子不止一个音符,我们不可能对每一个音符的音阶都去"手工"的提供时间常数,为了实现的简化,我们编制一个将每一音符的时间常数和其相应的节拍常数作为一组,按顺序将乐曲中的所有常数排列成的表格,在程序里用查表指令依次查出每一个音符的频率和对应节拍时间,产生音符并控制节奏,就可以实现演奏效果。

    此外,结束符和体止符可以分别用代码00H 和FFH 来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生相应的停顿效果。

    为了产生手弹的节奏感,在某些音符(例两个相同音符)音插入一个时间单位的频率略有不同的音符。

    程序框图如下图4. 本程序演奏的是民歌"八月桂花遍地开",C 调,节奏为94 拍/min。

    用Keil 对程序进行编译,见图5,具体方法可文献[5],编译无误后生成。hex 文件,然后双击Proteus环境下的原理图中的AT89C51,找到这个。 hex 文件,然后点按钮Play,这时单片机控制的蜂鸣器就可以开始播放音乐了。

   
图4 程序流程图

   
图5 在Keil 环境下对程序进行编译

    3 结论

    以上介绍的方法已通过测试,运行良好。 对初学单片机者有一定的启示作用。 读者也可以自行找出一首歌,将乐曲翻译成码表输入单片机,而程序不变。 本实验方法简便,即使不懂音乐的人,也可方便地将一首陌生的曲子翻译成代码。

关键字:Proteus  单片机  演奏系统 引用地址:基于Proteus的单片机演奏系统的设计

上一篇:基于CPCI总线的链路口多DSP引导方案的设计实现
下一篇:STC12C5410AD单片机的AD程序两位数码管显示

推荐阅读最新更新时间:2024-03-16 13:10

msp430单片机应用之定时器、PWM、比较器
1。定时器使用查询和中断两种方式。大多数逻辑芯片输出0的能力大于输出1的能力。 (1)查询方式:TMSEL决定看门狗的工作模式,置一,看门狗工作在定时模式。SSEL选择看门狗定时器的时钟源。SSEL置一。IS0IS1决定了看门狗定时器的输出频率。(注意:使用查询方式时候要清除中断标志) main() { ... while(True) { if(IFG1&0x01) { P1OUT ^= 0x01;//翻转状态 IFG &=0xfe;//清除中断标志位 } } } (2)中断方
[单片机]
2-基于51单片机的蓝牙智能台灯设计
具体实现功能 系统由单片机最小系统+光敏电阻及AD模块+蓝牙模块+红外模块+LED灯+蜂鸣器+电源构成 具体功能: (1)当人靠近的时候灯亮,太靠近的时候,蜂鸣器鸣叫发出警报,如果在一定时间内人没有离开,灯会自动灭; (2)当人离开的时候,灯灭; (3)手机蓝牙可以控制灯的亮灭和亮度,轮番发送“1”、“2”灯会在“较亮”、“很亮”切换;发送指令“C”,灯灭。 设计背景 智能台灯可分成自动和手动两种模式。在自动模式下,台灯能根据环境光的亮暗与人是否被台灯所检测到(人是否在)来自动开启台灯。当人被微机检测到,环境光又达到某个程度的时候(可以设定与调节),台灯就会开启。如果环境光没有达到这个程度,台灯不会开启。
[单片机]
2-基于51<font color='red'>单片机</font>的蓝牙智能台灯设计
单片机与PLC详细比较
要搞清楚单片机与PLC的异同,首先得明确什幺是单片机,什幺是PLC。对此,我们简要回顾一下计算机的发展历程也许有帮助,按计算机专家的原始定义, 计算机系统由五大部分--即控制单元(CU)、算术运算单元(ALU)、存储器(Memory)、输入设备(Input)、输出设备(Output)组 成。早期计算机(晶体管的或集成电路的,不包括电子管的)的CU或ALU由一块甚至多块电路板组成,CU和ALU是分离的,随着集成度的提高,CU和 ALU合在一块就组成了中央处理单元(CPU),接着将CPU集成到单块集成电路中就产生MPU或MCU,出现了如Intel4004、8008、 8080,8085、8086、8088、Z80等MPU。此后,MPU
[单片机]
51单片机 独立按键k1控制数码管移位 k2控制数值加
按下独立按键k1数码管左移,按下独立按键k2数码管数值加1。 typedef unsigned char u8; u8 code smgwei ={0x00,0x04,0x08,0x0c,0x10,0x14,0x18,0x1c}; u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; sbit key1=P3^1; sbit key2=P3^0; u8 wei,shu; void delay(u16 i) { while(i--); } void button() { if(key1==0) { delay(1000);
[单片机]
单片机不是学出来的,而是玩出来的
许多的单片机学习者,他们总不得要领,从一开始学习时的热情高涨,到最后的沮丧放弃,使得大家对单片机产生了既爱又怕的感觉,在工作中和在校的同学的交流中,听到的最多的是 单片机太难了 。其实不是单片机难学,而是不知道怎么入门。请大家记住一句话 单片机不是学出来的,而是玩出来的 。   学习单片机看书不够,实践也要从实际出发,现在的技术太模块了,什么都可以模块,模块的到最后,技术人员都成了只会用了,祖先的留下的知识,基础的知识该知道还是一定要知道的啊。毕竟学习单片机的最终目的是开发,是通过创造智能控制的实物,体现自己的价值。   关于实践有两种方法可以选择一种方法:购买一块51单片机的实验板,不要求功能太的,对于初学者来功能非常多的那
[单片机]
delphi与51单片机串行通信
说明:可能前面几次首发不太准确 //delphi源码 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, SPComm, StdCtrls; type TFCOMM = class(TForm) Button1: TButton; Button2: TButton; Button3: TButton; Memo1: TMemo; Comm1: TComm; procedure FormShow(Se
[单片机]
单片机C868实现无传感器BLDC电机控制
引 言 BLDC具备诸多优势,例如外型紧凑、结构简单、高效率、低噪音、较长使用寿命等等,这种电机越来越广泛地应用于自动化、工业和消费类电子产品等领域。图1所示为典型的BLDC电机框图,该电机包括一个梯形磁通的永磁同步电机、一个转子位置检测器(通常为三个霍尔传感器)和一个驱动电机的三相逆变器。另外,必须配置一个单片机(MCU),输出特定的脉冲宽度调制(PWM)模式来驱动BLDC电机。如同一个传统直流电机那样,电机的换流必须与转子位置同步,用户可以通过改变PWM的占空比来调节电机转速。 图1 BLDC电机框图 通常,电机中的三个霍尔传感器相互成60度角。也就是说,每隔60度其中一个传感器就会变换其状态,完成一次电
[单片机]
<font color='red'>单片机</font>C868实现无传感器BLDC电机控制
AT与STC单片机的主要区别
1.常用的51单片机 51单片机即传统的兼容8051指令代码的8位单片机,对于新手来说,刚接触单片机主要已AT单片机和STC单片机。其两种单片机主要区别为不同的厂家生成,但代码基本可以通用。常用的AT89C51、AT89C52、AT89S51、AT89S52、STC89C51、STC89C52单片机代码均可通用。 但在使用52单片机时需要注意,52是51单片机的更新版本,相比51单片机,52多了一个T2定时器、128B只读存储器、4K只读存储器、2个中断和一个看门狗。 AT与STC单片机的主要区别是程序的下载方式,AT中的S51、S52系列的下载方式是ISP下载方式,而C51、C52与STC都是串口下载方式;其他方面基本大同小
[单片机]
AT与STC<font color='red'>单片机</font>的主要区别
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved