历史上的今天
返回首页

历史上的今天

今天是:2025年03月17日(星期一)

正在发生

2020年03月17日 | 51单片机蜂鸣器演奏《我和我的祖国》

2020-03-17 来源:eefocus

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


#include

sbit beep = P1^5;

unsigned char timer0H, timer0L, time;


//单片机晶振采用11.0592MHz

// 频率-半周期数据表 高八位     本软件共保存了四个八度的28个频率数据

code unsigned char FREQH[] = {

    0xF2, 0xF3, 0xF5, 0xF5, 0xF6, 0xF7, 0xF8,    //低音1234567

    0xF9, 0xF9, 0xFA, 0xFA, 0xFB, 0xFB, 0xFC, 0xFC,//1,2,3,4,5,6,7,i

    0xFC, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE,            //高音 234567

    0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFF};   //超高音 1234567

// 频率-半周期数据表 低八位

code unsigned char FREQL[] = {

    0x42, 0xC1, 0x17, 0xB6, 0xD0, 0xD1, 0xB6,    //低音1234567

    0x21, 0xE1, 0x8C, 0xD8, 0x68, 0xE9, 0x5B, 0x8F, //1,2,3,4,5,6,7,i

    0xEE, 0x44, 0x6B, 0xB4, 0xF4, 0x2D,             //高音 234567

    0x47, 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;                     //先关闭T0

    beep = !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定时工作方式1

    ET0 = 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();                  //发出一个音符

  }  

    }  

}


根据下面这张简谱制作的

在这里插入图片描述

推荐阅读

史海拾趣

Aeroflex公司的发展小趣事

Aeroflex是一家提供高性能测试和测量解决方案的公司,在航空航天、国防、通信和工业等领域拥有广泛的应用。以下是Aeroflex公司发展的五个相关故事:

  1. 公司成立和早期发展: Aeroflex公司成立于1973年,最初是一家由David King在新泽西州创建的小型创业公司,专注于为航空航天和国防行业提供测试和测量设备。随着公司在测试领域的技术积累和市场认可,其业务逐渐扩大,开始在全球范围内提供解决方案。

  2. 技术创新和产品发展: Aeroflex致力于技术创新,不断推出符合行业标准和客户需求的新产品。公司在射频和微波测试领域取得了突破,推出了一系列高性能测试仪器和系统,包括信号发生器、频谱分析仪和网络分析仪等,为客户提供全面的测试解决方案。

  3. 全球扩张和市场拓展: 随着市场需求的增长和业务规模的扩大,Aeroflex逐步在全球范围内建立了广泛的销售和服务网络。公司在美国、欧洲、亚洲和其他地区设立了多个分支机构和办事处,以加强对客户的支持和服务,并拓展新的市场领域。

  4. 公司并购和战略合作: 为加速业务增长和拓展技术能力,Aeroflex通过并购和战略合作不断扩大业务范围。公司先后收购了多家具有先进技术和市场地位的企业,加强了在航空航天、国防和通信等领域的竞争实力。

  5. 成为关键行业供应商: 长期以来,Aeroflex凭借卓越的技术和服务,成为航空航天、国防、通信和工业等关键行业的重要供应商之一。公司在测试和测量领域的领先地位得到了进一步巩固,为客户提供了高品质、可靠的产品和解决方案,赢得了良好的声誉和市场口碑。

Bkc Semiconductors Inc公司的发展小趣事

随着技术的成熟和产品的不断完善,Bkc开始积极拓展市场。公司不仅加强了与国内外知名电子厂商的合作,还积极参与国际半导体展会和技术交流,不断提升品牌知名度。同时,Bkc还通过战略投资和并购等方式,进一步扩大了自身的业务规模和市场份额。

Device Engineering Incorporated公司的发展小趣事

DEI公司最初由一群热衷于电子技术的工程师创立。在创立初期,公司面临着资金短缺和技术难度大的挑战。然而,他们凭借对技术的执着追求和对市场的敏锐洞察,成功研发出了第一款高性能的电子设备。这款产品凭借其卓越的性能和合理的价格,迅速在市场上获得了认可,为DEI公司赢得了第一桶金。

Avic公司的发展小趣事

Avic公司注重提升自主创新能力,不断加大在航空电子技术领域的研发投入。公司建立了一支高素质的研发团队,并积极引进国内外先进的研发设备和技术。这些措施有效提升了公司的创新能力,为公司在航空电子领域的持续发展提供了有力保障。

Eska公司的发展小趣事

Eska公司成立于荷兰北部,自创立之初就专注于造纸业务。公司引进了先进的造纸技术和设备,建立了两座灰板纸厂,配备了3台技术领先的纸板机和2台造纸机。凭借高效的生产能力和优质的产品质量,Eska迅速在造纸行业中崭露头角。Eska的灰板纸以“Eska(青蛙)”品牌销售,因其优良且稳定的质量而享誉全球。

Advanced Milliwave Laboratories Inc公司的发展小趣事

AML深知技术创新是企业发展的核心动力。因此,公司始终坚持自主研发和技术创新,不断推出新的微波产品和技术。这些新产品不仅具有更高的性能和更广泛的应用范围,还进一步提升了AML在微波技术领域的竞争力。同时,AML还注重与高校和研究机构的合作,共同开展技术研发和人才培养,为公司的长远发展提供了有力支持。

问答坊 | AI 解惑

8051模拟i2c 双机通信

有谁做过8051模拟i2c 双机通信的啊,从机地址怎么确定啊!…

查看全部问答>

红外温度传感器的原理

现在,人们对自己的身体健康状况十分关注.都希望自己有一个好的身体。体温是人体的重要生理参数之一,对它的监测十分重要。市场上最流行的体温计是电子体温计,特别是非接触式红外体温计。目前国内开发的红外体温计主要有华中科技大学研制的“慧眼 ...…

查看全部问答>

ARM9线程冲突

    用arm9编写的两个线程,分别从串口和网口收数据。前者始终运行,后者每1.5秒运行一次。现在后者运行时前者不仅收不到数据,连时钟也发不出来。优先级都设置好的,奇了怪了,百思不得其解。盼望过路大侠指点迷津,谢谢!…

查看全部问答>

请教在arm7中怎样将数据存入flash中并读取

希望实现以下功能: 开机时,读取flash中的数据num,初始化程序 运行时,num的值会发生变化 运行结束时,将num的值存入flash中,共下次开机时使用 请教怎样才能将num的值存入flash中,并且可以读取 我使用的是周立功的easyram2131开发板, ...…

查看全部问答>

求助5402程序大于0x4000时装载出错问题

我的板子上外扩了一片sdram,如果代码少于0x4000时装载正常,大于就会报data verification at address 0x41dc,please verify targe memory and memory map. 我的cmd文件如下: -stack  1024 -heap   2048 /*************** ...…

查看全部问答>

关于lm3s系列 串口接收数据的问题

假如我串口接收FIFO设置为7/8的深度 并设置接收FIFO中断 和 接收超时中断   当我的串口接受的数据长度正好为14的整数倍时,就不会进入超时中断,请问有什么好的解决方法吗?…

查看全部问答>

UC3843的电源问题

求助,希望做开关电源的高手能够帮帮我,谢谢,帮我把UC3843的那些电容取值帮我算出来,比如C3,C4,C6,C11,C12!我自己弄出来的要么不起振,要么空载的功耗就有好几瓦,这开关电源的东西还真难整啊!谢谢各位大侠!…

查看全部问答>

【讨论】引脚中断须外置上拉/下拉电路?

配置引脚中断时,不能是数字输出模式,否则中断配置不成功。若想使用引脚内部上拉/下拉时,需配置为数字输出模式,否则上拉/下拉配置不成功。结论:引脚中断须外置上拉/下拉电路?…

查看全部问答>

【求助】MDK422下载出错 久查未决

求教,有没有人遇到类似问题或解决方法~~~~~~~~~~~~~~~~~~~~~~~~~~~ 【问题】:编辑、编译正确,但下载出问题,     【解决1:】MDK422设置正常,包括debug、utilities,但正常工程和自建工程区别就在下面, 为什么?这个 ...…

查看全部问答>

据说明天开始比赛的题都一样

本帖最后由 paulhyde 于 2014-9-15 04:01 编辑 我们老师说黑龙江那个是9天的题,所以难。咱们5日开始的题目一样,而且是3天的,难度和2011年全国那个差不多。 不知道各位有没有什么消息  …

查看全部问答>