本期為大家推送迪文開發者論壇獲獎開源案例——安卓與迪文屏的無線交互應用。工程師采用T5L智能屏,通過串口2與藍牙模塊通訊,實現與安卓手機APP進行數據交互。該方案支持迪文屏與安卓手機無延時數據收發、數據回顯、多設備通信、導出和導入文件,還支持ASCII碼、Char、GBK、UNICODE等多種編碼格式,更有意思的是實現了16*16LED點陣廣告屏的功能,讓我們一睹為快!
方案框架 方案由T5L智能屏、HC-05或HC-06藍牙模塊、安卓手機構成。T5L智能屏通過串口2與藍牙模塊通訊,實現屏幕與安卓手機的數據交互。
UI素材展示
C51工程設計
(1)串口2與藍牙通訊的代碼參考如下:
#if(1)
#define MODBUS_RECV_TIMEOUT 50
static bit is_modbus_recv_complete = 0;
static u8 modbus_recv_buff[1024];
static u16 modbus_recv_len = 0;
static u8 modbus_recv_timeout = 0;
void modbus_recv_byte(u8 byte)
{
if(is_modbus_recv_complete)
return;
if(modbus_recv_len
modbus_recv_buff[modbus_recv_len++] = byte;
modbus_recv_timeout = MODBUS_RECV_TIMEOUT;
}
void modbus_check_recv_timeout()
{
if(modbus_recv_timeout)
{
modbus_recv_timeout--;
if(modbus_recv_timeout==0)
{
is_modbus_recv_complete = 1;
}
}
}
void uart2_isr() interrupt 4
{
if(RI0)
{
RI0 = 0;
modbus_recv_byte(SBUF0);
}
}
#endif
void uart2_init(u32 baud)
{
MUX_SEL |= 0x40;
P0MDOUT &= 0xCF;
P0MDOUT |= 0x10;
ADCON = 0x80;
SCON0 = 0x50;
PCON &= 0x7F;
baud = 1024-(u16)(3225600.0f/baud);
SREL0H = (baud>>8)&0xff;
SREL0L = baud&0xff;
#if(1)
ES0 = 1;
EA = 1;
#else
ES0 = 0;
#endif
}
void uart2_send_byte(u8 byte)
{
ES0 = 0;
SBUF0 = byte;
while(!TI0);
TI0 = 0;
#if(1)
ES0 = 1;
#endif
}
void uart2_send_bytes(u8 *bytes,u16 len)
{
u16 i;
ES0 = 0;
for(i=0;i
{
SBUF0 = bytes;
while(!TI0);
TI0 = 0;
}
#if(1)
ES0 = 1;
#endif
}
char putchar(char c)
{
uart2_send_byte(c);
return c;
}
(2)給安卓APP發送數據的部分代碼如下:
u8 buff[200];
void get_str(u8 *val,u8 len)
{
u8 i; for(i=0;i
{
if(val==0xff)
{
val = 0x00;
val[i+1] = 0x00;
return;
}
}
}
void start_win_btn_click_handler(u16 btn_val)
{
if(btn_val==0x01)
{
sys_read_vp(0x2100, buff, 50);
get_str(buff,100);
uart2_send_bytes(buff, strlen(buff));
}
}
(3)接收安卓APP數據的部分代碼如下:void uart2_handler()
{
if(is_modbus_recv_complete)
{
if(modbus_recv_len==33)
{
disp_16x16_char(modbus_recv_buff+1);
}else
{
modbus_recv_buff[modbus_recv_len++] = 0;
modbus_recv_buff[modbus_recv_len++] = 0;
sys_write_vp(0x2000, modbus_recv_buff, modbus_recv_len/2+2);
}
modbus_recv_len = 0;
is_modbus_recv_complete = 0;
}
}(4)16*16點陣屏顯示的部分代碼如下:void disp_16x16_char(u8 *buff)
{
u8 i,j;
u16 val;
u16 pos = 0; for(i=0;i<32;i++)
{
j = 8;
while(j--)
{
val = (buff>>j)&0x01;
sys_write_vp(0x3000+pos, (u8*)&val, 1);
pos++;
}
}
}
-
無線
+關注
關注
31文章
5450瀏覽量
173238 -
安卓
+關注
關注
5文章
2126瀏覽量
57145 -
迪文屏
+關注
關注
3文章
78瀏覽量
5382 -
智能屏幕
+關注
關注
0文章
65瀏覽量
3323
發布評論請先 登錄
相關推薦
評論