嵌入式 > 嵌入式开发 > 详情

用C51写的单片机音乐彩灯程序

发布时间:2024-03-26 发布时间:
|
#include

#define TLEDS 20//每个花样状态持续时间,以50mS为单位
#define NUM_OF_LED_S 4//每种模式LED花样数ue42d?
typedef unsigned char uchar;
typedef unsigned int uint;

 

data uchar led_array_num;//当前模式下,LED花样状态序号
data uchar music_array_num;//音符的序号
data uchar i;//模式号
data uchar t_count_led;//用于LED状态持续时间计时
data uint t_count_music;//
data uint t_yinfu;//音符持续时间

uchar code led_array_p0[4][NUM_OF_LED_S]={{0xc0,0xc0,0xc0,0xc0},{0x38,0x38,0x38,0x38},{0x05,0x07,0x02,0x07},{0xff,0x81,0xff,0xff}};
uchar code led_array_p2[4][NUM_OF_LED_S]={{0x07,0x0b,0x0d,0x0e},{0x07,0x09,0x0e,0x00},{0x06,0x09,0x06,0x00},{0x07,0x09,0x0e,0x00}};
uchar code music_array_h[4][128]={{0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,
0xfc,0xfc,0xfc,0xfc,0xfc,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfe,0xfd,0xfd,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfc,0xfd,0xfc},
{0xfc,0xfc,0xfd,0xfc,0xfc,0xfc,0xfd,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfd,
0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfd,0xfc,0xfc,0xfd,0xfc},
{0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfb,0xfb,0xfb,0xfb,0xfc,0xfc,0xfb,0xfb,0xfd,0xfd,0xfc,0xfc,0xfb,0xfd,0xfd,
0xfd,0xfc,0xfc,0xfc},
{0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,
0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfd,0xfc,0xfc,0xfc}};
uchar code music_array_l[4][128]={{0x43,0x43,0x43,0x08,0x81,0x81,0x81,0x81,0xc7,0xc7,0xc7,0x21,0x81,0x33,0x33,0x33,0xc7,0x08,0x08,0x08,0x81,0xb5,0xb5,0xb5,0xb5,0xb5,0x81,0x81,0x43,0x43,0x43,0x08,0x81,0x81,0x81,0x81,0xc7,0xc7,0xc7,0x21,0x81,0x33,0x33,0x33,0xc7,0x08,0x08,0x08,0x08,0x08,0x81,0xb5,0xb5,0xb5,0xb5,0x08,0x43},{0x43,0xb5,0x08,0x43,0x43,0xb5,0x08,0x43,0x08,0x33,0x81,0x08,0x33,0x81,0x81,0xc7,0x81,0x33,0x08,0x43,0x81,0xc7,0x81,0x33,0x08,0x43,0x43,0x81,0x43,0x43,0x81,0x43},{0x03,0x03,0x8f,0x03,0x43,0x0b,0x03,0x03,0x8f,0x03,0xb5,0x43,0x03,0x03,0x81,0x08,0x43,0x0b,0x8f,0x33,0x33,0x08,0x43,0xb5,0x43},{0x43,0x43,0x81,0x81,0xc7,0xc7,0x81,0x33,0x33,0x08,0x08,0xb5,0xb5,0x43,0x81,0x81,0x33,0x33,0x08,0x08,0xb5,0x81,0x81,0x33,0x33,0x08,0x08,0xb5,0x43,0x43,0x81,0x81,0xc7,0xc7,0x81,0x33,0x33,0x08,0x08,0xb5,0xb5,0x43}};
uint code music_array_t[4][128]={{523,523,523,658,784,784,784,784,880,880,880,1046,784,698,698,698,880,658,658,658,784,593,593,593,593,593,784,784,523,523
,523,658,784,784,784,784,880,880,880,1046,784,698,698,698,880,658,658,658,658,658,784,593,593,593,593,658,523,0},{523,593,658,523,523,593,658,523,658,698,3134,658,698,3134,391,440,391,698,658,523,391,568,391,698,658,523,523,784,1046,523,784,1046,0},{391,391,880,391,523,1486,391,391,880,391,593,1569,391,391,3134,658,523,988,440,698,698,1317,523,593,1569,0},{523,523,784,784,880,880,784,698,698,658,658,593,593,523,784,784,698,698,658,658,593,784,784,698,698,658,658,593,523,523,784,784,880,880,784,698,698,658,658,593,593,523,0}};

void delay(void)
{
uchar c_1;
uchar c_2;
uchar c_3;
for (c_1=0; c_1< 10;c_1++)
for(c_2 = 0;c_2< 10;c_2++)
for(c_3 = 0; c_3<55;c_3++)
;
}


void main(void)
{

led_array_num = 0;
music_array_num = 0;
t_yinfu = music_array_t[0][0]; //初始化

//delay();

i = 0;
TMOD = 0x11; //定时器工作方式设置
TR0 = 0; //关定时器
TR1 = 0;


TH1 = 0x3c;
TL1 = 0xb0;
P0 = led_array_p0[0][0];//彩灯
P2 = led_array_p2[0][0];
t_count_led = 0;

TH0 = music_array_h[0][0];//音乐
TL0 = music_array_l[0][0];
t_yinfu = music_array_t[0][0];
t_count_music = 0;

IE = 0x8a;
TR0 = 1;
TR1 = 1;


//以下开始扫描按键
while(1)
{
P1_0 = 1;
if(P1_0 == 0)
{
delay();
if(P1_0 == 0)
{
TR0 = 0;
TR1 = 0;
i = 0;//去抖动

led_array_num = 0;
music_array_num = 0;

TH1 = 0x3c;
TL1 = 0xb0;
P0 = led_array_p0[0][0];//彩灯
P2 = led_array_p2[0][0];
t_count_led = 0;

TH0 = music_array_h[0][0];//音乐
TL0 = music_array_l[0][0];
t_yinfu = music_array_t[0][0];
t_count_music = 0;

while(P1_0 == 0)
{
while(P1_0 == 0)
t_count_music = 0;
delay();
}

TR0 = 1;
TR1 = 1;

}


}
if(P1_1 == 0)
{
delay();
if(P1_1 == 0)
{
TR0 = 0;
TR1 = 0;
i = 1;

led_array_num = 0;
music_array_num = 0;

TH1 = 0x3c;
TL1 = 0xb0;
P0 = led_array_p0[1][0];//彩灯
P2 = led_array_p2[1][0];
t_count_led = 0;

TH0 = music_array_h[1][0];//音乐
TL0 = music_array_l[1][0];
t_yinfu = music_array_t[1][0];
t_count_music = 0;

while(P1_1 == 0)
{
while(P1_1 == 0)
t_count_music = 0;
delay();
}

TR0 = 1;
TR1 = 1;

}


}
if(P1_2 == 0)
{
delay();
if(P1_2 == 0)
{
TR0 = 0;
TR1 = 0;
i = 2;

led_array_num = 0;
music_array_num = 0;

TH1 = 0x3c;
TL1 = 0xb0;
P0 = led_array_p0[2][0];//彩灯
P2 = led_array_p2[2][0];
t_count_led = 0;

TH0 = music_array_h[2][0];//音乐
TL0 = music_array_l[2][0];
t_yinfu = music_array_t[2][0];
t_count_music = 0;
while(P1_2 == 0)
{
while(P1_2 == 0)
t_count_music = 0;
delay();
}

TR0 = 1;
TR1 = 1;

}

}
if(P1_3 == 0)
{
delay();
if(P1_3 == 0)
{
TR0 = 0;
TR1 = 0;
i = 3;

led_array_num = 0;
music_array_num = 0;

TH1 = 0x3c;
TL1 = 0xb0;
P0 = led_array_p0[3][0];//彩灯
P2 = led_array_p2[3][0];
t_count_led = 0;

TH0 = music_array_h[3][0];//音乐
TL0 = music_array_l[3][0];
t_yinfu = music_array_t[3][0];
t_count_music = 0;
while(P1_3 == 0)
{
while(P1_3 == 0)
t_count_music = 0;
delay();
}

TR0 = 1;
TR1 = 1;


}

}
}
}


void Timer0IntRoute(void) interrupt 1
{
t_count_music++;
P1_4 = ~P1_4;
TH0 = music_array_h[i][music_array_num];//音乐
TL0 = music_array_l[i][music_array_num];
if(t_count_music >= t_yinfu)
{
t_yinfu = music_array_t[i][++music_array_num];
if(t_yinfu == 0)
{
music_array_num = 0;
t_yinfu = music_array_t[i][music_array_num];
}
TH0 = music_array_h[i][music_array_num];//音乐
TL0 = music_array_l[i][music_array_num];
t_count_music = 0;
}
}


void Timer1IntRoute(void) interrupt 3
{
t_count_led++;
TH1 = 0x3c;
TL1 = 0xb0;
if(t_count_led >= TLEDS)
{
t_count_led = 0;
led_array_num++;
if(led_array_num>=NUM_OF_LED_S)
led_array_num = 0;
P0 = led_array_p0[i][led_array_num];
P2 = led_array_p2[i][led_array_num];
}
}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
485总线升级成CAN总线