#include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit BUZZ = P2^2; int x; uchar code music[]={0x42,0x61,0x41,0x92,0x71,0x61, //音乐编码 0x61,0x71,0x24,0x11,0x21, 0x42,0x31,0x41,0x61,0x72,0x41, 0x31,0x41,0x36,0x44,0x64, 0x71,0x91,0x61,0x71,0x94, 0x32,0x41,0x61,0x71,0x91,0x71,0x41,0x71, 0x68,0x61,0x62,0x41,0x92,0x91,0x71, 0x61,0x61,0x61,0x71,0x24,0x31,0x21, 0x31,0x41,0x71,0x61,0x72,0x68}; uchar code frequency[]={0,272,330,370,415,440,494,554,622,660,740,830,880,988}; //频率数组 void delayms(uint z) { uchar i; z=300 * z; //这应该是300不是3300网页问题改不了 while(z--) { for(i = 0;i < 123; i++); } } void main() { int b; int i,high,low; BUZZ = 0; EA = 1; ET0 = 1; for(i = 0;i < 55;i++) { if(music[i] == 0) { return ; } TMOD = 0x01; high = music[i]/16; low = music[i]%16; b = frequency[high]; x = 65536 - 500000/b; TH0 = x / 256; TL0 = x % 256; TR0 = 1; delayms(low); TR0 = 0; } } void int0() interrupt 1 //采用定时器中断1 控制节拍 { TH0 = x / 256; TL0 = x % 256; BUZZ = ~BUZZ; //输出方波蜂鸣器发声 }
注意:
外部中断 0 中断编号是 0;
外部中断 1 中断编号是 2;
定时器中断 0 中断编号是 1;
定时器中断 1中断编号是 3;