打印
[单片机芯片]

基于U盘读写功能的交互式界面制作系统

[复制链接]
1968|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 jinglixixi 于 2023-3-1 00:26 编辑

#申请原创#

      CH32V307是一款性能十分突出的芯片,尤其是它保持了沁恒产品独特的U盘读写功能。本系统正是建立在这一基础上,并利用串口的双向通讯性能来实现人机的交互,从而通过指令的方式来控制显示界面的交互生成。
作为设计界面所涉及的元素,如图像、语音、文字,则是以指定的命名方式存储到U盘中,从而便于以指令的方式来调用它们。
至于这些设计元素的摆放位置、呈现的色彩及大小规格等,则是提供指令中的参数来控制的。
这样就将U盘读写特点转换为界面设计元素的易更换性,从而为
交互式的指令设计界面通过了有力地支撑。
该系统以CH32V307开发板为硬件基础,采用集成开发环境MounRiver Studio来开发设计。

(1)以U盘读写功能为基础,实现了界面设计元素的文件式存储和交互式调用,从而支撑起交互式界面设计的新方法,使得界面更新无需下载处理;
(3)以U盘存储设计元素要比存储器的存储内容更丰富、性价比更高、操作更灵活。
(4)配有U盘的数据记录功能及数据曲线绘制功能,在交互式界面生成的基础上可快速地构建具体的应用系统。

   该系统主要有CH32V307开发板、SPI接口显示屏、MP3语音播放模块、U盘、TF卡、扬声器等组成,各功能模块的组成关系见图1所示,从而为构建一个具有显示和语音播放功能的交互式界面制作系统提供硬件上的支持。

1 系统硬件结构框图

图2 系统总体硬件结构图

      该系统的是由软件MounRiver Studio 设计,其软件总体框图如图3所示。
其中的指令接收环节是通过串行通讯来接收电脑发来的界面制作指令,经指令分析来调用4个功能处理模块实现不同界面生成元素的处理或是对采集数据进行记录。也就是说尽管本设计是面向交互式界面设计,但它同样具有快速构建实际应用系统的能力,如进行数据的采集、显示及记录等。
      需指出的是,由于CH32V307尚未具备音频处理能力,为了使系统具有语音播放功能,则是通过串口来控制MP3语音模块来实现该功能,相应的语音文件是被存放在TF卡中以备读取。
      至于文本处理所需的字库,在要求不高的情况下可将字库置于程序中,若字库规模较大,则可以软字库的方式存到U盘中,用到时在从U盘中读取。



图3 软件总体框图


1.图像再现
   图像再现在界面制作中起着重要的作用,它是界面美化的主要手段,以显示50*50像素点的图片为例,其图像的显示函数为:
void show_tb(unsigned int x,unsigned int y,unsigned int n)
{
  unsigned int i,j,k;
  unsigned int da=0;
  k=0;
  for(i=0;i<50;i++)
  {
    for(j=0;j<50;j++)
    {
       if(n==0) da=gImage_tb[k*2];
       if(n==1) da=gImage_pwm[k*2];
       if(n==2) da=gImage_rtc[k*2];
       if(n==3) da=gImage_adc[k*2];
       if(n==4) da=gImage_tft[k*2];
       if(n==5) da=gImage_sz[k*2];
       da=da<<8;
       if(n==0) da|=gImage_tb[k*2+1];
       if(n==1) da|=gImage_pwm[k*2+1];
       if(n==2) da|=gImage_rtc[k*2+1];
       if(n==3) da|=gImage_adc[k*2+1];
       if(n==4) da|=gImage_tft[k*2+1];
       if(n==5) da|=gImage_sz[k*2+1];
       POINT_COLOR=da;
       LCD_DrawPoint(x-j,y+i);
       k++;
    }
  }
}


注:此处是以数组中的图标数据进行测试,在使用U盘中的图文件时是直接从U盘中读取指定的文件来再现图像内容。


2.数据波形绘制
      在数据采集系统中,数据记录和数据曲线绘制是非常普遍的,为此在设计过程中也添加了数据波形的绘制功能。
 if(RxBuffer[0]=='L')
        {
            while(RxCnt < 4)
            {
               while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET)
               {
                   /* waiting for receiving finish */
               }
               RxBuffer[RxCnt] = (USART_ReceiveData(USART3));
               RxCnt=RxCnt+1;
            }
            RxCnt=0;
            y=((RxBuffer[1]-'0')*100+RxBuffer[2]-'0')*10+(RxBuffer[3]-'0');
            LCD_DrawLine(x, 200-q, x+4, 200-y);
            x=x+4;
            q=y;
            RxBuffer[0]=' ';
        }

图4 绘制数据曲线测试

3.色彩控制
      在显示文本信息或标注文本提示内容时,除了文本内容外,文字自身的色彩也是一种重要的修饰手段。为此配置了相应的色彩控制功能,其程序的基本内容如下:
        if(RxBuffer[0]=='C')    //  控制字
        {
            LCD_ShowChar(10,10,RxBuffer[0],0);
            while(RxCnt < 2)
             {
               while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET)
               {
                   /* waiting for receiving finish */
               }
               RxBuffer[RxCnt] = (USART_ReceiveData(USART3));
               RxCnt=RxCnt+1;
               LCD_ShowChar(20,10,RxBuffer[1],0);
               // 色彩值分析处理
               if(RxBuffer[1]=='R') POINT_COLOR=RED;
               if(RxBuffer[1]=='G') POINT_COLOR=GREEN;
               if(RxBuffer[1]=='B') POINT_COLOR=BLUE;
               if(RxBuffer[1]=='Y') POINT_COLOR=YELLOW;
               if(RxBuffer[1]=='W') POINT_COLOR=WHITE;
               if(RxBuffer[1]=='K') POINT_COLOR=BLACK;
            }
            RxCnt=0;
            RxBuffer[0]=' ';
      }

在波形绘制中,其色彩切换的效果如图5所示。

图5  色彩切换效果

4.数据显示
      在显示处理中,除了界面的静态显示内容外,动态地刷新数据是不可或缺的,其处理程序的基本内容如下:
if(RxBuffer[0]=='D')      //  控制字
        {
            while(RxCnt < 12)
            {
               while(USART_GetFlagStatus(USART3, USART_FLAG_RXNE) == RESET)
               {
                   /* waiting for receiving finish */
               }
               RxBuffer[RxCnt] = (USART_ReceiveData(USART3));
               RxCnt=RxCnt+1;
            }
            RxCnt=0;
            l=(RxBuffer[1]-'0')*80+(RxBuffer[2]-'0')*8;
            h=(RxBuffer[4]-'0')*160+(RxBuffer[5]-'0')*16;
            i=6;
            j=0;
            while(i < 12)
            {
                LCD_ShowChar(l+j*8,h,RxBuffer[i],0);
                i=i+1;
                j=j+1;
            }
      }


5.指令设计
      指令设计包括功能要求和及指令格式两方面的内容,为了便于指令的分析处理,每条指令是由控制字和控制参数所构成,其指令分为6类:
1)图像显示指令,控制字为P,参数有文件名称(编号)、图像尺寸及放置位置。
2)语音播放指令,控制字为M,参数为文件名称(编号)、音量及时长。
3)字符注释指令,控制字为T,参数为文字内容、字号及放置位置。
4)汉字注释指令,控制字为H,参数为汉字编码、字号及放置位置。
5)数据输出指令,控制字为D,参数为数值、字号及放置位置。
6)色彩设置指令,控制字为C,参数为色彩值。
6.指令分析处理
      指令分析处理是建立在指令集合指令格式的基础上,其处理流程是先提取控制字,然后按指令字去调用相应的处理模块来完成。在模块处理过程中,主要是按指令格式来提取相应的参数,以便实现具体的功能。

7.U盘记录数据
       借助U盘的创建文件功能及数据存储功能可进行采集数据的记录,在RTC计时器的配合下可完成图5所示的记录格式。
       此外,利用数据记录功能还可以把界面制作过程中的参数记录下来,从而为界面的保存和固化提供支撑。


图6  数据记录形式


图7  多图叠加效果

      本项目利用了CH32V307的U盘读写性能,对交互式界面设计与制作进行了技术上的可行性探索,并获得了一定的实践成果。尽管所的成果还是框架性的,还有待进一步去打磨和细化处理,但它无疑是一种的方法和一个新的发展方向,会存在一种市场的开发潜力。


演示视频:



使用特权

评论回复
沙发
ch32v307是51单片机吗

使用特权

评论回复
板凳
jinglixixi|  楼主 | 2023-3-1 23:21 | 只看该作者

应该不是

使用特权

评论回复
地板
LOVEEVER| | 2023-3-2 16:48 | 只看该作者
自带高速 USB PHY 和 ETH PHY

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

464

主题

2783

帖子

38

粉丝