📄 speaker.c
字号:
#define TIM *(int *)0x24
#define PRD *(int *)0x25
#define TCR *(int *)0x26
#define IMR *(int *)0x0
#define IFR *(int *)0x1
#define PMST *(int *)0x1d
#define SPSA0 *(unsigned int *)0x38
#define SPSD0 *(unsigned int *)0x39
#define SPSA1 *(unsigned int *)0x48
#define SPSD1 *(unsigned int *)0x49
#define nMusicNumber 40
#define REGISTERCLKMD (*(unsigned int *)0x58)
#define WAITSTATUS (*(unsigned int *)0x28)
ioport unsigned char port8000;
ioport unsigned char port8007;
void Delay(unsigned int nTime);
void interrupt time(void);
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}
};
unsigned int uWork;
main()
{
unsigned int uWork1;
int j,nCount=0;
REGISTERCLKMD=0;
port8000=0;
port8000=0x80;
port8000=8;
port8007=0; // 关闭东西方向的交通灯
port8007=0x40; // 关闭南北方向的交通灯
for ( j=0;j<nMusicNumber;j++ )
music[j][0]*=8;
SPSA0=1; // set McBSP0's SPCR2
uWork1=SPSD0;
uWork1&=0xfffe; // set XRST=0
SPSD0=uWork1;
SPSA0=0x0e; // set McBSP0's PCR
uWork1=SPSD0;
uWork1|=0x2020; // set XIOEN=1, Enable IO,DX for output
SPSD0=uWork1;
uWork1= PMST;
PMST = uWork1&0xff;
IMR = 0x8;
TCR = 0x412;
TIM = 0;
PRD = music[nCount][0]; // 频率设置
TCR = 0x422;
IFR = 0x100;
asm(" rsbx INTM");
j=0;
while ( j<1 )
{
Delay(music[nCount][1]*12); // 音长
nCount++;
if ( nCount>=nMusicNumber )
{
nCount=0; j++;
}
if ( music[nCount][0]==0 )
TCR=0x412; // 静音
else
{
PRD = music[nCount][0]; // 切换音符
TCR = 0x422;
}
}
}
void Delay(unsigned int nDelay)
{
int i,j,k=0;
for ( i=0;i<nDelay;i++ )
for ( j=0;j<64;j++ )
k++;
}
void interrupt time(void)
{
SPSA0=1; // set McBSP0's SPCR2
uWork=SPSD0;
uWork&=0xfffe; // set XRST=0
SPSD0=uWork;
SPSA0=0x0e; // set McBSP0's PCR
uWork=SPSD0;
uWork|=0x2000; // set XIOEN=1, Enable IO,DX for output
uWork^=0x20; // DX=^DX
SPSD0=uWork;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -