单片机课程设计
单片机课程设计
实
验
报
告
电子音调发生器
一、实验目的
1、在开发板上利用16按键的键盘和蜂鸣器设计电子音调发生器,要求:由P1.7输出不
同频率的脉冲信号驱动蜂鸣器发出不同频率的音调,利用键盘来选择不同的音调,即拨动
不同的开关产生不同的音调,。
2、编写几支歌曲,并可以进行选择播放。
二、实验原理
1、音节的产生
音节由不同频率的方波产生,音节与频率的关系如下表所示。要产生音频方波,只要
算出某一音频的周期(1/频率),然后将此周期除以 2,即为半周期的时间。利用计时器计
时此半周期时间,每当计时到后就将输出方波的 I/O 反相,然后重复计时此半周期时间再
对 I/O 反相,就可在 I/O 脚得到此频率的方波。另外,音乐的节拍是由延时实现的,如果
1 拍为 0.4 秒,1/4 拍是 0.1 秒。只要设定延时时间,就可求得节拍的时间,延时实现基本
延时时间,节拍值只能是它的整数倍。
音节与频率的关系
低音节
音调
频率(Hz)
x
音调
频率(Hz)
x
1
262
F921
5
392
FB68
2
294
F9E1
6
440
FBE9
3
330
FA8C
7
494
FC5B
4
349
FAD8
8
523
FC8F
中音节
音调
频率(Hz)
x
音调
频率(Hz)
x
1
523
FC8F
5
784
FDB4
2
587
FCEF
6
880
FDF4
3
659
FD45
7
4
698
FD6C
8
每个音节相应的定时器初值 x 可按下法计算。
16
1 1 12
( ) ( ) ( ) (2 )
2
x
f fosc
´ = ´ -
即:
16
2 ( )
24
fosc
x
f
= -
其中,f 是音调频率,晶振 fosc=11.0592Mhz。
2、定时器的使用
首先对定时器进行初始化
设置 TMOD(工作方式)寄存器
GATA
C/T
M1
M0
GATA
C/T
M1
M0
定时器 1 定时器 0
GATE:门控位。
GATE=0,TR=1 启动计数(软件启动);
GATE=1,TR=1 且 INT=1 启动计数(硬件启动)。
C/T: 定时或计数方式选择位。
C/T=0,定时工作方式;C/T=1,计数工作方式。
M1M0:工作方式选择位。
M1M0=00,方式 0:13 位计数(TL0-4、TH0-7)
M1M0=01,方式 1:16 位计数(TL0-7、TH0-7)
M1M0=10,方式 2:8 位计数,有自动装入功能。
M1M0=11,方式 3:T0 分为两个 8 位计数器,TL0 可工作为定时或计数方式,TH0
只能工作为定时方式。
设置 TCON(控制)寄存器:
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
TR0/TR1:启动计数。为 1 启动计数;为 0 停止计数。
TF0/TF1:计数溢出。当加”1”计数结束时为 1。
本实验采用定时器 T0,工作在方式 1 (16 位计数),无自动装入功能。
3、蜂鸣器电路
蜂鸣器有交流和直流两种。直流蜂鸣器驱动简单,一旦在引脚上加入直流电源它就会
发出一定频率的声音,此时声音的音调和音量是固定的;而交流蜂鸣器在这方面则显得较
灵活,输入声音信号的频率和音长是可控的,因此输出的声响将更逼真、更悦耳。本实验
仪有一个交流蜂鸣器,由于一般 I/O 口的驱动能力有限,因此不用它直接驱动蜂鸣器,它
与 P87C52X2 的连接方式如下图所示。Buzzer 通过一个跳线与 P1.7 相连,P1.7 输出不同频
率的方波信号,蜂鸣器就会发出不同的声音。如果控制输出信号的频率和音长,蜂鸣器则
会发出悦耳的音乐。
三、实验流程和源程序
1、实验流程
2、源程序
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit BEEP=P2^4;
sbit K1= P3^2;
uchar keyscan(uchar key);//键盘输入函数
void delay(uint t);//延时函数
void scan(uint i);//扫描显示函数
void bi(ulong t);
uchar
table[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x
8E};
uchar th0_f; //在中断中装载的 T0 的值高 8 位
uchar tl0_f; //在中断中装载的 T0 的值低 8 位
/******T0 的值,及输出频率对照表******/
uchar code freq[36*2]=
{
0xA9,0xEF,//00220HZ ,1 //0