利用单片机控制自动演奏乐曲的程序
通过控制定时器来产生不同的方波。驱动便发出不同音节的声音,再利用延迟来控制发音时间的长短,即可控制节拍。把乐谱中的音符和节拍做成表格存放,由程序查表得到再分别控制定时器和方波的持续时间,当延时结束,再查下一个音符和节拍。依次就可自动演奏乐曲。
我们用定时器O方式1来产生方波,由P1.0输出驱动扬声器。节拍的控制通过调用200微秒延时子程序的次数来实现。一拍调用两次,半拍就是一次。列出列出音符和定时常数对应表:
音符 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
频率 | 523 | 587 | 659 | 698 | 784 | 880 | 988 |
TO值 | 64580 | 64684 | 64777 | 64820 | 64898 | 64968 | 65030 |
这里我们还要用到查表指令:MOVCA,@A+DPTR它是把表格的首地址存入DPTR,作为基本地址寄存器,把表格的项数(即所查表格元素在表格中的位置)送到累加器A中,两者相加所得的16位数作为程序的地址,取出该地址所对应单元的内容送到累加器A中。
程序的开始还和以前一样。
主程序开始先做初始化设置。
下来就该着查表找音符,确定定时器初值。
接着控制定时器工作,控制小车动作。
然后调用延时子程序。
最后按照简谱把定时值、节拍数和小车动作编成表格,比如《新年好》。
- 上一篇:集成运放的内部结构
- 下一篇:单片机定时计数器的四种工作方式的区别