我现在在用JQ8400模块播放音乐,我现在想要通过按键切换音乐,但是我第一下按下键之后松开,他就会一直重复第一段音乐的开始阶段,要一直把键按着他才会完整的播放音乐,而且我再次按下键的时候他会重复第一个音乐是为什么呢?是因为我在键按下去的时候他才发送数据吗?
单片机源程序如下:
#include <reg52.h>
#include <intrins.h>
#define u8 unsigned char
sbit sda=P1^1;
sbit key=P3^2;
unsigned char temp = 0;
void Delay1us ( int T )
{
while(T!=0)
{
_nop_();
T--;
}
}
void delay_nus(unsigned int i) //延时:i>=12 ,i的最小延时单12 us
{
i=i/10;
while(--i);
}
void delay_nms(unsigned int n) //延时n ms
{
n=n+1;
while(--n)
delay_nus(900); //延时 1ms,同时进行补偿
}
void SendData ( u8 addr )
{
u8 i;
EA = 0;/*发送时关掉中断,防止中断影响时序 */
sda = 1;/*开始拉搞 */
Delay1us ( 1000 );
sda = 0;/*开始引导码*/
Delay1us ( 3000 );/*此处延时最少要大于2ms,此参数延时为310ms */
for ( i = 0; i < 8; i++ ) /*总共8位数据 */
{
sda = 1;
if ( addr & 0x01 ) /*3:1表示数据位1,每个位用两个脉冲表示 */
{
Delay1us ( 500 );
sda = 0;
Delay1us ( 210 );
}
else /*1:3表示数据位0 ,每个位用两个脉冲表示 */
{
Delay1us ( 210 );
sda = 0;
Delay1us ( 500 );
}
addr >>= 1;
}
sda = 1;
EA = 1;
}
void main()
{
while(1) //程序主循环
{
if(key == 0)
{
delay_nms(10);
if(key == 0)
{
temp++;
while(!key);
}
}
if(temp > 2)
{
temp = 1;
}
switch(temp)
{
case 1: SendData(0x0a);
SendData(0x02);
SendData(0x0b);
break;
case 2:
SendData(0x0a);
SendData(0x01);
SendData(0x0b);
break;
}
}
}
|