精品国产Av无码久久久蜜臀-免费看a级淫秽真实动作衫视频-人妻无码一区二区三区免费视频-奶好大 好长 好紧免费视频

logo

【開源獲獎(jiǎng)案例】安卓與迪文屏的無線交互應(yīng)用

        ——來自迪文開發(fā)者論壇

本期為大家推送迪文開發(fā)者論壇獲獎(jiǎng)開源案例——安卓與迪文屏的無線交互應(yīng)用,工程師?采用T5L智能屏?,通過串口2與藍(lán)牙模塊通訊,實(shí)現(xiàn)與安卓手機(jī)APP進(jìn)行數(shù)據(jù)交互。該方案支持迪文屏與安卓手機(jī)無延時(shí)數(shù)據(jù)收發(fā)、數(shù)據(jù)回顯、多設(shè)備通信、導(dǎo)出和導(dǎo)入文件,還支持ASCII碼、Char、GBK、UNICODE等多種編碼格式,更有意思的是實(shí)現(xiàn)了16*16LED點(diǎn)陣廣告屏的功能,讓我們一睹為快!

【演示視頻】

 

完整開發(fā)資料含迪文屏DGUS工程資料與C51代碼,獲取方式:

1. 前往迪文開發(fā)者論壇獲取:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=9264

2. 微信公眾號(hào)中回復(fù)“安卓與迪文屏”獲取。

【方案框架】

方案基于T5L智能屏、HC-05或HC-06藍(lán)牙模塊、安卓手機(jī)。T5L智能屏通過串口2與藍(lán)牙模塊通訊,實(shí)現(xiàn)屏幕與安卓手機(jī)的數(shù)據(jù)交互。

.png

【UI素材展示】

UI設(shè)計(jì)

【C51工程設(shè)計(jì)】

(1)串口2與藍(lán)牙通訊的代碼參考如下:

#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<sizeof(modbus_recv_buff))

        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<len;i++)

    {

        SBUF0 = bytes;

        while(!TI0);

            TI0 = 0;

    }

    #if(1)

        ES0 = 1;

    #endif

}

 char putchar(char c)

{

    uart2_send_byte(c);

    return c;

}

(2)給安卓APP發(fā)送數(shù)據(jù)的部分代碼如下:

u8 buff[200];

void get_str(u8 *val,u8 len)

{

    u8 i; 

    for(i=0;i<len;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數(shù)據(jù)的部分代碼如下:

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點(diǎn)陣屏顯示的部分代碼如下:

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++;

        }

    }

}