Android 台灣中文網
標題: Eclipse bluetooth 傳輸問題 [打印本頁]
作者: 用點心 時間: 2014-8-5 10:32
標題: Eclipse bluetooth 傳輸問題
本帖最後由 用點心 於 2014-8-5 10:34 編輯
小弟最近在做手機與89S52的藍芽傳輸
手機端的藍芽APP是自己改寫的
遇到傳接值一些瓶頸
我希望的功能是當我89S52一直按著一個按鍵時
就會傳個值到手機手機便開始倒數
如果按鍵放開倒數計時就會停止
遇到的問題是:
當我89S52一直按著一個按鍵時
89S52便一直傳值
例如我設倒數五秒
當我一直按著一個按鍵時
手機便接收到我要倒數五秒的值
但是他卻一直不斷傳倒數五秒的值
所以手機就是一值產生新的計時器
希望板上的高手大大幫幫忙
作者: whl 時間: 2014-8-6 07:08
改寫 89s52 的 code 不要一直傳啊!
作者: 用點心 時間: 2014-8-6 21:57
請問應該如何改?
作者: whl 時間: 2014-8-7 07:02
我以為 89s52 的 code 是你自己寫的。
作者: 用點心 時間: 2014-8-7 22:59
是我自己寫的沒錯啊~
不過我不懂你要改的地方是在哪
可以舉例說明嗎?
作者: 用點心 時間: 2014-8-10 23:49
如果 沒有我要關掉摟
50碎鑽不是隨便送的
作者: CarolHsieh 時間: 2014-8-11 16:23
你可以在APP端看看能不能設定當接收到值之後
停止取值的動作
或是藍芽端看看能不能設定當值被接收後
停止傳值但不斷線
作者: 用點心 時間: 2014-8-11 19:14
我也知道是這樣
但是就是不知道指令該如何打
作者: CarolHsieh 時間: 2014-8-12 09:13
痾....
問題是你也沒貼任何程式
沒有人能幫忙看啊
作者: 用點心 時間: 2014-8-12 10:33
#include <reg51.h>
#include <reg.h>
#include <stdio.h>
#include<stdlib.h>
#include <math.h>
//#include<time.h>
//---------------------------------------------------------------------
void UART_int(void);
void delay1();
void delay2();
void delay3();
void mod1();
void mod2();
void mod3();
void mod4();
void off();
//********************************************************************
// 主程式
//********************************************************************
main()
{
SCON = 0x52; // 8 bit UART (mode 1), 啟動 Timer 1
TMOD = 0x20; // T0 mod 0, T1 mode 1
TH1 = 256-(28800/9600); //baudrate=9600
TL1 = TH1;
TR1 = 1; // 用KEIL C的 puts(), gets() 等來傳送RS232資料
ES = 1; // 開啟序列(RS232)中斷的開關
EA = 1; // 開啟中斷的總開關
}
//---------------------------------------------------
void UART_int(void) interrupt 4
{
//while(1)
//{
if(SBUF=="1")
{
mod1();
RI=0;
}
else if(SBUF=="2")
{
mod2();
RI=0;
}
else if(SBUF=="3")
{
mod3();
RI=0;
}
else if(SBUF=="4")
{
mod4();
RI=0;
}
else off;
//}
}
//-----------------------------------------------------
void mod1 ()
{
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_1>0x55&&ADCdata_1<=0xFF)
{
P0_3=0; delay2();
puts("a");delay2();
RI=0;
}
else if(ADCdata_2>0x55&&ADCdata_2<=0xFF)
{
P0_4=0; delay2();
puts("b");
RI=0;
}
else if(ADCdata_3>0x55&&ADCdata_3<=0xFF)
{
P0_5=0; delay2();
puts("c");
RI=0;
}
else if(ADCdata_4>0x55&&ADCdata_4<=0xFF)
{
P0_6=0; delay2();
puts("d");
RI=0;
}
else if(ADCdata_5>0x55&&ADCdata_5<=0xFF)
{
P0_7=0; delay2();
puts("e");
RI=0;
}
else
{
P0=0xff;
RI=0;
break;
}
if(SBUF!="2")
{
RI=0;
}
}
}
//-------------------------------------------------------------
void mod2 ()
{
P0=~0x08;
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_1>0x35&&ADCdata_1<=0xFF)
{
P0=~0x10;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_2>0x35&&ADCdata_2<=0xFF)
{
P0=~0x20;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_3>0x35&&ADCdata_3<=0xFF)
{
P0=~0x40;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_4>0x35&&ADCdata_4<=0xFF)
{
P0=~0x80;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_5>0x35&&ADCdata_5<=0xFF)
{
P0=~0x00;
delay2();
//puts("ONE!");
RI=0;
break;
}
}
}
//-------------------------------------------------------------
void mod3 ()
{
P0=~0x80;
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_5>0x35&&ADCdata_5<=0xFF)
{
P0=~0x40;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_4>0x35&&ADCdata_4<=0xFF)
{
P0=~0x20;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_3>0x35&&ADCdata_3<=0xFF)
{
P0=~0x10;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_2>0x35&&ADCdata_2<=0xFF)
{
P0=~0x08;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_1>0x35&&ADCdata_1<=0xFF)
{
P0=~0x00;
delay2();
//puts("ONE!");
RI=0;
break;
}
}
}
//--------------------------------------------------------
/*
void mod4(void){
int r;
int i;
int sides = 5;
srand((unsigned) time(NULL));
for(i=0;i<10;i++){
r = 1 + rand() % sides;
}
while(1)
{
ADCdata_1=Adc0832_1(0);
ADCdata_2=Adc0832_2(0);
ADCdata_3=Adc0832_3(0);
ADCdata_4=Adc0832_4(0);
ADCdata_5=Adc0832_5(0);
RI=0;
if(ADCdata_1>0x35&&ADCdata_1<=0xFF)
{
P0=~0x10;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_2>0x35&&ADCdata_2<=0xFF)
{
P0=~0x20;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_3>0x35&&ADCdata_3<=0xFF)
{
P0=~0x40;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_4>0x35&&ADCdata_4<=0xFF)
{
P0=~0x80;
delay2();
//puts("ONE!");
RI=0;
}
else if(ADCdata_5>0x35&&ADCdata_5<=0xFF)
{
P0=~0x00;
delay2();
//puts("ONE!");
RI=0;
break;
}
}
}
*/
//--------------------------------------------------------
//--------------------------------------------------------
//--------------------------------------------------------
void off()
{
P0=0x00;
}
//************************************************************************
unsigned int Adc0832_1(unsigned char channel)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channel==0)channel=2;
if(channel==1)channel=3;
ADDI_1=1;
ADCS_1=0;//拉低CS端
ADCLK_1=1;//拉高CLK端
ADCLK_1=0;//拉低CLK端,形成下降沿1
ADCLK_1=1;//拉高CLK端
ADDI_1=channel&0x1;
ADCLK_1=0;//拉低CLK端,形成下降沿2
ADCLK_1=1;//拉高CLK端
ADDI_1=(channel>>1)&0x1;
ADCLK_1=0;//拉低CLK端,形成下降沿3
ADDI_1=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_1;//收?据
ADCLK_1=1;
ADCLK_1=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_1;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_1;//收?据
ADCLK_1=1;
ADCLK_1=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_1=1;//拉低CS端
ADCLK_1=0;//拉低CLK端
ADDO_1=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//************************************************************************
unsigned int Adc0832_2(unsigned char channe2)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe2==0)channe2=2;
if(channe2==1)channe2=3;
ADDI_2=1;
ADCS_2=0;//拉低CS端
ADCLK_2=1;//拉高CLK端
ADCLK_2=0;//拉低CLK端,形成下降沿1
ADCLK_2=1;//拉高CLK端
ADDI_2=channe2&0x1;
ADCLK_2=0;//拉低CLK端,形成下降沿2
ADCLK_2=1;//拉高CLK端
ADDI_2=(channe2>>1)&0x1;
ADCLK_2=0;//拉低CLK端,形成下降沿3
ADDI_2=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_2;//收?据
ADCLK_2=1;
ADCLK_2=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_2;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_2;//收?据
ADCLK_2=1;
ADCLK_2=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_2=1;//拉低CS端
ADCLK_2=0;//拉低CLK端
ADDO_2=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
unsigned int Adc0832_3(unsigned char channe3)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe3==0)channe3=2;
if(channe3==1)channe3=3;
ADDI_3=1;
ADCS_3=0;//拉低CS端
ADCLK_3=1;//拉高CLK端
ADCLK_3=0;//拉低CLK端,形成下降沿1
ADCLK_3=1;//拉高CLK端
ADDI_3=channe3&0x1;
ADCLK_3=0;//拉低CLK端,形成下降沿2
ADCLK_3=1;//拉高CLK端
ADDI_3=(channe3>>1)&0x1;
ADCLK_3=0;//拉低CLK端,形成下降沿3
ADDI_3=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_3;//收?据
ADCLK_3=1;
ADCLK_3=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_3;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_3;//收?据
ADCLK_3=1;
ADCLK_3=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_3=1;//拉低CS端
ADCLK_3=0;//拉低CLK端
ADDO_3=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
unsigned int Adc0832_4(unsigned char channe4)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe4==0)channe4=2;
if(channe4==1)channe4=3;
ADDI_4=1;
ADCS_4=0;//拉低CS端
ADCLK_4=1;//拉高CLK端
ADCLK_4=0;//拉低CLK端,形成下降沿1
ADCLK_4=1;//拉高CLK端
ADDI_4=channe4&0x1;
ADCLK_4=0;//拉低CLK端,形成下降沿2
ADCLK_4=1;//拉高CLK端
ADDI_4=(channe4>>1)&0x1;
ADCLK_4=0;//拉低CLK端,形成下降沿3
ADDI_4=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_4;//收?据
ADCLK_4=1;
ADCLK_4=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_4;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_4;//收?据
ADCLK_4=1;
ADCLK_4=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_4=1;//拉低CS端
ADCLK_4=0;//拉低CLK端
ADDO_4=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
unsigned int Adc0832_5(unsigned char channe5)
{
uchar i=0;
uchar j;
uint dat=0;
uchar ndat=0;
if(channe5==0)channe5=2;
if(channe5==1)channe5=3;
ADDI_5=1;
ADCS_5=0;//拉低CS端
ADCLK_5=1;//拉高CLK端
ADCLK_5=0;//拉低CLK端,形成下降沿1
ADCLK_5=1;//拉高CLK端
ADDI_5=channe5&0x1;
ADCLK_5=0;//拉低CLK端,形成下降沿2
ADCLK_5=1;//拉高CLK端
ADDI_5=(channe5>>1)&0x1;
ADCLK_5=0;//拉低CLK端,形成下降沿3
ADDI_5=1;//控制命令?束
dat=0;
for(i=0;i<8;i++)
{
dat|=ADDO_5;//收?据
ADCLK_5=1;
ADCLK_5=0;//形成一次????
dat<<=1;
if(i==7)dat|=ADDO_2;
}
for(i=0;i<8;i++)
{
j=0;
j=j|ADDO_5;//收?据
ADCLK_5=1;
ADCLK_5=0;//形成一次????
j=j<<7;
ndat=ndat|j;
if(i<7){ndat>>=1;}
}
ADCS_5=1;//拉低CS端
ADCLK_5=0;//拉低CLK端
ADDO_5=1;//拉高?据端,回到初始??
dat<<=8;
dat|=ndat;
return(dat); //return ad data
}
//**************************************************************************
void delay1() //0.2s
{
int j,k;
for(j=0;j<20;j++)
for(k=0;k<2000;k++);
}
void delay2() //1s
{
int j,k;
for(j=0;j<20;j++)
for(k=0;k<2000;k++);
}
void delay3() //0.5s
{
int j,k;
for(j=0;j<25;j++)
for(k=0;k<2000;k++);
}
作者: CarolHsieh 時間: 2014-8-12 13:20
你好
可以貼Android端的程式嗎....
作者: 用點心 時間: 2014-8-12 13:33
Android端的程式很單純
就只有
byte[]=傳送
和
buf[]=接收而已
作者: CarolHsieh 時間: 2014-8-12 14:15
有 Handler 的部分嗎?
-
作者: 用點心 時間: 2014-8-12 15:14