打印

欢迎一起来讨论!单片机触摸屏界面点击坐标按键判断算法探索。

[复制链接]
4209|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
星火燎原|  楼主 | 2014-7-10 15:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
单片机触摸屏界面点击坐标按键判断是怎样实现的?有些比较好的编法?
例如:触摸屏会有几个界面,每个界面会有几个方形按键(不规则暂且不论),每个按键是在一个在x1~x2,y1~y2之间的区域。
我们编写触摸屏程序,是要判断点击了哪个键,再实现相应的功能。我的思想是将每个键区域坐标初始化在数组或结构体里,再查表判断当前点击的坐标是属于哪个按键的。不知道大家是怎么样编写这类程序的。

相关帖子

沙发
星火燎原|  楼主 | 2014-7-10 15:38 | 只看该作者
如:
#define GUI_Num  4          //假设共4个界面

#define Key1_Num 11      //界面1包含11按键数
#define Key2_Num 4        //界面2包含4按键数
#define Key3_Num 3
#define Key4_Num 8
u8 InKey_Num[GUI_Num]={11,4,3,8};//四个界面的分别对应的按键数
struct interfaceKey
{
u16 x1;
u16 y1;
u16 x2;
u16 y2;
};
struct interfaceKey key1[Key1_Num]=
{
      ......
      ......
      ......
      第11个按键初始化值
};
struct interfaceKey key2[Key2_Num]=
{
      ......
      ......
      ......
      第4个按键初始化值
};
struct interfaceKey key3[Key3_Num]=
{
     ......
      ......
      ......
      第3个按键初始化值
};
struct interfaceKey key4[Key4_Num]=
{
     ......
      ......
      ......
      第8个按键初始化值
};
初始分怎样用一个数据结构来包含:N个界面、N个界面里各包含N个键?

使用特权

评论回复
板凳
星火燎原|  楼主 | 2014-7-10 15:50 | 只看该作者
//根据扫描到的tp.x、 tp.y坐标判断属于哪个键
u8 KeyDispose(void)
{
u8 i;
u16 posX_temp,posY_temp;//坐标缓存
if(tp.sta)//按键按下了一次
{
  tp.sta=0;//清状态位.
  posX_temp= tp.x;
  posY_temp= tp.y;
  for(i=0;i<Key1_Num;i++)
  {
   if(posX_temp>key1[i].x1)
   {
    if(posY_temp>key1[i].y1)
    {
     if(posX_temp<key1[i].x2)
     {
      if(posY_temp<key1[i].y2)
      {
       return (i+1);
      }
     }
    }
   }
  }
}
return 0;
}

判断写法还有没改进的地方?

使用特权

评论回复
地板
keer_zu| | 2014-7-10 15:57 | 只看该作者
这个真没玩过,且听且学习。楼主加油!

使用特权

评论回复
5
mmuuss586| | 2014-7-10 17:54 | 只看该作者
不错,支持下

使用特权

评论回复
6
星火燎原|  楼主 | 2014-7-11 08:52 | 只看该作者
yyy71cj 发表于 2014-7-10 16:08
楼主大气开篇,可喜可贺!

不过类似这类的判断,在上位机处理的方法通常是:界面上的所有控件 ...

你的回复很好!谢谢你!
“鼠标在哪个区域发生了什么点击,不是由系统判断后告诉某个控件的,而是控件自己检测到在自己的区域内鼠标发生了什么点击事件的。”这个是什么原理呀?用单片机怎么实现?先说说,或者说这样的方式不好实现,那最适合单片机这种小系统的方式还有哪些?《编程魔法师》出来后一定买本来看。

使用特权

评论回复
7
dongranmengming| | 2014-7-11 12:11 | 只看该作者
我是通过按键中心点检测的(工程所用按键大小一致),每个按键做一个结构体,封装键值,显示字符等信息。

使用特权

评论回复
8
星火燎原|  楼主 | 2014-7-11 13:47 | 只看该作者
dongranmengming 发表于 2014-7-11 12:11
我是通过按键中心点检测的(工程所用按键大小一致),每个按键做一个结构体,封装键值,显示字符等信息。 ...

对,还应加键值进去!

使用特权

评论回复
9
dickdick117| | 2014-12-16 00:31 | 只看该作者
我也在做这个 我的方法是,做一个结构体 包含按键区域的左上角和右下角坐标,两个功能用于绘制,第二用于判断按键。还有一个字段是代表按下。在判断时,由于一块大区域的按键坐标有特殊性,先判断某一块在进去某一块进而判断。如果是整齐的行列可以先判断行,每一行一个数组,每个成员就是按键的结构体。判断行将结构体数组的首地址赋值给一个指针 用循环判断是某一个。 如果有多行继续采用类似的判断方法

使用特权

评论回复
10
keer_zu| | 2014-12-16 19:55 | 只看该作者
静等下文

使用特权

评论回复
11
苏山人家| | 2014-12-21 23:16 | 只看该作者
控件结构体封装 x1. x2. y1 .y2 .键值 .状态. 控件字符指针,四个界面,取最多界面控件个数向内存申请结构体数组,每次界面切换的时候就往这个结构体数组重写数据,有触摸时候就去数组更改控件状态
这个比楼上要省ram,但是界面切换的时候多了一步。

使用特权

评论回复
12
凉风习习| | 2015-5-21 17:36 | 只看该作者
学习了

使用特权

评论回复
13
CBeginners| | 2017-4-21 16:02 | 只看该作者
学习了

使用特权

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

本版积分规则

个人签名:ST华南代理QQ:945689011

37

主题

1077

帖子

5

粉丝