play_song()里有死循环while(1),程序到这里打转转了。 |
给你一个蜂鸣器音乐与流水灯同时实现功能的编程思路,不代表此程序能够直接正常运行。 #include "reg52.h" sbit buzzer=P2^3 ; //蜂鸣器控制脚 unsigned char code SONG1[]={//音乐频率数组, 0x26,0x20,0x20,0x20,0x20,0x20,0x26,0x10,0x20,0x10,0x20,0x80,0x26,0x20,0x30,0x20, 0x30,0x20,0x39,0x10,0x30,0x10,0x30,0x80,0x26,0x20,0x20,0x20,0x20,0x20,0x1c,0x20, 0x20,0x80,0x2b,0x20,0x26,0x20,0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x80,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x60,0x40,0x10,0x39,0x10,0x26,0x20, 0x30,0x20,0x30,0x20,0x39,0x10,0x26,0x10,0x26,0x80,0x26,0x20,0x2b,0x10,0x2b,0x10, 0x2b,0x20,0x30,0x10,0x39,0x10,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x20, 0x20,0x10,0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x18,0x20,0x18,0x20,0x26,0x20, 0x20,0x20,0x20,0x40,0x26,0x20,0x2b,0x20,0x30,0x20,0x30,0x20,0x1c,0x20,0x20,0x20, 0x20,0x80,0x1c,0x20,0x1c,0x20,0x1c,0x20,0x30,0x20,0x30,0x60,0x39,0x10,0x30,0x10, 0x20,0x20,0x2b,0x10,0x26,0x10,0x2b,0x10,0x26,0x10,0x26,0x10,0x2b,0x10,0x2b,0x80, 0x18,0x20,0x18,0x20,0x26,0x20,0x20,0x20,0x20,0x60,0x26,0x10,0x2b,0x20,0x30,0x20, 0x30,0x20,0x1c,0x20,0x20,0x20,0x20,0x80,0x26,0x20,0x30,0x10,0x30,0x10,0x30,0x20, 0x39,0x20,0x26,0x10,0x2b,0x10,0x2b,0x20,0x2b,0x40,0x40,0x10,0x40,0x10,0x20,0x10, 0x20,0x10,0x2b,0x10,0x26,0x30,0x30,0x80,0x00}; unsigned char code SONG2[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//流水灯数组 unsigned char Count; unsigned int i; unsigned char j; void Time0_Init() { TMOD = 0x21; TH0 = 0x3C;//50ms TL0 = 0xB0;//50ms TH1 = 0x00; TL1 = 0x00; TR0 = 1; TR1 = 1; EA = 1; ET0 = 1; ET1 = 1; } void Time0_Int() interrupt 1 { TH0 = 0x3C; TL0 = 0xB0; Count++; if(Count%5==0)//250ms节拍 { i++; if(i=='\0') i=0; TH1=SONG1[i];//T1重装值,音乐频率 } if(Count==10)//500ms流水灯变化速度 { Count=0; j++; if(j=='\0') j=0; P0=SONG2[j];//流水灯花样 } } void Timer1Int() interrupt 3 { buzzer=~buzzer; } void main() { Time0_Init(); while(1); } |
函数play_song()包含while(1)语句。 将“ 1”更改为适当的条件。 |
不太明白你的描述,心形灯会亮吗?你的程序写的就是先播放曲子然后亮灯,所以是不可能同时动作的,想要曲子和灯一起,就不能顺序写下来 |
因为程序是一步一步执行,从主程序看,找执行播放音乐函数,播放完音乐再去执行流水灯的程序,这两个程序是排着队串行处理的,要想并行处理,可以试试将蜂鸣器发声的相关程序放在定时器中断函数中。中。 |