c语言乐谱,单片机c语言一闪一闪亮晶晶的乐谱程序

用使用定时器 T0 的中断控制播放音乐 《一闪一闪亮晶晶》 1. C 音调与频率的对应关系表 音调 低 1(“dao” ) 低 2 低 3 低 4 低 5 低 6 低 7 频率 262 294 330 349 392 440 494 音调 1(中音“dao” ) 2 3 4 5 6 7 频率 523 587 659 698 784 880 988 音调 高 1 高 2 高 3 高 4 高 5 高 6 高 7 频率 1064 1175 1318 1397 1586 1760 1967 2.定时常数 C 计算公式 C= fusf460835.12 6 T0 工作方式 0.最大计数为 8192,在已知定是常数为 C 的条件下,13 位计算器 的高 8 位和低 5 的初值可由以下公式设定 TH0=(8192-C)/32; TL0=(8192-C)%32; 3.简单乐谱 |1 1 5 5| 6 6 5 -| 4 4 3 3| 2 2 1 -| 5 5 4 4 | 3 3 2 -| 5 5 4 4 |3 3 2 -| 1 1 5 5 | 6 6 5 -| 4 4 3 3|2 2 1 -| 4节拍控制 本例简谱的节拍为每分钟 72 拍,则每个节拍需时间 (1000*60ms)/72=833ms ★ “1 “为 1 拍,需延时 833ms ★ “2”为 1/2 拍,需延时 833/2ms ★ “3“为 1/4,需延时 833/4ms 5.程序 /*---------------------------------------------- 使用定时器 T0 的中断控制播放音乐《一闪一闪亮晶晶 》 ,T0 工作方式 0, 图表列出了 C 音调与频率的对应关系。* ---------------------------------------------------- */ #include sbit sound=P3^7; //定义声音为引脚 P3.7 unsigned int C; //存储定时器的定时常熟 //以下是 C 调中音的音频定义 #define dao 523 //讲“dao”宏定义为中音“ 1”的频率 523HZ #define re 587 #define mi 659 #define fa 698 #define sao 784 #define la 880 #define xi 987 /*------------------------------------------- 延时子程序 200ms -------------------------------------------*/ void delay() {unsigned char i,j; for(i=0;i200;i++) for(j=0;j110;j++); } /*--------------------------------- 主函数 ----------------------------------*/ void main() { unsigned char i,j; unsigned int code f[]={dao,dao,sao,sao, la,la,sao, fa,fa,mi,mi, re,re,dao, sao,sao,fa,fa, mi,mi,re, sao,sao,fa,fa, mi,mi,re, dao,dao,sao,sao, la,la,sao, fa,fa,mi,mi, re,re,dao, 0xff}; //以 0xff 作为音调的结束标志 //一下是简谱中的每个音调的节拍,4 对应 4 个延时单位,8 对应 8 个延时单位 unsigned char code JP[]={4,4,4,4, //每行对应一小节音频的节拍 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8, 4,4,4,4, 4,4,8 , 4,4,4,4, 4,4,8, }; EA=1; //开总中断 ET0=1; //定时器 T0 中断允许 TMOD=0x00; //使用定时器 T0 的方式 0(13 位计数器) while(1) { i=0;//从第一个音调 f[0]开始播放 while(f[i]!=0xff) //只要没有读到结束标志就继续播放 { C=460830/f[i]; TH0=(8192-C)/32; TL0=(8192-C)%32; TR0=1; for(j=0;jJP[i];j++) delay(); TR0=0; i++; } } } /*---------------------------------------- 定时器 T0 的中断服务子程序,使 P3.7 引脚输出音频的方波 ------------------------------------------------*/ void Time0(void) interrupt 1 using 1 { sound=!sound; TH0=(8192-C)/32; TL0=(8192-C)%32; }

展开阅读全文

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值