单片机课程设计(论文)_电子音调发生器
电子音调发生器
姓 名 XXX
所在学院 电子信息工程学院
专业班级 通信XXXX
学 号 XXXXX
指导教师 XXXXXX
日 期 2011 年 12月 12日
电子音调发生器
一、实验目的 :
了解计算机发声原理。
熟悉定时器和键盘扫描电路的工作原理及编程方法。
二、实验内容和要求:
利用所焊电路板上的开关k0-k7和蜂鸣器设计电子音调发生器,要求:
1.利用所焊电路板上开关k0-k7进行音调选择,即拨动依次拨动K~K7,发出1234567i。
三、实验原理:
音节由不同频率的方波产生,音节与频率的关系如表1所示。要产生音频方波,只要算出某一音频的周期(1/频率),然后将此周期除以2,即为半周期的时间。利用计时器计时此半周期时间,每当计时到后就将输出方波的I/0反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。在单片机STC89C51RC上,产生方波的I/O脚选用P1.2,通过跳线JP1将单片机的P1.2与蜂鸣器的驱动电路相连
每个音节相应的定时器初值X可按下法计算:
(1/2)*(1/f)=(12/fose)*(216-x)
即 x=216-(fose/24f)
其中f:音调频率,当晶振fose=11.0592MHz时,音节“1”相应的定时器初值为x,则可得x=63777D=F921H 其它的可同样求得。
表1:
音符频率(HZ)计数初值(H)低音5196F6D1低音6220F7D1低音7247F8B6中音1262F921中音2294F9E1中音3330FA8C中音4349FAD8中音5392FB68中音6440FBE9高音7494FC5B高音1523FC8F高音2587FCEF高音3659FD45高音4698FD6C高音5784FDB4利用计时器计时此半周期时间,每当计时到后就将输出方波的I/O反相,然后重复计时此半周期时间再对I/O反相,就可在I/O脚得到此频率的方波。
音乐程序查表原理:
乐谱格式:每字节的高字节为音符代码,低字节为节拍代码????
音调高低 1 2 3
音高 低 中 高
节拍代码 1 2 3 4 5 6 8
节拍 1/1 1 3/2 1 1(1/2) 2 2(1/2)
四、试验设计:
总体来说,本实验分为两大部分:由开关控制的音阶播放程序;由单片机控制的自动音阶播放程序(音乐程序)。这个实验使用了8个按键对应8个1234567i音节,在使用两个按键来做不同歌曲的切换播放。
实验箱硬件连接如图所示:
图1 键盘、蜂鸣器连接电路
图2 按键复位电路 图3 晶振电路
实验总体流程图如下图所示:
图4 实验流程图
流程图描述:如图上图所示,程序开始时先判断P1.6,P1.7口的电位,若为0则转到音乐播放程序播放音乐;若为1,则进行键盘扫描、消抖,通过查表判断哪个键按下,通过P1.2输出不同频率的方波,驱动蜂鸣器发音。
五、实验程序:
#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义
sbit speaker=P1^2; //定义音乐输出端口,需要连接到对应的喇叭,请参考电路图
sbit P1_2=P1^2;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
sbit P1_4=P1^4;
sbit P1_0=P1^0;
unsigned char timer0h,timer0l,time,num,high;
//音调,高低音,拍长(半拍为1)
//菊花台
code unsigned char sszymmh1[]={ 3,1,2, 3,1,1, 2,1,1, 3,1,4, 3,1,1, 5,1,1, 3,1,1,
2,1,1, 3,1,4, 1,1,2, 1,1,1, 2,1,1, 3,1,1, 5,1,1,
3,1,2, 2,1,2, 2,1,1, 1,1,1, 2,1,4, 3,1,3, 5,1,1,
3,