通过单片机定时器输出方波,不同的频率声调不同。
#includesbit beep = P1^5; unsigned char code music_h[]={0xfc,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe}; unsigned char code music_l[]={0x44,0xbe,0x0a,0x34,0x83,0xc8,0x06}; //ad int i; void delay(int b) { int time; while(--b!=0) { for(time=0;time<125;time++); } } void music(unsigned char m) { int j; for(j=0;j<800;j++) { while(!TF0); TH0=music_h[m-1]; TL0=music_l[m-1]; beep=~beep; TF0=0; } } void music_c(unsigned char m) { int j; for(j=0;j<100;j++) { while(!TF0); TH0=music_h[m-1]; TL0=music_l[m-1]; TF0=0; } } void main () { TMOD=0x1; TH0=0xfc; TL0=0x44; TR0=1; EA=1; ET0=1; while(1) { delay(1000); music(1); music_c(1); music(1); music_c(1); music(5); music_c(1); music(5); music_c(1); music(6); music_c(1); music(6); music_c(1); music(5); music_c(5); music_c(5); music(4); music_c(1); music(4); music_c(1); music(3); music_c(1); music(3); music_c(1); music(2); music_c(1); music(2); music_c(1); music(1); music_c(1); delay(1000); } }
效果:



