迪文科技论坛

 找回密码
 立即注册
搜索
查看: 249|回复: 0

【2023.11.9获奖项目】安卓与迪文屏的无线交互应用

[复制链接]

567

主题

167

回帖

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11954
发表于 2024-1-12 09:10:42 | 显示全部楼层 |阅读模式
【开源】安卓与迪文屏的无线交互应用

1.项目简介
首先本项目分为两个部分组成,即上位机,和下位机,首先对上位机和下位机做个说明。
  • 上位机:即安卓手机App应用程序,必须在安卓手机上运行,不能在电脑上运行,用Eclipse软件开发,所用语言为java语言,在本项目中主要是利用到了手机的蓝牙模块功能(用程序描述也就是BluetootthAdapter类)。
  • 下位机:我想这个大家都应该了解,即单片机模块,在我们的这个项目中所用的就是T5L芯片的迪文屏
     
本项目所要实现的功能包括:通过安卓手机上的App中蓝牙功能和迪文屏进行无延时的数据收发,支持Ascii码,Char,GBK,UNICODE等多种编码格式,还支持数据回显(透明,自定义内容等),支持多设备并行通信, 支持导出文件和导入文件,更有意思的是实现了16*16 LED点阵广告屏的功能,在点阵屏功能中支持二次画布编辑,可以进行顺序或者逆序取模等多种功能。

2.硬件需求
基于安卓系统的智能手机一部(一般现在的智能手机都自带蓝牙功能),T5L迪文屏一块,HC-05或者HC-06(带底盘的,这样方便连线)从机蓝牙模块一个(接在T5L迪文屏串口上)。
HC-05或者HC-06主要引出四个引脚,分别为GND,VCC,RXD,TXD, 其连接很简单GND和VCC分别连到迪文屏的VCC和GND,而RXD接到迪文屏的TXD2引脚,而TXD连到迪文屏的RXD上。

3.GUI工程设计
图片素材如下:



主界面的截图如下:


4.C51工程设计

  1. <font size="3" face="宋体">#if(1)
  2. #define MODBUS_RECV_TIMEOUT        50
  3. static bit is_modbus_recv_complete = 0;
  4. static u8 modbus_recv_buff[1024];
  5. static u16 modbus_recv_len = 0;
  6. static u8 modbus_recv_timeout = 0;



  7. void modbus_recv_byte(u8 byte)
  8. {
  9.         if(is_modbus_recv_complete)
  10.                 return;
  11.         if(modbus_recv_len<sizeof(modbus_recv_buff))
  12.                 modbus_recv_buff[modbus_recv_len++] = byte;
  13.         modbus_recv_timeout = MODBUS_RECV_TIMEOUT;
  14. }



  15. void modbus_check_recv_timeout()
  16. {
  17.         if(modbus_recv_timeout)
  18.         {
  19.                 modbus_recv_timeout--;
  20.                 if(modbus_recv_timeout==0)
  21.                 {
  22.                         is_modbus_recv_complete = 1;
  23.                 }
  24.         }
  25. }


  26. void uart2_isr()        interrupt 4
  27. {
  28.         if(RI0)
  29.         {
  30.                 RI0 = 0;
  31.                 modbus_recv_byte(SBUF0);
  32.         }        
  33. }
  34. #endif


  35. void uart2_init(u32 baud)
  36. {
  37.         MUX_SEL |= 0x40;
  38.         P0MDOUT &= 0xCF;
  39.         P0MDOUT |= 0x10;
  40.         ADCON = 0x80;
  41.         SCON0 = 0x50;
  42.         PCON &= 0x7F;

  43.         baud = 1024-(u16)(3225600.0f/baud);
  44.         SREL0H = (baud>>8)&0xff;  
  45.         SREL0L = baud&0xff;

  46.         #if(1)
  47.                 ES0 = 1;
  48.                 EA = 1;

  49.         #else
  50.                 ES0 = 0;
  51.         #endif

  52. }


  53. void uart2_send_byte(u8 byte)
  54. {
  55.         ES0 = 0;
  56.         SBUF0 = byte;
  57.         while(!TI0);
  58.         TI0 = 0;
  59.         #if(1)
  60.                 ES0 = 1;
  61.         #endif
  62. }


  63. void uart2_send_bytes(u8 *bytes,u16 len)
  64. {
  65.         u16 i;

  66.         ES0 = 0;
  67.         for(i=0;i<len;i++)
  68.         {
  69.                 SBUF0 = bytes;
  70.                 while(!TI0);
  71.                 TI0 = 0;
  72.         }
  73.         #if(1)
  74.                 ES0 = 1;
  75.         #endif
  76. }



  77. char putchar(char c)
  78. {
  79.         uart2_send_byte(c);

  80.         return c;
  81. }

  82. 发送数据给安卓APP的局部代码如下:
  83. u8 buff[200];
  84. void get_str(u8 *val,u8 len)
  85. {
  86.         u8 i;

  87.         for(i=0;i<len;i++)
  88.         {
  89.                 if(val==0xff)
  90.                 {
  91.                         val = 0x00;
  92.                         val[i+1] = 0x00;
  93.                         return;
  94.                 }
  95.         }
  96. }
  97. void start_win_btn_click_handler(u16 btn_val)
  98. {
  99.         if(btn_val==0x01)
  100.         {
  101.                 sys_read_vp(0x2100, buff, 50);
  102.                 get_str(buff,100);
  103.                 uart2_send_bytes(buff, strlen(buff));
  104.         }
  105. }


  106. 接受安卓APP的局部代码如下:
  107. void uart2_handler()
  108. {
  109.         if(is_modbus_recv_complete)
  110.         {
  111.                 if(modbus_recv_len==33)
  112.                 {
  113.                         disp_16x16_char(modbus_recv_buff+1);
  114.                 }else
  115.                 {
  116.                         modbus_recv_buff[modbus_recv_len++] = 0;
  117.                         modbus_recv_buff[modbus_recv_len++] = 0;
  118.                         sys_write_vp(0x2000, modbus_recv_buff, modbus_recv_len/2+2);
  119.                 }
  120.                 modbus_recv_len = 0;
  121.                 is_modbus_recv_complete = 0;
  122.         }
  123. }



  124. 16*16点阵屏显示的局部代码如下:

  125. void disp_16x16_char(u8 *buff)
  126. {
  127.         u8 i,j;
  128.         u16 val;
  129.         u16 pos = 0;
  130.         
  131.         for(i=0;i<32;i++)
  132.         {
  133.                 j = 8;
  134.                 while(j--)
  135.                 {
  136.                         val = (buff>>j)&0x01;
  137.                         sys_write_vp(0x3000+pos, (u8*)&val, 1);
  138.                         pos++;
  139.                 }
  140.         }
  141. }</font>
复制代码

5.安卓APP
工程结构图例如下:



从上面我们可以看出,一个项目下有多个子目录:
  • Src:为源文件目录,即代码文件存放在这里;
  • Gen:在开发项目时,该目录下的R.java文件里内容会动态的变化,主要存放各种资源id;
  • bin:该目录下主要存放一下项目编译过后的文件,即包括啦.apk的安装包;
  • Res:该目录主要存放各种资源,报货图片,音频,字符,颜色等;
  • AndroidMenifest.xml:该文件主要是一个对此项目中含有那些组件描述的文件并且还可以在这里改变组件的属性,比如改变我们的应用的名字,以及图标,这里还存放权限等一些重要的东西。

6.桌面界面效果如下:


入口界面如下:



数据收发界面效果如下:




16*16点阵广告屏界面如下:





7.视频演示效果和资料



备注说明:如需源码,请参考此链接:http://inforum.dwin.com.cn:20080/forum.php?mod=viewthread&tid=9264&_dsign=c7453bce






本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|迪文科技论坛 ( 京ICP备05033781号-1 )

GMT+8, 2024-11-21 23:19 , Processed in 0.065980 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表