給你一個蜂鳴器音樂與流水燈同時實現(xiàn)功能的編程思路,不代表此程序能夠直接正常運行。
#include "reg52.h"
sbit buzzer=P2^3 ; //蜂鳴器控制腳
unsigned char code SONG1[]={//音樂頻率數(shù)組,
0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20,
0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20,
0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20,
0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10,
0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20,
0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20,
0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20,
0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10,
0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80,
0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20,
0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20,
0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10,
0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00};
unsigned char code SONG2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水燈數(shù)組
unsigned char Count;
unsigned int i;
unsigned char j;
void Time0_Init()
{
TMOD = 0x21;
TH0 = 0x3C;//50ms
TL0 = 0xB0;//50ms
TH1 = 0x00;
TL1 = 0x00;
TR0 = 1;
TR1 = 1;
EA = 1;
ET0 = 1;
ET1 = 1;
}
void Time0_Int() interrupt 1
{
TH0 = 0x3C;
TL0 = 0xB0;
Count++;
if(Count%5==0)//250ms節(jié)拍
{
i++;
if(i=='\0')
i=0;
TH1=SONG1[i];//T1重裝值,音樂頻率
}
if(Count==10)//500ms流水燈變化速度
{
Count=0;
j++;
if(j=='\0')
j=0;
P0=SONG2[j];//流水燈花樣
}
}
void Timer1Int() interrupt 3
{
buzzer=~buzzer;
}
void main()
{
Time0_Init();
while(1);
}
|