- #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;
- }
- }
- }
- }
复制代码
keil代码下载:
热爱105度的你.zip
(606.83 KB, 下载次数: 29)
|