学习单片机C52——小星星实例
#include <REGX52.H>
sbit beep=P2^5;
unsigned int tone_arr[]={63628,63835,64021,64103,64260,64400,64524,//低音
64580,64684,64777,64820,64898,64968,65030,//中音
65058,65110,65157,65160,65217,65252,65282};//高音
int tone_time[]={500,500,250,125,1000};//音长
int xiaoxingxing_arr[]={1,1,5,5,6,6,45,4,4,3,3,2,2,51,5,5,4,4,3,3,52,
5,5,4,4,3,3,52,1,1,5,5,6,6,55,4,4,3,3,2,2,51};//小星星42
static int i=0;
static int j=0;
static int k=0;
void T0_init(){
TMOD=0x01;
TH0=63628/255;
TL0=63628%255;
TR0=1;
EA=1;
ET0=1;
}
void T0_INT0() interrupt 1{
int* tone_time_p=&tone_time;
int* xiaoxingxing_p=&xiaoxingxing_arr;
unsigned int* tone_p=&tone_arr;
if(i<=*(tone_time_p+(*(xiaoxingxing_p+k)/10))){//音长
TH0=*(tone_p+(*(xiaoxingxing_p+k)%10))/255;//音调
TL0=*(tone_p+(*(xiaoxingxing_p+k)%10))%255;
beep=~beep;
}
else{
if(j<=19){j++;i=0;}
if(j>19){j=0;i=0;}
if(k<=40){k++;}
if(k>40){k=0;}
}
i++;
}
void main(){
T0_init();
while(1);
}
#include <REGX52.H>
sbit beep=P2^5;
unsigned int tone_arr[]={63628,63835,64021,64103,64260,64400,64524,//低音
64580,64684,64777,64820,64898,64968,65030,//中音
65058,65110,65157,65160,65217,65252,65282};//高音
int tone_time[]={500,500,250,125,1000};//音长
int xiaoxingxing_arr[]={1,1,5,5,6,6,45,4,4,3,3,2,2,51,5,5,4,4,3,3,52,
5,5,4,4,3,3,52,1,1,5,5,6,6,55,4,4,3,3,2,2,51};//小星星42
static int i=0;
static int j=0;
static int k=0;
void T0_init(){
TMOD=0x01;
TH0=63628/255;
TL0=63628%255;
TR0=1;
EA=1;
ET0=1;
}
void T0_INT0() interrupt 1{
int* tone_time_p=&tone_time;
int* xiaoxingxing_p=&xiaoxingxing_arr;
unsigned int* tone_p=&tone_arr;
if(i<=*(tone_time_p+(*(xiaoxingxing_p+k)/10))){//音长
TH0=*(tone_p+(*(xiaoxingxing_p+k)%10))/255;//音调
TL0=*(tone_p+(*(xiaoxingxing_p+k)%10))%255;
beep=~beep;
}
else{
if(j<=19){j++;i=0;}
if(j>19){j=0;i=0;}
if(k<=40){k++;}
if(k>40){k=0;}
}
i++;
}
void main(){
T0_init();
while(1);
}
作者:李zl嘿嘿