学习单片机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嘿嘿

物联沃分享整理
物联沃-IOTWORD物联网 » 学习单片机C52——小星星实例

发表回复