使用MATLAB显示基于正点原子Mini板的触摸屏触摸轨迹

起因

最近跟着正点原子的大佬学习STM32单片机,学到了触摸实验这一节,就想着既然数据可以输出到TFTLCD屏幕上,那我能不能将数据提取出来,然后导入MATLAB中使触摸轨迹再现。

目录

起因

STM32硬软件介绍

MATLAB显示轨迹

憧憬



STM32硬软件介绍

  1. MINI板硬件连接(资料来源于正点原子)

  2. 程序分析

    ​​​​​主函数:(本实验用的是电阻屏)

     int main(void)
     { 
         delay_init();             //延时函数初始化      
        NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
        uart_init(115200);         //串口初始化为9600 
        LED_Init();                  //初始化与LED连接的硬件接口
        LCD_Init();                   //初始化LCD     
        KEY_Init();                //按键初始化             
        tp_dev.init();            //触摸屏初始化
        POINT_COLOR=RED;//设置字体为红色 
        
        LCD_ShowString(60,50,200,16,16,"Mini STM32");    
        LCD_ShowString(60,70,200,16,16,"TOUCH TEST");    
        LCD_ShowString(60,90,200,16,16,"ATOM@ALIENTEK");
        LCD_ShowString(60,110,200,16,16,"2014/3/11");
        if(tp_dev.touchtype!=0XFF)LCD_ShowString(60,130,200,16,16,"Press KEY0 to Adjust");//电阻屏才显示
        delay_ms(1500);
        Load_Drow_Dialog();         
        if(tp_dev.touchtype&0X80)ctp_test();    //电容屏测试
            else rtp_test();                         //电阻屏测试      
    }

    电阻屏测试函数   :将触摸处的坐标,存储在SendBuff数组中随后使能串口的DMA,开启传输,等待传输完成。

    void rtp_test(void)
    {
        #define TEXT_LENTH  2        //TEXT_TO_SEND字符串长度(不包含结束符)
        u8 key;
        u8 i=0;      
        u8 SendBuff[TEXT_LENTH];    
        u32 flag = 0 ;
        MYDMA_Config(DMA1_Channel4,(u32)&USART1->DR,(u32)SendBuff,TEXT_LENTH);
                     
        while(1)
        {
             key=KEY_Scan(0);
            tp_dev.scan(0);         
            if(tp_dev.sta&TP_PRES_DOWN)            //触摸屏被按下
            {    
                 if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height)
                {    
                    if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Drow_Dialog();//清除
                    else 
                    {
                        TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED);        //画图    
                        SendBuff[0] = tp_dev.x[0];        
                        SendBuff[1] = tp_dev.y[0];                                
                        USART_DMACmd(USART1,USART_DMAReq_Tx,ENABLE); //????1?DMA??        
                        MYDMA_Enable(DMA1_Channel4);//开始一次DMA传输!      
                            //等待DMA传输完成,此时我们来做另外一些事,点灯
                            //实际应用中,传输数据期间,可以执行另外的任务
                        while(1)
                        {
                            if(DMA_GetFlagStatus(DMA1_FLAG_TC4)!=RESET)//等待通道4传输完成
                            {
                                DMA_ClearFlag(DMA1_FLAG_TC4);//清除通道4传输完成标志
                                break; 
                            }
                        }
                    }
                }
            }else delay_ms(10);    //没有按键按下的时候         
            if(key==KEY0_PRES)    //KEY0按下,则执行校准程序
            {
                LCD_Clear(WHITE);//清屏
                TP_Adjust();  //屏幕校准 
                TP_Save_Adjdata();     
                Load_Drow_Dialog();
            }
            i++;
            if(i%20==0)LED0=!LED0;
        }
        
    }

    STM32的触摸屏上的输入,如下图:

     


     MATLAB显示轨迹

    close all
    clear 
    delete(instrfindall);
    s = serial('COMX', 'BaudRate', 115200, 'DataBits', 8, 'StopBits', 1, 'Parity', 'none', 'FlowControl', 'none');
    s.ReadAsyncMode = 'continuous';
    fopen(s);
    fwrite(s,1,'uint8');%向单片机发送握手信号
    while(1)
     for i = 1:1000 %循环读取 ,1000个数据
        for j =1:2
            Coordinate_Values(i,j)=fread(s,1,'uint8')  %读取 数据个数 与 类型  
        end
      i=i+1;  
     end
         fclose(s);%关闭串口
    end

    数据接收完成后在命令行窗口执行以下程序显示数据

     axis square;
      plot(Coordinate_Values(:,2),Coordinate_Values(:,1),'+')%画图% hold on;%使下次画的图不被覆盖,方便与上次图形进行对比
         axis([0,400,0,400]);%设置x,y轴坐标范围 
         axis square;
         hold on

    显示结果如下:

     

    憧憬

在本次试验,虽然实现了轨迹复现,但还存在着数据接收时间过长实时性不足的问题,第一次写文章,还有甚多不足之处,还望各位看官海涵。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值