![]() | | ||
返回主页 单片机教程XL2000开发板 单片机学习 自制编程器 单片机资料 软件下载 电子技术产品介绍如何购买 进入论坛 | |||
| 单片机教程第1课 教学资料 | 单片机教程第18课 算术指令 |
| 单片机教程第2课 好书推荐 | 单片机教程第19课 逻辑指令 |
| 单片机教程第3课 单片机不易掌握的概念 | 单片机教程第20课 逻辑指令 |
| 单片机教程第4课 实战一:流水灯 | 单片机教程第21课 转移指令 |
| 单片机教程第5课 实战二:唱歌 | 单片机教程第22课 位操作 |
| 单片机教程第6课 测试一 | 单片机教程第23课 计数定时器 |
| 单片机教程第7课 新教程前言 | 单片机教程第24课 计数定时器 |
| 单片机教程第8课 总体规划 | 单片机教程第25课 中断系统 |
| 单片机教程第9课 概述 | 单片机教程第26课 中断练习 |
| 单片机教程第10课 单片机结构 | 单片机教程第27课 定时计数实验2 |
| 单片机教程第11课 基本概念 | 单片机教程第28课 串行口 |
| 单片机教程第12课 延时程序分析 | 单片机教程第29课 串口实例 |
| 单片机教程第13课 延时程序分析 | 单片机教程第30课 数码管编程 |
| 单片机教程第14课 并口结构 | 单片机教程第31课 动态数码管编程 |
| 单片机教程第15课 结构分析 | 单片机教程第32课 键盘接口编程 |
| 单片机教程第16课 寻址方式 | 单片机教程第33课 键盘扫描编程 |
| 单片机教程第17课 上机练习 | 单片机教程第34课 指令介绍 平凡的单片机教程 |
单片机音乐程序的设计与实验 周振安 利用单片机(或单板机)奏乐大概是无线电爱好者感兴趣的问题之一。本文从单片机的基本发间实验出发,谈谈音乐程序的设计原理,并给出具体实例,以供参考。 1. 单片机的基本发音实验 我们知道,声音的频谱范围约在几十到几千赫兹,若能利用程序来控制单处机某个口线的“高”电平或低电平,则在该口线上就能产生一定频率的矩形波,接上喇叭就能发出一定频率的声音,若再利用延时程序控制“高”“低”电平的持续时间,就能改变输出频率,从而改变音调。 例如,要产生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,则产生相应的停顿效果。 为了产生手弹的节奏感,在某些音符(例如两个相同音符)音插入一个时间单位的频率略有不同的音符。 程序框图如图2所示。 下面给出程序序请单,可直接在TD-III型学习机上演奏,对其它不同型号的学习机,只需相应地改变一下地址即可。本程序演奏的是民歌“八月桂花遍地开”,C调,节奏为94拍/分。读者也可以自行找出一首歌,按表1和表2给定的常数,将乐曲翻译成码表输入机器,而程序不变。本实验方法简便,即使不懂音乐的人,将一首陌生的曲子翻译成代码也是易事,和着机器的演奏学唱一首歌曲,其趣味无穷。 程序清单(略,请参看源程序的说明)。
《无线电》1992年第3期。 硬件连接说明: 随便找一个仿真机或者什么单片机实验板,只要能工作的就行,将程序输入,运行,然后找个音箱(你计算机旁边应当就有一对吧)拨出插头,插头的前端接在P1。0上,后面部分找根线接单片机的地,就应当有声了,然后怎么改进硬件连接就是你的事了。。。。 |