📄 speaker.c
字号:
#include "2407c.h"
#define nMusicNumber 40
void interrupt gptime1(void);
void gp_init(void);
void delay(unsigned int nDelay);
unsigned int uWork,nCount;
unsigned int music[nMusicNumber][2]=
{
{182,480},{151,480},{135,480},{121,480},{135,480},{151,480},{182,480},{0,480},
{182,480},{151,480},{135,480},{121,480},{135,480},{151,480},{182,480},{0,480},
{182,240},{151,240},{135,240},{121,240},{135,240},{151,240},{182,240},{0,240},
{182,240},{151,240},{135,240},{121,240},{135,240},{151,240},{182,240},{0,240},
{182,1920},{151,1920},{135,1920},{121,1920},{135,1920},{151,1920},{182,1920},{0,1920}
};
/*
C D E F G A B
1 2 3 4 5 6 7 11
C: 264,297,330,352,396,440,495,528
music[][0]=1/264*1000000/25nS(for 40MHz DSP clock)
6123216
. .
*/
main()
{
int i;
for ( i=0;i<nMusicNumber;i++ )
{
music[i][0]*=24;
}
*WDCR=0x6f;
*WDKEY=0x5555;
*WDKEY=0xaaaa;
*SCSR1=0x81fe; //40m
uWork=(*MCRB);
uWork&=0x0ffbf; /* CANTX/IOPC6 for normal I/O port */
(*MCRB)=uWork;
nCount=0;
gp_init();
*IMR=0x3;
*IFR=0xffff;
asm(" clrc INTM");
for(;;)
{
delay(music[nCount][1]);
nCount++;
nCount%=nMusicNumber;
*T1PR = music[nCount][0];
}
}
void interrupt gptime1(void)
{
uWork=(*PIVR);
switch(uWork)
{
case 0x27:
{
(*EVAIFRA)=0x80;
{
uWork=(*PCDATDIR);
uWork|=0x4000;
uWork^=0x40;
(*PCDATDIR)=uWork;
}
break;
}
}
}
void gp_init(void)
{
*EVAIMRA = 0x80;
*EVAIFRA = 0xffff;
*GPTCONA = 0x0100;
*T1PR = music[nCount][0];
*T1CNT = 0;
*T1CON = 0x1340;
}
void delay(unsigned int nDelay)
{
int ii,jj,kk;
for ( ii=0;ii<nDelay;ii++ )
for ( jj=0;jj<256;jj++ )
kk++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -