我現在在用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;
}
}
}
|