由于同学的需要,于是用51单片机的蜂鸣器功能谱了一首《我和我的祖国》,下面是全部的代码:

#include <reg52.h>
sbit beep = P1^5;
unsigned char timer0H, timer0L, time;//单片机晶振采用11.0592MHz
// 频率-半周期数据表 高八位     本软件共保存了四个八度的28个频率数据
code unsigned char FREQH[] = {0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音12345670xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 2345670xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567
// 频率-半周期数据表 低八位
code unsigned char FREQL[] = {0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音12345670x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 2345670x47, 0x77, 0xA2, 0xB6, 0xDA, 0xFA, 0x16};   //超高音 1234567
//数据表
code unsigned char song[] = {
5, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 6, 5, 1, 6, //我和我的祖国
1, 2, 2, 3, 2, 2, 1, 3, 2, 7, 2, 2, 6, 2, 3, 3, 2, 1, 5, 2, 12,         //一刻也不能分割
6, 2, 2, 7, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 6, 6, 1, 6, //无论我走到哪里
7, 1, 2, 6, 1, 2, 5, 1, 2, 5, 2, 2, 1, 2, 3, 2, 2, 1, 3, 2, 12,         //都唱出一首赞歌
5, 2, 2, 6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 2, 1, 2, 6, 5, 1, 6, //我歌唱每一座高山
1, 2, 2, 3, 2, 2, 1, 3, 2, 7, 2, 2, 2, 3, 3, 1, 3, 1, 6, 2, 12,         //我歌唱每一条河
1, 3, 2, 7, 2, 2, 6, 2, 2, 5, 2, 6,                                     //袅袅炊烟
6, 2, 2, 5, 2, 2, 4, 2, 2, 3, 2, 6,                                     //小小村落
7, 1, 4, 6, 1, 2, 5, 1, 4, 2, 2, 2, 1, 2, 12,                           //路上一道辙
8, 2, 2, 2, 3, 2, 3, 3, 2, 2, 3, 2, 8, 2, 2, 6, 2, 2, 7, 2, 2, 6, 2, 3, 3, 2, 1, 5, 2, 12,//我最亲爱的祖国
8, 2, 2, 2, 3, 2, 3, 3, 2, 2, 3, 2, 8, 2, 2, 6, 2, 2, 7, 2, 2, 5, 2, 3, 3, 2, 1, 6, 2, 12,//我永远紧依着你的心窝
5, 2, 2, 4, 2, 2, 3, 2, 2, 2, 2, 6, 7, 1, 2, 6, 1, 2, 5, 1, 2, 3, 2, 6,4, 2, 6, 2, 2, 4, 1, 2, 2,1, 2, 10,//你用你那母亲的脉搏和我诉说
};
//一个音符有三个数字。前为第几个音、中为第几个八度、后为时长(以半拍为单位)。
//6, 2, 3 分别代表:6, 中音, 3个半拍;
//5, 2, 1 分别代表:5, 中音, 1个半拍;void t0int() interrupt 1         //T0中断程序,控制发音的音调
{TR0 = 0;                     //先关闭T0beep = !beep;          //输出方波, 发音TH0 = timer0H;               //下次的中断时间, 这个时间, 控制音调高低TL0 = timer0L;TR0 = 1;                     //启动T0
}void delay(unsigned char t)     //延时程序,控制发音的时间长度
{unsigned char t1;unsigned long t2;for(t1 = 0; t1 < t; t1++)    //双重循环, 共延时t个半拍for(t2 = 0; t2 < 4000; t2++); //延时期间, 可进入T0中断去发音TR0 = 0;                        //关闭T0, 停止发音
}void sing()                      //演奏一个音符
{TH0 = timer0H;               //控制音调TL0 = timer0L;TR0 = 1;                     //启动T0, 由T0输出方波去发音delay(time);                 //控制时间长度
}void main(void)
{unsigned char k, i;TMOD = 1;                    //置T0定时工作方式1ET0 = 1;                     //开T0中断EA = 1;                      //开总中断while(1) {i = 0;time = 1; while(time) {k = song[i] + 7 * song[i + 1] - 1;//第i个是音符, 第i+1个是第几个八度timer0H = FREQH[k];      //从数据表中读出频率数值timer0L = FREQL[k];      //实际上, 是定时的时间长度time = song[i + 2];   //读出时间长度数值i += 3;sing();                  //发出一个音符}  }
}

根据下面这张简谱制作的

51单片机蜂鸣器演奏《我和我的祖国》相关推荐

  1. 用计算机弹我和我的祖国,51单片机蜂鸣器演奏《我和我的祖国》

    由于同学的需要,于是用51单片机的蜂鸣器功能谱了一首<我和我的祖国>,下面是全部的代码: #include sbit beep = P1^5; unsigned char timer0H, ...

  2. 51单片机蜂鸣器演奏《小苹果》C语言程序,51单片机C语言蜂鸣器发声生日快乐播放程序...

    <51单片机C语言蜂鸣器发声生日快乐播放程序>由会员分享,可在线阅读,更多相关<51单片机C语言蜂鸣器发声生日快乐播放程序(4页珍藏版)>请在人人文库网上搜索. 1.按键发音/ ...

  3. 51单片机蜂鸣器演奏《小苹果》C语言程序,单片机控制蜂鸣器演奏音阶实例

    单片机可以控制蜂鸣器发声音 蜂鸣器是非常常见的发音元器,音乐卡.报警装置.电子琴.各种小家电等都会用到.单片机的PWM功能可以设置输出不同频率的信号,所以我们可以利用单片机的PWM控制三极管的通断来推 ...

  4. 51单片机蜂鸣器播放天空之城

    51单片机蜂鸣器播放天空之城 附:天空之城乐谱 第三张图片中65行46968改为64968,希望凉解.(由于本人对乐谱知之甚少,上述有关音符代码由网络提供.如有错误,敬请雅正.)

  5. 51单片机 | 蜂鸣器实验

    文章目录 一. 蜂鸣器介绍 二.硬件设计 三.软件设计 四.实验现象   通过单片机的一个 IO 口控制 板载无源蜂鸣器,实现蜂鸣器控制. 一. 蜂鸣器介绍   蜂鸣器是一种一体化结构的电子讯响器,采 ...

  6. 51单片机——蜂鸣器的使用

    1. 蜂鸣器种类 蜂鸣器分为有源蜂鸣器和无源蜂鸣器: 判断有源蜂鸣器和无源蜂鸣器可用万用表电阻档Rxl档测试:用黑表笔接蜂鸣器"+"引脚,红表笔在另一引脚上来回触碰,如果触发出咔咔 ...

  7. 51 单片机 蜂鸣器

    普中51单片机中的蜂鸣器 sbit与define的区别 sbit 是定义 位 ,就是说只能 用于 位, 编译器 会检测的. define 就是简单的 文字替换,用途广 无源蜂鸣器与有源蜂鸣器 (普中5 ...

  8. 51单片机蜂鸣器的使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.有源蜂鸣器和无源蜂鸣器的区别 二.代码编写 总结 前言 本文旨在介绍如何使用51单片机驱动蜂鸣器. 一.有源蜂鸣器 ...

  9. 利用51单片机蜂鸣器播放《只因你太美》代码

    使用以下代码在51单片机上控制蜂鸣器播放"只因你太美"的音乐: #include <reg51.h> #include <intrins.h>#define ...

  10. (3)单片机演奏我和我的祖国

    #include <reg52.h> sbit beep = P1^5; unsigned char timer0H, timer0L, time;//单片机晶振采用11.0592MHz ...

最新文章

  1. 为什么要预留字段_「镜前灯电线预留位置」为什么要安装镜前灯 镜前灯电线预留位置...
  2. 传统jdbc存在的问题总结
  3. idea 设置识别ini文件
  4. AngularJs详细
  5. CF98E Help Shrek and Donkey(纳什博弈 + 大讨论)
  6. java 调用scala 类_如何使用java类加载器调用带参数的scala函数?
  7. Advanced C++ --- const function
  8. Qt笔记-Q3DScatter中元素的移动和旋转
  9. 大工18春计算机文化基础在线测试1,大工18春《计算机文化基础》在线测试1(满分答案)...
  10. PGA自动管理原理深入分析及性能调整
  11. linux grub内核选择,UBUNTU GRUB没有内核选项,怎么回事啊?
  12. 使用linux内核,打造自己的linux
  13. espcms简约版的表单,提示页,搜索列表页
  14. linux python3命令_linux安装python3
  15. DBC2000数据库,DBC2000怎么设置?DBC2000架设传奇教程
  16. Win10--YOLOX训练和测试VOC格式数据
  17. protocol buffer生成C语言的实现
  18. 凯撒密码/自定义移位加密
  19. ps4jump大乱斗服务器维护,Jump大乱斗新人实用技巧分享 新手注意事项介绍
  20. 红米K30 Pro再次降价700元,小米加速收割5G手机市场

热门文章

  1. hget hmget redis api使用
  2. h3 经典地图 第2辑(RPG)
  3. Linux如何恢复初始PS1,ps界面怎么恢复默认设置
  4. 80端口被封 php跳转,80端口打不开网站问题
  5. 第1期:手把手教你制作网易邮箱注册页面
  6. while在Java用法_while和do-while的使用方法
  7. python投资组合有效边界,【python量化】如何用Python找到投资时的最佳组合比例
  8. swift混编调用oc编写的Xib UIView出现[Storyboard] Unknown class in Interface Builder file.问题的解决
  9. 学习Python,你都遇到了哪些坑?
  10. 墨刀原型图设计大全(转)