由于同学的需要,于是用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. 每个网站SEO优化人员都要熟知的三大图片优化技巧
  2. 笔记:django is not a registered namespace错误
  3. 【Word】如何把代码优美的插入word
  4. Github霸榜月余,原来是阿里技术官的千亿级并发系统设计手册上线了
  5. 岁月在变迁,彼此在成长。而我在流浪
  6. java字符串常量存哪里_浅谈JAVA中字符串常量的储存位置
  7. java项目_值得学习和练手的Java企业级开源项目,强烈推荐!
  8. socket编程(六)
  9. SQL Server 连接查询(多表连接查询)
  10. POJ 3084 Panic Room (最小割建模)
  11. python自动登录百度_Python实现自动登录百度空间的方法
  12. Visual Leak Detector(vld)无法显示内存泄露文件名称与行号
  13. 老显卡都涨价了,所以我把坏的显卡拿出来修
  14. selenium滑块操作(基础)
  15. 462计算机连接错误,金蝶K3始终462错误,怎么处理???????
  16. Fluent残差图中continuity不收敛如何处理
  17. 图像处理-1 带色彩恢复的多尺度视网膜增强算法
  18. 关于想写我与Java的故事,满脑子却都是与JavaCV纠缠不清的那段日子
  19. matlab中怎么贮存函数,MATLAB参数保存、调用
  20. 吴恩达视频-第一门课第2周2.7、2.8节-计算图与使用计算图求导数

热门文章

  1. Vasp 石墨烯能带计算
  2. moment.js时间格式转换
  3. 【递推】wikioi 2825 危险的组合
  4. 思科无线服务器,Cisco统一无线网络TACACS+配置
  5. ~0 为什么等于 -1 ,在C语言中?
  6. python 画图 线标注_Python中画图时候的线类型
  7. Unti12. linux中的软件的管理
  8. 个人创建微信公众号步骤
  9. 【原型图设计工具】墨刀使用说明
  10. HTML5 webSQL动态查询应用截图