单片机 利用蜂鸣器演奏音乐

实验三-利用蜂鸣器演奏音乐
一、实验目的
1.了解BlueSkyC51单片机实验板中蜂鸣器的硬件电路
2.学会利用蜂鸣器实现音乐的演奏
3.掌握蜂鸣器实现音乐演奏的编程
二、实验硬件设计及电路
1. BlueSkyC51单片机实验板
工装管理系统
2.单片机最小系统
3.蜂鸣器电路连接
三极管主要是做驱动用的。因为单片机的IO口驱动能力不够让蜂鸣器发出声音,所以我们通过三极管放大驱动电流,从而可以让蜂鸣器发出声音,你要是输出高电平,三极管导通,集电极电流通过蜂鸣器让蜂鸣器发出声音,当输出低电平时,三极管截止,没有电流流过蜂鸣器,所以就不会发出声音。
三、实验酸雨采样器原理
1.音调及节拍
用一个口,输出方波,这个方波输入进蜂鸣器就会产生声音,通过控制方波的频率、时间,就能产生简单的音乐。一般说来,单片机演奏音乐基本都是单音频率,因此单片机奏乐只需控制音调和节拍。
(1)音调的确定
音调是由频率来确定的。通过单片机的定时器定时中断,将单片机上对应蜂鸣器的I/O口来回取反,从而让蜂鸣器发出不同频率的声音。只需将定时器给以不同的定时值就可实现。
通过延时,即可发出所需要的频率。
(2)节拍的确定
一拍的时长大约为400—500ms,每个音符的时长通过节拍来计算。详细见程序代码。
2.软件设计相关
(1头文件
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit beep=P1^4;  //蜂鸣器与P1.4口连接
(2)歌曲曲谱
uchar code diaodata[30]={  //音调代码
0x10,0x0e,0x0c,0x10,0x0e,0x0c,
0x10,0x0e,0x10,0x0c,0x10,0x15,
0x13,0x10,0x13,0x15,0x15,0x13,
0x15,0x13,0x10,0x0e,0x0c,0x0e,
0x0e,0x10,0x0e,0x0c,0x0e,0x00};
uchar code jiedata[30]={    //音长代码
0x04,0x04,0x08,0x06,0x02,0x08,
0x04,0x04,0x04,0x04,0x02,0x06,
0x08,0x02,0x02,0x04,0x04,0x04,
0x04,0x08,0x02,0x02,0x04,0x04,
0x02,0x02,0x04,0x04,0x0c,0x00};
(3)音阶表
太阳能光伏控制器uchar code freq[36*2]={    //音阶码表
0xf7,0xd8, //440hz , 1    //0
0xf8,0x50, //466hz , 1#  //1
0xf8,0xbc, //494hz , 2    //2
0xf9,0x26, //524hz , 2#  //3
0xf9,0x85, //554hz , 3    //4
0xf9,0xe5, //588hz , 4    //5
0xfa,0x3d, //622hz , 4#  //6
0xfa,0x92, //660hz , 5    //7
0xfa,0xdd, //698hz , 5#  //8
0xfb,0x29, //740hz , 6    //9
0xfb,0x70, //784hz , 6#  //10
0xfb,0xb0, //830hz , 7    //11
0xfb,0xef, //880hz , 1    //12
0xfc,0x29, //932hz , 1#  //13
0xfc,0x62, //988hz , 2    //14
0xfc,0x95, //1046hz, 2#  //15
0xfc,0xc7, //1108hz, 3    //16
0xfc,0xf5, //1174hz, 4    //17
0xfd,0x20, //1244hz, 4#  //18
0xfd,0x4c, //1318hz, 5    //19
0xfd,0x72, //1396hz, 5#  //20
0xfd,0x97, //1480hz, 6    //21
0xfd,0xbb, //1568hz, 6#  //22
0xfd,0xdc, //1662hz, 7    //23
0xfd,0xfb, //1769hz, `1  //24
0xfe,0x18, //1864hz, `1#  //25
0xfe,0x34, //1976hz, `2  //26
0xfe,0x4e, //2092hz, `2#  //27
0xfe,0x67, //2218hz, `3  //28
0xfe,0x7d, //2350hz, `4  //29
0xfe,0x94, //2488hz, `4#  //30
0xfe,0xa8, //2639hz, `5  //31
0xfe,0xbc, //2794hz, `5#  //32
0xfe,0xcf, //2960hz, `6  //33
推进式搅拌桨
0xfe,0xe0, //3136hz, `6#  //34
0xfe,0xf1, //3322hz, `7  //35
};
(4) 音符发生程序(中断服务程序)
void timer0() interrupt 1 //用于产生音符的T0中断服务程序
aa183{
      TH0=th0_f;
      TL0=tl0_f;
      beep=~beep;  //取反beep引脚,发声
}
三、实验过程及问题
1.Keil开发过程
(1)新建“Project”,选择单片机为“AT89C52”
(2)新建c文件“music.c添加到工程中
(3)设置生成“HEX”文件编译
(4)将生成的“HEX”文件烧录到单片机,检验
(5)不断修改完善
2.编译实验相关问题
(1)实际发音颤音重
红车轴草提取物解决方法为修改蜂鸣器的驱动频率.
(2)实际节奏过快或者过慢
    调整延时
四、C51程序代码(部分来源于网络
#include<reg51.h>
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long
sbit beep=P1^4;  //蜂鸣器与P1.4口连接
uchar th0_f; //中断装载T0高8位
uchar tl0_f; //T0低8位
uchar code freq[36*2]={    //音阶码表
0xf7,0xd8, //440hz , 1    //0
0xf8,0x50, //466hz , 1#  //1
0xf8,0xbc, //494hz , 2    //2
0xf9,0x26, //524hz , 2#  //3
0xf9,0x85, //554hz , 3    //4
0xf9,0xe5, //588hz , 4    //5
0xfa,0x3d, //622hz , 4#  //6
0xfa,0x92, //660hz , 5    //7
0xfa,0xdd, //698hz , 5#  //8
0xfb,0x29, //740hz , 6    //9
0xfb,0x70, //784hz , 6#  //10
0xfb,0xb0, //830hz , 7    //11
0xfb,0xef, //880hz , 1    //12
0xfc,0x29, //932hz , 1#  //13
0xfc,0x62, //988hz , 2    //14
0xfc,0x95, //1046hz, 2#  //15
0xfc,0xc7, //1108hz, 3    //16
0xfc,0xf5, //1174hz, 4    //17
0xfd,0x20, //1244hz, 4#  //18

本文发布于:2024-09-22 07:29:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/126069.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:蜂鸣器   单片机   频率   实验   三极管   音乐   方波
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议