标题:
byd单片机+蜂鸣器播放热爱105度的你 源程序
[打印本页]
作者:
cokesu
时间:
2021-7-9 16:02
标题:
byd单片机+蜂鸣器播放热爱105度的你 源程序
#include "music.h"
unsigned int code Freq[3][8] = {
// 0 1 2 3 4 5 6 7
{63627,63627,63835,64020,64103,64260,64399,64523},
{64579,64579,64684,64777,64819,64898,64967,65029},
{65058,65058,65110,65156,65160,65217,65251,65281},
}; //用于发出do re mi声音的频率第一阶为低音 第二阶为中音 第二阶为高音 元素0凑数而已为了1为do 2为re
unsigned char code GePu[114] = {
13,13,14,13,12,13,
6,12,11,6,11,
12,12,12,13,12,11,12,
13,11,6,11,11,
6,13,13,14,13,12,11,
13,13,6,6,11,
11,7,7,13,12,
11,
5,
15,13,12,11,12,13,11,
12,5,6,5,4,5,
13,13,12,13,5,
5,5,
15,12,12,11,12,13,11,
12,5,6,5,4,5,
13,13,12,13,21,
17,15,6,7,
11,11,7,11,12,
12,12,11,12,7,
11,11,7,11,5,
6,6,7,
11,11,7,11,12,
12,12,12,11,12,7,
11,
}; //歌谱 1代表低音do 11代表中音do 21代表高音do
unsigned char code Time[114] = {
1,1,1,1,1,1,
2,1,1,2,2,
2,1,1,1,1,1,1,
2,1,1,2,2,
2,1,1,1,1,1,1,
2,1,2,1,1,
2,1,1,2,2,
8,
1,
2,1,1,1,1,1,1,
4,1,1,1,1,1,
2,1,1,2,2,
4,1,
2,1,1,1,1,1,1,
2,1,1,1,1,1,
2,1,1,2,2,
2,2,2,2,
2,1,1,2,2,
2,1,1,2,2,
2,1,1,2,2,
4,1,1,
2,1,1,1,2,
1,1,1,1,2,2,
8,
}; //节拍数1代表1/2拍 2代表1拍 4代表2拍 8代表4拍
bit gBuzFlag = 0;
void OutCtrl()
{
if(gBuzFlag) //标志位置1响蜂鸣器
{
DATAB ^= 0x01;
}
else
{
DATAB &= ~0x01;
}
}
unsigned char gRunCount = 0; //乐谱跑到第几个音
unsigned char gSystemMode = 0; //系统模式 0赋值模式 1响蜂鸣器 2停止
unsigned char gOpenTime = 0; //开的时间
unsigned char gCloseTime = 0; //关的时间
void TimeCtrl()
{
if(gSystemMode == 0) //赋值
{
TH0_Reload = (unsigned char)(Freq[GePu[gRunCount] / 10][GePu[gRunCount] % 10] >> 8); //给16位定时器赋值
TL0_Reload = (unsigned char)(Freq[GePu[gRunCount] / 10][GePu[gRunCount] % 10] & 0x00ff); //给16位定时器赋值
gOpenTime = Time[gRunCount]*10; //响的时间Time[gRunCount]*10*125*100 us
gCloseTime = Time[gRunCount]*10; //停止等待的时间
gSystemMode = 1; //跳转到响
gBuzFlag = 0; //蜂鸣器关闭
}
if(gSystemMode == 1) //响
{
if(gOpenTime > 0) //响的时间大于0
{
gBuzFlag = 1; //响
gOpenTime--; //时间--
}
else
{
gBuzFlag = 0; //关闭
gSystemMode = 2; //跳转到等待
}
}
if(gSystemMode == 2) //停止
{
if(gCloseTime > 0) //停的时间大于0
{
gBuzFlag = 0;
gCloseTime--;
}
else
{
gBuzFlag = 0;
gSystemMode = 0; //跳转到赋值
gRunCount++; //乐谱第几个音++
if(gRunCount >= 114) //跑完整个乐谱从头开始跑
{
gRunCount = 0;
}
}
}
}
复制代码
51hei.png
(46.97 KB, 下载次数: 48)
下载附件
2021-7-9 17:51 上传
keil代码下载:
热爱105度的你.zip
(606.83 KB, 下载次数: 29)
2021-7-9 16:02 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1