main.c

来自「89C51单片机驱动扬声器播放音乐的程序」· C语言 代码 · 共 62 行

C
62
字号
#include <REG52.H> 
void delay(unsigned char n);     
	code unsigned song[]={0xf0,0xf0,0xf8,0x8b,0xf9,0x5b,0xfa,0x14,0xfa, 
	0x0c,0xfb,0x03,0xfb,0x8f,0xfc,0x0b,0xfc,0x43,0xfc,0xab,0xfd, 
	0x08,0xfd,0x33,0xfd,0x81,0xfd,0xc7,0xfe,0x05,0xfe,0x32,0xfe, 
	0x55,0xfe,0x84,0xfe,0x99,0xfe,0xc0,0xfe,0xe3,0xff}; 


code int note[]={ 
	0x0000,0xFB03,0xFB8E,0xFC0B,0xFC43,0xFCAB,0xFD08,0xFD32, 
	                                  
	0xFD81,0xFDC7,0xFE05,0xFE21,0xFE55,0xFE83,0xFE99,0xFEC0}; 
	unsigned char i=0; 
	unsigned char hi_note,low_note; 
	static void timer1_isr(void) interrupt TF1_VECTOR using 2 
	{ 
	   TR1=0; 
	   TL1=low_note; 
	   TH1=hi_note; 
	   TR1=1; 
	   P3_7=~P3_7; 
	}                
static void timer1_initialize(void) 
	{ 
	   EA=0; 
	   TR1=0; 
	   TMOD = 0X10; 
	   ET1=1; 
	   EA=1; 
	} 
void singing() 
{ 
   unsigned char beat,temp; 
   i=0; 
   do { 
       temp=song[i];               

       if (temp==0) {             

           TR1=0;                 
           return;                 
       } 
       beat=temp & 0x0f;           

       temp=(temp >> 4) & 0x0f;   
       if (temp==0) TR1=0;       
       else { 
        hi_note=note[temp] >> 8;   
           low_note=note[temp] & 0x00FF; 
              TR1=1;              
       } 
       delay(beat);                      
i++; 
   } while(1);  
}     
void main (void)  { 
   timer1_initialize(); 
   do { 
        singing(); 
   } while (1);                  } 

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?