您的位置 首页 元件

51单片机-播映天空之城

include包含51单片机寄存器定义的头文件sbitsound=P3^7;将sound位定义为P37unsignedintC;储存定时器的定时常数以下

#include //包括51单片机寄存器界说的头文件

sbit sound=P3^7; //将sound位界说为P3.7
unsigned int C; //贮存守时器的守时常数
//以下是C调低声的音频宏界说
#define L1 262 //将”L1″宏界说为低声”1″的频率262Hz 时刻是1/262=3826/2 us 取半周期
#define L2 286 //将”L2″宏界说为低声”2″的频率286Hz
#define L3 311 //将”L3″宏界说为低声”3″的频率311Hz
#define L4 349 //将”L4″宏界说为低声”4″的频率349Hz
#define L5 392 //将”L5″宏界说为低声”5″的频率392Hz
#define L6 440 //将”l_a”宏界说为低声”6″的频率440Hz
#define L7 494 //将”L7″宏界说为低声”7″的频率494Hz
//以下是C调中音的音频宏界说
#define Z1 523 //将”Z1″宏界说为中音”1″的频率523Hz
#define Z2 587 //将”Z2″宏界说为中音”2″的频率587Hz
#define Z3 659 //将”Z3″宏界说为中音”3″的频率659Hz
#define Z4 698 //将”Z4″宏界说为中音”4″的频率698Hz
#define Z5 784 //将”Z5″宏界说为中音”5″的频率784Hz
#define Z6 880 //将”Z6″宏界说为中音”6″的频率880Hz
#define Z7 987 //将”Z7″宏界说为中音”7″的频率523H
//以下是C调高音的音频宏界说
#define H1 1046 //将”H1″宏界说为高音”1″的频率1046Hz
#define H2 1174 //将”H2″宏界说为高音”2″的频率1174Hz
#define H3 1318 //将”H3″宏界说为高音”3″的频率1318Hz
#define H4 1396 //将”H4″宏界说为高音”4″的频率1396Hz
#define H5 1567 //将”H5″宏界说为高音”5″的频率1567Hz
#define H6 1760 //将”H6″宏界说为高音”6″的频率1760Hz
#define H7 1975 //将”H7″宏界说为高音”7″的频率1975Hz
void delay()
{
unsigned char i,j;
for(i=0;i<100;i++)
for(j=0;j<250;j++)
;
}
void main(void)
{
unsigned char i,j;
//以下是《天空之城》简谱 //每行对应一末节音符
unsigned int code f[]={ Z6,Z7,H1,Z7,H1,H3,Z7,Z3,Z3, Z6,Z5,Z6,H1,Z5,Z3,Z3, Z4,Z3,Z4,H1,
Z3,H1,H1,H1,Z7,Z4,Z4,Z7,Z7,Z6,Z7, H1,Z7,H1,H3,Z7,Z3,Z3, Z6,Z5,Z6,H1,
Z5, Z3,Z4,H1,Z7,H1,H2,H2,H2,H1,H1,Z6,Z7,Z5,Z6,H1,H2, H3,H2,H3,H5,
H2,Z5,Z5, H1,Z7,H1,H3,H3, Z6,H1,Z7,H2,H1,Z5,Z5, H4,H3,H2,H1,
H3, Z3,H3, H6,H5,H5, H3,H2,H1,H1,H2,H1,H2,H5,H3,H3,
H6,H5, H3,H2,H1,H1,H2,H1,H2,Z7,Z6,Z6,Z7, Z6,
0xff}; //以0xff作为音符的完毕标志
//以下是简谱中每个音符的节拍
//”4″对应4个延时单位,”2″对应2个延时单位,”1″对应1个延时单位
unsigned char code JP[ ]={ 4,4, 12,4,8,8, 20,4,4, 12,4,8,8, 20,4,4, 12,4,4,12,
20,4,4,4, 12,4,8,8, 20,4,4, 12,4,8,8, 20,4,4, 12,4,8,8,
32, 4, 8,4,6,8, 4,4,4,16, 8,4,6,8, 24,4,4, 12,4,8,8,
24,4,4, 4,4,8,8, 32, 4,8,8,6, 12,4,16, 8,8,8,8,
30, 20,8, 16,8,8, 4,4,16,8, 8,4,4,8, 20,8,
16,16, 4,20,8, 8,4,4,8, 20,4,4, 32,
};
EA=1; //开总中止
ET0=1; //守时器T0中止答应
TMOD=0x00; // 运用守时器T0的形式1(13位计数器)
while(1) //无限循环
{
i=0; //从第1个音符f[0]开端播映
while(f[i]!=0xff) //只需没有读到完毕标志就持续播映
{
C=460830/f[i]; //
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值办法 5
TL0=(8192-C)2; //可证明这是13位计数器TL0低5位的赋初值办法
TR0=1; //发动守时器T0
for(j=0;j
delay(); //延时1个节拍单位
TR0=0; //封闭守时器T0
i++; //播映下一个音符
}
sound=0;
}
}
void Time0(void ) interrupt 1 using 1
{
sound=!sound; //将P3.7引脚输出电平取反,构成方波
TH0=(8192-C)/32; //可证明这是13位计数器TH0高8位的赋初值办法
TL0=(8192-C)2; //可证明这是13位计数器TL0低5位的赋初值办法
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/yuanjian/257074.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部