📄 beep.c
字号:
#include "beep.h"
static int p_note[] = { P0, P1, P2, P3, P4, P5, P6, P7, P8, P9 };
void beep_init(void)
{
IOPMOD = IOPMOD | 0x00010000;
}
static void beep_write( char * buf, int count )
{
int i;
for( i = 0; i < count; i++ )
{
if( buf[i] )
IOPDATA = IOPDATA | 0x00010000;
else
IOPDATA = IOPDATA & (~0x00010000);
}
return;
}
// delay 1/1000000 s = 0.000001 s , 1/1000 毫秒
static void beep_delay( int t )
{
int i, j;
for( i=0; i<10; i++ )
for ( j=0; j<t; j++ )
;
}
// note: 1,2,3,4,5,6,7
// tone: 低八度,中八度,高八度 [*1, *2, *4]
// div: 八分音符;四分音符
void beep_note( int note, int tone, int div )
{
int freq = p_note[note] * tone;
int loop = (1000*1000/(freq))/2;
int count = (freq/div)*2 ;
char beep_on = 1;
char beep_off = 0;
if( note > 9 || note < 0 )
return;
while( count-- )
{
beep_write( &beep_on, 1 );
beep_delay( loop );
beep_write( &beep_off, 1 );
beep_delay( loop );
}
return;
}
/* 休止符 */
void beep_rest( void )
{
beep_delay( 40000 );
}
/* beep a song */
void beep_music( int psong[][3] )
{
int i;
for( i = 0; ; i++ )
{
if( psong[i][0] >= 1 )
beep_note( psong[i][0], psong[i][1], psong[i][2] );
if( psong[i][0] == 0 )
beep_rest();
if( psong[i][0] == -1 )
break;
}
}
/* 歌曲 <<友谊地久天长>> */
static int youyi[][3] = { { 5, 1, 4 }, { 0, 0, 0 },
{ 1, 2, 4 }, { 1, 2, 8 }, { 0, 0, 0 },
{ 1, 2, 8 }, { 0, 0, 0 },
{ 1, 2, 4 },
{ 3, 2, 8 }, { 0, 0, 0 },
{ 2, 2, 4 }, { 2, 2, 16 },
{ 1, 2, 8 }, { 0, 0, 0 },
{ 2, 2, 4 },
{ 3, 2, 4 }, { 0, 0, 0 },
{ 1, 2, 4 }, { 1, 2, 8 }, { 0, 0, 0 },
{ 1, 2, 8 }, { 0, 0, 0 },
{ 3, 2, 4 },
{ 5, 2, 4 }, { 0, 0, 0 },
{ 6, 2, 2 }, { 6, 2, 4 }, { 0, 0, 0 }, { 0, 0, 0 },
{ 6, 2, 4 }, { 0, 0, 0 },
{ 5, 2, 4 }, { 5, 2, 8 }, { 0, 0, 0 },
{ 3, 2, 8 }, { 0, 0, 0 },
{ 3, 2, 4 },
{ 1, 2, 8 }, { 0, 0, 0 },
{ 2, 2, 4 }, { 2, 2, 8 },
{ 1, 2, 8 }, { 0, 0, 0 },
{ 2, 2, 4 },
{ 3, 2, 4 }, { 0, 0, 0 },
{ 1, 2, 4 }, { 1, 2, 8 }, { 0, 0, 0 },
{ 6, 1, 8 }, { 0, 0, 0 },
{ 6, 1, 4 },
{ 5, 1, 4 }, { 0, 0, 0 },
{ 1, 2, 2 }, { 1, 2, 4 }, { 0, 0, 0 }, { 0, 0, 0 },
{ -1, 0, 0 }
};
void beepdemo( void )
{
beep_init();
beep_music( youyi );
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -