单片机音乐程序设计的原理

发布者:乡村乐园最新更新时间:2017-10-12 来源: eefocus关键字:单片机  音乐程序 手机看文章 扫描二维码
随时随地手机看文章

利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 

单片机的基本发音实验 

我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。 

例如,要产生200HZ的音频信号,按图1接入喇叭(若属临时实验,也可将喇叭直接接在P1口线上),实验程序为: 

其中子程序DEL为延时子程序,当R3为1时,延时时间约为20us,R3中存放延时常数,对200HZ音频,其周期为1/200秒,即5ms。这样,当P1.4的高电平或低电平的持续时间为2.5ms,即R3的时间常数取2500/20=125(7DH)时,就能发出200HZ的音调。将上述程序键入学习机,并持续修改R3的常数能感到音调的变化。乐曲中,每一音符对应着确定的频率,表1给出C调时各音符频率及其对应的时间常数。读者能根据表1所供给的常数,将其16进制代码送入R3,反复练习体会。根据表1能奏出音符。仅这还不够,要准确奏出一首曲子,必须准确地控制乐曲节奏,即一音符的持续时间。 

音符的节拍我们能用定时器T0来控制,送入不一样的初值,就能产生不一样的定时时间。便如某歌曲的节奏为每分钟94拍,即一拍为0.64秒。其它节拍与时间的对应关系见表2。 

但时,由于T0的最大定时时间只能为131毫秒,因此不可能直接用改变T0的时间初值来实现不一样节拍。我们能用T0来产生10毫秒的时间基准,然后设置一个中断计数器,通过判别中断计数器的值来控制节拍时间的长短。表2中也给出了各种节拍所对应的时间常数。例如对1/4拍音符,定时时间为0.16秒,对应的时间常数为16(即10H);对3拍音符,定时时间为1.92秒,对应时间长数为192(即C0H)。 

我们将每一音符的时间常数和其对应的节拍常数作为一组,按次序将乐曲中的所有常数排列成一个表,然后由查表程序依次取出,产生音符并控制节奏,就能实现演奏效果。此外,结束符和体止符能分别用代码00H和FFH来表示,若查表结果为00H,则表示曲子终了;若查表结果为FFH,则产生对应的停顿效果。为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不一样的音符。 

下面给出程序序清单,可直接在TD-III型学习机上演奏,对其它不一样型号的学习机,只需对应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也能自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验办法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。

关键字:单片机  音乐程序 引用地址:单片机音乐程序设计的原理

上一篇:51单片机计数中断程序举例 外部按钮产生中断
下一篇:80C51单片机的定时器/计数器的作用与结构

推荐阅读最新更新时间:2024-03-16 15:40

特斯拉第三代MCU被曝光 ,性能媲美最新款游戏主机
如果你购买一台新车,直接白送一个 AMD Radeon RX 6000 系高端显卡,是不是很划算? 近日,著名博主特里克·舒尔(Patrick Schur)在其社交媒体上发布了一张AMD Navi 23 GPU与特斯拉车载系统连接的图表。这张图似乎证实特斯拉车载信息娱乐系统将使用AMD的Navi 23 GPU。 该图显示,用于特斯拉系统的Navi 23拥有三星生产的2GB容量的GDDR6内存,共计4个模块,这意味着总共8GB内存。 根据图表,内存是14Gbps,并连接到一个128位内存总线。这将提供224 GB/s的最大带宽。 此外这套系统还提供 HDMI 1.4 和双 DP 接口以连接车载大屏,并提供 PC
[汽车电子]
特斯拉第三代<font color='red'>MCU</font>被曝光 ,性能媲美最新款游戏主机
单片机写串口上位机时的一点心得
开门见山地说,要注意的就是.net中无论String型还是Char型数据,字符均使用Unicode编码而非ASCII编码,而单片机通常只支持ASCII编码。这就导致在电脑与单片机串口通信过程中,出现无法被识别或被错误识别的情况。 前一阵做星火杯的时候,由于考虑到一些性能和功能上的需求,我决定用.net做上位机,具体是用vb.net。因为以前接触过VB,有点基础,所以学起来应该不回花太多时间。在编程的时候边编边学,进展速度还算可以,最关键的数据库查询和操作的部分一个晚上也就搞定了。 但最后做好后,与单片机通信时始终无法发送正确的数据,表面上看好像是数据发送的顺序不对,导致我硬件上的1286
[单片机]
单片机关键字寄存器和运算符
附录一 C51中的关键字 关键字 用 途 说 明 auto 存储种类说明 用以说明局部变量,缺省值为此 break 程序语句 退出最内层循环 case 程序语句 Switch语句中的选择项 char 数据类型说明 单字节整型数或字符型数据 const 存储类型说明 在程序执行过程中不可更改的常量值 continue 程序语句 转向下一次循环 default 程序语句 Switch语句中的失败选择项 do 程序语句 构成do..while循环结构 double 数据类型说明 双精
[单片机]
51单片机智能调光台灯电路原理图+程序设计
1.功能介绍 智能台灯可分成自动和手动两种模式。在自动模式下,台灯能根据环境光的亮暗与人是否被台灯所检测到(人是否在)来自动开启台灯。当人被微机检测到,环境光又达到某个程度的时候(可以设定与调节),台灯就会开启。如果环境光没有达到这个程度,台灯不会开启。当人没有被微机检测到,无论多暗,台灯也不会开。  手动模式是为了不习惯使用自动模式的人或是台灯中的微机出故障等紧急情况时用的。在手动模式下,智能台灯和普通台灯是一样使用的。 主要功能 : (1)亮度不够且有人靠近时台灯自动亮; (2)靠的太近会提醒坐姿不正(蜂鸣器) (3)附近无人时台灯自动熄灭(30秒) 时间可调 (4)根据环境亮度调节等亮度 (5)可手动调节台灯亮度 (6
[单片机]
51<font color='red'>单片机</font>智能调光台灯电路原理图+程序设计
基于单片机的自适应电开水机设计
  0 引言   电开水机具有清洁、高效、安装简便等特点,因此被广泛应用在学校、工厂、机关、宾馆等场所,为人们饮水提供了便利。目前市售的电开水机,通常由储水箱、加热器、进水阀等部件组成,结构简单,功能单一。使用这些电开水机可能存在两个严重的后果,一是存在阴阳水(生水与开水混合后的水),二是存在干滚水(反复烧开的水)。阴阳水的问题在大多数开水机中通过一些特殊的分离结构已经得到解决,但干滚水问题目前尚无较好的解决办法。   本电开水机采用自适应的方式,模拟人工总结用户的用水规律,合理确定烧水时间与烧水量,在非用水时间段停止加热,解决了混合水和干滚水的问题,较好的达到了健康与节能的双重效果。   1 系统概述   本文设计的
[单片机]
基于<font color='red'>单片机</font>的自适应电开水机设计
51单片机 printf函数 调试程序
主要分三个部分(1)51单片机程序部分;(2)keil工具部分;(3)为何printf输出为串口。 (1)51单片机程序部分 #include stdio.h #include reg51.h void InitUART(void)//使用定时器1作为串口波特率发生器 { TH1 = 0xF3; //晶振12mhz 波特率串口上设为2400才不显示乱码代码是4800 TL1 = TH1; TMOD |= 0x20; //定时器1方式2 SCON = 0x50; //串口接收使能 ES = 1; //串口中断使能 TR1 = 1; //定时器1使能 TI = 1; //发送中断
[单片机]
伟博创MCU体验套件之cortex M0 触摸系统板
1 前言 Cortex M0 触摸系统板是伟博创MCU体验套件中基于LPC1114微控制器的,用于评估和体验Cortex M0功能的电路板。LPC1114是精简型的Cortex系列芯片之一,它基于NXP公司的先进M0内核, 具有32K字节片上闪存以及一系列丰富的外设接口。通过ULINK2、J-LINK等调试工具,可以调试、 烧写板载的LPC1114芯片。Cortex M0 触摸系统板提供的接口和外设有UART、LED灯、蜂鸣器以及 触摸感应按键等功能。 图1 Cortex M0 触摸系统板 2 总览 2.1 M0主要特性 ●ARM Cortex-M0处理器,运行速度可达50M ●具有3级流水线的冯诺伊曼总线结构
[单片机]
伟博创<font color='red'>MCU</font>体验套件之cortex M0 触摸系统板
51单片机中变量的定义及应用方法
变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下: 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(statIC)和寄存器(register),缺省类型为自动(auto)。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。注意的是在AT89C51芯
[单片机]
51<font color='red'>单片机</font>中变量的定义及应用方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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