视频里的程序-今天有空吗?漫画
#include<reg51.h>
#include<intrins.h>
sbit sp=P1^5;//蜂鸣器引脚
bit half;
void delay(unsigned int time)
{
while(--time)
{
TMOD=0X01;// 定时器工作方式设置:方式1,定时器模式,门控位为0。
TR0=1; // 启动定时器
TH0=(65536-7)/256; //设置初值的高八位
TL0=(65536-7)%256; //设置初值的低八位
while(TF0==0);//如果定时器溢出,TF0就为1,继续执行,反之原地等待。
TF0=0;//将标志位清零。
TR0=0;
}
}
void so1( unsigned int pai)
{
unsigned int i;
if(pai==15)
{//如果是一拍半,一个四分音符加一个八分音符
half=1;
pai=4;
}
for(i=0;i<3125/pai;i++)
{
sp=~sp;
delay(125);
}
delay(5000);
half=0;
}
void la1( unsigned int pai)
{
unsigned int i;
for(i=0;i<3508/pai;i++)
{
sp=~sp;
delay(113);
}
delay(5000);
}
void se1( unsigned int pai)
{
unsigned int i;
for(i=0;i<3964/pai;i++)
{
sp=~sp;
delay(100);
}
delay(5000);
}
void doo( unsigned int pai) //中音 音符1
{
unsigned int i;
for(i=0;i<4184/pai;i++)
{
sp=~sp;
delay(93);
}
delay(5000);
}
void re(unsigned int pai)
{
unsigned int i;
if(pai==15)
{//如果是一拍半,一个四分音符加一个八分音符
half=1;
pai=4;
}
for(i=0;i<4692/pai;i++)
{
sp=~sp;
delay(83);
}
delay(5000);
half=0;
}
void mi( unsigned int pai)
{
unsigned int i;
if(pai==15)
{//如果是一拍半,一个四分音符加一个八分音符
half=1;
pai=4;
}
for(i=0;i<(5560/pai)+(695*half);i++)
{
sp=~sp;
delay(74);
}
delay(5000);
half=0;
}
void fa( unsigned int pai)
{
unsigned int i;
for(i=0;i<5772/pai;i++)
{
sp=~sp;
delay(70);
}
delay(5000);
}
void so(unsigned int pai)
{
unsigned int i;
if(pai==15)
{//如果是一拍半,一个四分音符加一个八分音符
half=1;
pai=4;
}
for(i=0;i<6820/pai;i++)
{
sp=~sp;
delay(62);
}
delay(5000);
half=0;
}
void la( unsigned int pai)
{
unsigned int i;
if(pai==15)
{//如果是一拍半,一个四分音符加一个八分音符
half=1;
pai=4;
}
for(i=0;i<7044/pai;i++)
{
sp=~sp;
delay(55);
}
delay(5000);
half=0;
}
void se (unsigned int pai)
{
unsigned int i;
if(pai==15)
{//如果是一拍半,一个四分音符加一个八分音符
half=1;
pai=4;
}
for(i=0;i<(7904/pai)+(988*half);i++)
{
sp=~sp;
delay(48);
}
delay(5000);
half=0;
}
void doo3( unsigned int pai)
{
unsigned int i;
for(i=0;i<8332/pai;i++)
{
sp=~sp;
delay(46);
}
delay(5000);
}
void re3( unsigned int pai)
{
unsigned int i;
for(i=0;i<9524/pai;i++)
{
sp=~sp;
delay(41);
}
delay(5000);
}
void mi3( unsigned int pai)
{
unsigned int i;
for(i=0;i<10810/pai;i++)
{
sp=~sp;
delay(36);
}
delay(5000);
}
void no( unsigned int pai)
{
unsigned int i;
for(i=0;i<10810/pai;i++)
{
sp=1;
delay(36);
}
delay(5000);
}
void main()
{
while(1)
{
la(15);so(8);mi(4);so(4); doo3(4);la(8);so(8);la(2); //世上只有妈妈好
delay(10000);
mi(4);so(8);la(8);so(4);mi(4); doo(8);la1(8);so(8);mi(8);re(2);//有妈的孩子像块宝
delay(10000);
re(15);mi(8);so(4);so(8);la(8); mi(4);re(4);doo(2);
delay(10000);
so(15);mi(4);re(8);doo(8); la1(8); doo(8); so1(1);
delay(10000);
}
}
//括号里数字表示几分音符,例如 so(15),代表一拍半的中音5 ,mi(4)代表四分音符的中音3
// la1(8)代表八分音符的低音6,doo3(4)代表四分音符的高音1