• 大小: 4KB
    文件类型: .c
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: 其他
  • 标签: C51  

资源简介

C51蜂鸣器播放两只老虎和小星星代码,怎么根据谱子打表呢。。。自己摸索吧

资源截图

代码片段和文件信息

#include 
sbit BUZZ = P1^5; //蜂鸣器控制引脚
unsigned int code NoteFrequ[] = { //中音 1-7 和高音 1-7 对应频率列表
 523 587 659 698 784 880 988 //中音 1-7
 1047 1175 1319 1397 1568 1760 1976 //高音 1-7
};
unsigned int code NoteReload[] = { //中音 1-7 和高音 1-7 对应的定时器重载值
 65536 - (11059200/12) / (523*2) //中音 1
 65536 - (11059200/12) / (587*2) //2
 65536 - (11059200/12) / (659*2)  //3
 65536 - (11059200/12) / (698*2) //4
 65536 - (11059200/12) / (784*2) //5
 65536 - (11059200/12) / (880*2) //6
 65536 - (11059200/12) / (988*2) //7
 65536 - (11059200/12) / (1047*2) //高音 1
 65536 - (11059200/12) / (1175*2) //2
 65536 - (11059200/12) / (1319*2) //3
 65536 - (11059200/12) / (1397*2) //4
 65536 - (11059200/12) / (1568*2) //5
 65536 - (11059200/12) / (1760*2) //6
 65536 - (11059200/12) / (1976*2) //7
};

bit enable = 1; //蜂鸣器发声使能标志

bit tmrflag = 0; //定时器中断完成标志

unsigned char T0RH = 0xFF; //T0 重载值的高字节
unsigned char T0RL = 0x00; //T0 重载值的低字节
void PlayTwoTiger();

void main()
{
 unsigned int i;
 
 EA = 1; //使能全局中断
 TMOD = 0x01; //配置 T0 工作在模式 1
 TH0 = T0RH;
 TL0 = T0RL;
 ET0 = 1; //使能 T0 中断
 TR0 = 1; //启动 T0
 
 while (1)
 {
 PlayTwoTiger(); //播放乐曲--两支老虎
 for (i=0; i<40000; i++); //停止一段时间
 }
}

 /*两支老虎乐曲播放函数*/
void PlayTwoTiger()
{
 unsigned char beat; //当前节拍索引
 unsigned char note; //当前节拍对应的音符
 unsigned int time = 0; //当前节拍计时
 unsigned int beatTime = 0; //当前节拍总时间
 unsigned int soundTime = 0; //当前节拍需发声时间
/* //两只老虎音符表
 unsigned char code TwoTigerNote[] = {
 1 2 3 1 1 2 3 1 3 4 5 3 4 5
 56 54 3

评论

共有 条评论