小白跟做江科大51单片机之蜂鸣器播放音乐

1.引入Delay及Timer0相关文件

2.编写main.c代码

#include <REGX52.H>

#include "Delay.h"

#include "Timer0.h"

sbit Buzzer=P2^5;

//音符与索引对应表,P:休止符,L:低音,M:中音,H:高音,下划线:升半音符号#

#define P 0

#define L1 1

#define L1_ 2

#define L2 3

#define L2_ 4

#define L3 5

#define L4 6

#define L4_ 7

#define L5 8

#define L5_ 9

#define L6 10

#define L6_ 11

#define L7 12

#define M1 13

#define M1_ 14

#define M2 15

#define M2_ 16

#define M3 17

#define M4 18

#define M4_ 19

#define M5 20

#define M5_ 21

#define M6 22

#define M6_ 23

#define M7 24

#define H1 25

#define H1_ 26

#define H2 27

#define H2_ 28

#define H3 29

#define H4 30

#define H4_ 31

#define H5 32

#define H5_ 33

#define H6 34

#define H6_ 35

#define H7 36

//此数组是取到全部的音

unsigned int FreqTable[]={

0,

63628,63731,63835,63928,64021,64103,64185,64260,64331,64400,64463,64528,

64580,64633,64684,64732,64777,64820,64860,64898,64934,64968,65000,65030,

65058,65085,65110,65134,65157,65178,65198,65217,65235,65252,65268,65283,

};

//乐谱,必须使用code,RAM最大128字节

unsigned char code Music[]={

//音符,时值,

//1

P, 4,

P, 4,

P, 4,

M6, 2,

M7, 2,

H1, 4+2,

M7, 2,

H1, 4,

H3, 4,

M7, 4+4+4,

M3, 2,

M3, 2,

//2

M6, 4+2,

M5, 2,

M6, 4,

H1, 4,

M5, 4+4+4,

M3, 4,

M4, 4+2,

M3, 2,

M4, 4,

H1, 4,

//3

M3, 4+4,

P, 2,

H1, 2,

H1, 2,

H1, 2,

M7, 4+2,

M4_,2,

M4_,4,

M7, 4,

M7, 8,

P, 4,

M6, 2,

M7, 2,

//4

H1, 4+2,

M7, 2,

H1, 4,

H3, 4,

M7, 4+4+4,

M3, 2,

M3, 2,

M6, 4+2,

M5, 2,

M6, 4,

H1, 4,

//5

M5, 4+4+4,

M2, 2,

M3, 2,

M4, 4,

H1, 2,

M7, 2+2,

H1, 2+4,

H2, 2,

H2, 2,

H3, 2,

H1, 2+4+4,

//6

H1, 2,

M7, 2,

M6, 2,

M6, 2,

M7, 4,

M5_,4,

M6, 4+4+4,

H1, 2,

H2, 2,

H3, 4+2,

H2, 2,

H3, 4,

H5, 4,

//7

H2, 4+4+4,

M5, 2,

M5, 2,

H1, 4+2,

M7, 2,

H1, 4,

H3, 4,

H3, 4+4+4+4,

//8

M6, 2,

M7, 2,

H1, 4,

M7, 4,

H2, 2,

H2, 2,

H1, 4+2,

M5, 2+4+4,

H4, 4,

H3, 4,

H3, 4,

H1, 4,

//9

H3, 4+4+4,

H3, 4,

H6, 4+4,

H5, 4,

H5, 4,

H3, 2,

H2, 2,

H1, 4+4,

P, 2,

H1, 2,

//10

H2, 4,

H1, 2,

H2, 2,

H2, 4,

H5, 4,

H3, 4+4+4,

H3, 4,

H6, 4+4,

H5, 4+4,

//11

H3, 2,

H2, 2,

H1, 4+4,

P, 2,

H1, 2,

H2, 4,

H1, 2,

H2, 2+4,

M7, 4,

M6, 4+4+4,

P, 4,

0xFF //终止标志

};

unsigned char freselect,Musicselect;

void main()

{

Timer0Init();

while(1)

{

if(Music[Musicselect]!=0xFF)

{

freselect=Music[Musicselect];

Musicselect++;

Delay(500/4*Music[Musicselect]);

Musicselect++;

TR0=0;

Delay(5); //音符间短暂停顿

TR0=1;

}

else

{

TR0=0;

while(1);

}

}

}

//1ms会有一次中断

//产生500HZ的频率

void Timer0_Routine() interrupt 1

{

if(FreqTable[freselect])

{

TL0 = FreqTable[freselect]%256; //设置定时初值

TH0 = FreqTable[freselect]/256; //设置定时初值

Buzzer=!Buzzer;

}

}

3.结果

蜂鸣器之天空之城

相关推荐
悠哉悠哉愿意3 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
Lester_11013 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元3 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133973 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315203 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Alaso_shuang3 天前
STM32 核心输入、输出模式
stm32·单片机·嵌入式硬件
脚后跟3 天前
AI助力嵌入式物联网项目全栈开发
嵌入式硬件·物联网·ai编程
2501_918126913 天前
stm32死锁是怎么实现的
stm32·单片机·嵌入式硬件·学习·个人开发
z20348315204 天前
STM32F103系列单片机定时器介绍(一)
stm32·单片机
星马梦缘4 天前
驱动层开发——蜂鸣器驱动
stm32·单片机·嵌入式硬件·hal·驱动