C语言程序:
/*SB1 1音 SB2 2音 SB3 3音 SB4 4音 SB1SB2 5音 SB2SB3 6音 SB3SB4 7音 SB1SB4 i音 SB1SB3 第一首歌 SB2SB4 第二首歌 */
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit BEEP=P2^4;
sbit K1=P3^2;
sbit K2=P3^3;
sbit K3=P3^4;
sbit K4=P3^5;
sbit L=P2^3;
uchar th0_f; //在中断中装载的T0的值高8位
uchar tl0_f; //在中断中装载的T0的值低8位
uchar keyscan(uchar key); //键盘输入函数
void delay(uint t); //延时函数
void display(uint i); //数码管显示函数
uchar table[16]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; //共阳极数码管显示码
// 0 1 2 3 4 5 6 7 8 9 a b c d e f
uchar code freq[16]={
0x21,0xF9,//262Hz,1
0xE1,0xF9,//294Hz,2
0x8C,0xFA,//330Hz,3
0xD8,0xFA,//349Hz,4
0x68,0xFB,//392Hz,5
0xE9,0xFB,//440Hz,6
0x58,0xFC,//494Hz,7
0x8F,0xFC //523Hz,i
};
uchar code freqgequ[18]={ //歌曲音调表
0x00,0x00,
0x44,0xFC,//1
0xAE,0xFC,//2
0x0A,0xFD,//3
0x34,0xFD,//4
0x82,0xFD,//5
0xE2,0xFD,//6
0x06,0xFE,//7
0x22,0xFE//i
};
void play(uchar *diaodata,uchar *jiedata)
{
uchar i,c=0;
uint n;
TR0=1;
for(i=0;diaodata[i]!=0;i++)
{ //逐个符号演奏
tl0_f=freqgequ[diaodata[i]*2]; //取出对应的定时值送给T0
th0_f=freqgequ[diaodata[i]*2+1];
for(c=0;c<jiedata[i];c++)
{ //按照音长延时,两首歌均为4/4拍,每拍延时为125ms
for(n=0;n<8000;n++); //单个音调的延时约2*8.6ms,乘上节拍
if(K1==1&&K2==1&&K3==1&&K4==1)
{ //当按键松开,立即退出播放
delay(20);
if(K1==1&&K2==1&&K3==1&&K4==1)
{
TR0=0;
}
return;
}
}
TR0=0;
for(n=0;n<500;n++); //音符间延时
TR0=1;
}
TR0=0;
L=1;
BEEP=1;
}
//《祝你生日快乐》音符表
uchar code shengri[]={
1,1,2,1,4,3,1,1,2,1,5,4,1,1,8,6,4,3,2,8,7,8,7,6,4,5,4};
//《祝你生日快乐》节拍表
uchar code shengrijiepai[]={
9,3,12,12,12,24,9,3,12,12,12,24,
9,3,12,12,12,12,12,9,3,12,12,12,24,0
};
上一页 [1] [2] [3] [4] [5] [6] 下一页