|
遇到問題:手機發送2,3時可以控制蜂鳴器響,但是將音樂程序加入后,手機發送任何數字蜂鳴器都會滴滴響但不成音樂,以下是我寫的下位機程序,不知道哪里出錯了,請各位大神指教,謝謝謝謝!!!!急需啊!
#include <reg52.h>
#include <intrins.h>
#define uchar unsigned char //無符號字符型 宏定義 變量范圍0~255
#define uint unsigned int //無符號整型 宏定義 變量范圍0~65535
sbit Beep = P2^1 ;
uchar tmp;
uchar i,j,flag,time1,time2;
uint code array1[]={
400,400,650,650,650,1200,
400,400,650,650,650,1200,
400,400,650,650,650,650,1200,
400,400,650,650,650,1200
};
uchar code array[]={
0xfd,0x79,0xfd,0x79,0xfd,0xc7,0xfd,0x79,0xfe,0x21,0xfe,0x05,
0xfd,0x79,0xfd,0x79,0xfd,0xc7,0xfd,0x79,0xfe,0x51,0xfe,0x21,
0xfd,0x79,0xfd,0x79,0xfe,0xc0,0xfe,0x84,0xfe,0x21,0xfe,0x05,0xfd,0xc7,
0xfe,0x99,0xfe,0x99,0xfe,0x90,0xfe,0x21,0xfe,0x51,0xfe,0x21
};
void delay(uint m)
{
uint n;
for(;m>0;m--)
for(n=125;n>0;n--);
}
void init() //初始化
{
TMOD = 0x21; // 定時器1工作于8位自動重載模式, 用于產生波特率
TH1=TL1=0xFD; // 波特率9600
SCON = 0x50; // 設定串行口工作方式1 允許接收,相當于下面三句
//SM0=0;
//SM1=1;
//REN=1;
PCON =0x00; // 波特率不倍增
EA=1;
ES=1;
Beep =0; //初始化設置指示燈滅
delay(25);
Beep =1;
}
void ctrl() //根據接受信息做出操作
{
switch(tmp)
{
case '2': flag=1; break; //收到字符2,指示燈亮
case '3': flag=2; break; //收到字符3,指示燈滅
}
}
/************************************************/
void beep_with()
{
if(flag==1)
{ TH0=TL0=0;
TR1 = 1;
ET0=1;
while(1)
{
time1=array[i++];
time2=array[i++];
if(i==50)
i=0;
delay(array1[j++]);
if(j==25)
j=0;
}
}
if(flag==2)
{
TR0=0;
Beep=~Beep;
}
}
void main( )
{ init();
while(1)
{
if(RI==1) // 是否有數據到來
{
RI = 0;
tmp = SBUF;
ctrl();
beep_with();
}
}
}
void init0() interrupt 1
{
TR0=0;
Beep=~Beep;
TH0=time1;
TL0=time2;
TR0=1;
}
|
|