作为单片机的重要硬件资源之一,利用定时器可以产生各种固定频率的方波信号,也可以产生包括"do"、"re"、"me"--等音阶在内的各种频率声音。将各个音阶连接在一起,便可组成一支曲子或是演奏一段旋律。基于这个思想,笔者设计了一款特殊的"音乐播放器",其核心器件采用at89c2051单片机。本播放器具有电路简单,功能强大等特点,极为适合初学者仿制。
一、功能特色
本播放器可实现循环播放、上一曲、下一曲、复位等功能。为了体现乐曲播放过程中的动态效果,在p1口增加了8只led,作随机闪烁以指示旋律的节奏。
二、硬件设计
电路以at89c2051为主控制器,s1为复位键,s2、s3分别为上一曲、下一曲选择键。晶振采用12mhz,音乐信号由p3.7口输出,经9012放大后推动喇叭发声(电路图见附图)。
三、软件设计
程序中根音选取的是c调三个8度内的音符,共21个音。每个音符对应频率由定时器t0产生(音符频率及对应计数初值见附表)。为了程序调用方便,每个音符都对应一个编码,占用一个字节。在程序中以查表的方式加载计数初值。当值为00h时表示空拍,与节拍码配合完成节拍发音。节拍码也占一个字节,其总时间长度等于基本时间乘以节拍码的值。节拍码值为01h时,表示当前乐曲结束,为00h时,表示全部乐曲结束。为了编码简单,一般节拍码高半字节表示整拍,低半字节表示分数,只要基本延时设定恰当即可,为了及时响应键盘操作,键扫描指令安排在基本延时时间子程序中。按键每按下一次,乐曲数目计数器r5加"1"或减"1",然后根据r5的内容转向不同的乐曲。
本程序包含4首乐曲。若要增加更多的乐曲,在存储空间许可的情况下(可直接换用4k的at89c4051),只要参照所附的编码表将简谱转化为相应的代码附着在乐曲数据表中即可。