OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4844|回复: 1

屏幕滑动及按键检测(综合试验)程序问题请教

[复制链接]

49

主题

77

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
331
金钱
331
注册时间
2013-3-27
在线时间
9 小时
发表于 2013-7-8 14:35:51 | 显示全部楼层 |阅读模式

//屏幕滑动及按键检测
//返回值:0~8,被双击的图标编号.     
//       0xff,没有任何图标被双击或者按下
u8 spb_move_chk(void)
{  
 u8 i=0xff;
 u8 movecnt=0; //得到滑动点数
 tp_dev.scan(0);//扫描                  
 if(tp_dev.sta&TP_PRES_DOWN)//有按键被按下
 {
  if(spbdev.spbsta&0X80)//已经被标记了
  {
   movecnt=spbdev.spbsta&0X3F;//得到滑动点数
   if(gui_disabs(spbdev.curxpos,tp_dev.x)>=SPB_MOVE_WIN)//移动大于等于SPB_MOVE_WIN个点
   {
    if(movecnt<SPB_MOVE_MIN/SPB_MOVE_WIN)spbdev.spbsta++;//点数增加1 
   }
  }          
   spbdev.curxpos=tp_dev.x;    //记录当前坐标
   spbdev.curypos=tp_dev.y;    //记录当前坐标 
   if((spbdev.spbsta&0X80)==0)    //按键第一次被按下
  {
   spbdev.spbsta=0;      //状态清零
   spbdev.spbsta|=1<<7;    //标记按下    
   spbdev.oldxpos=tp_dev.x;   //记录按下时的坐标
  }else if(spbdev.spbsta&0X40)   //有滑动
  {
   if(spbdev.oldxpos>tp_dev.x)   //x左移,屏幕pos右移
   {
    if(SLCD.pos<240)SLCD.pos+=spbdev.oldxpos-tp_dev.x;
    if(SLCD.pos>240)SLCD.pos=240; //溢出了.
   }else         //右移,屏幕pos左移
   {      
    if(SLCD.pos>0)SLCD.pos-=tp_dev.x-spbdev.oldxpos;
    if(SLCD.pos>240)SLCD.pos=0;  //溢出了.       
   }    
   spbdev.oldxpos=tp_dev.x;
   SLCD.show(SLCD.pos);
   }else if((gui_disabs(spbdev.curxpos,spbdev.oldxpos)>=SPB_MOVE_MIN)&&(movecnt>=SPB_MOVE_MIN/SPB_MOVE_WIN))//滑动距离超过SPB_MOVE_MIN,并且检测到的有效滑动数不少于SPB_MOVE_MIN/SPB_MOVE_WIN.
  {
   spbdev.spbsta|=1<<6;//标记滑动 
  }  
 }else //按键松开了
 {
  if(spbdev.spbsta&0x80)//之前有按下
  {  
   if(spbdev.spbsta&0X40)//有滑动
   {             
    if(SLCD.frame==1)//原来在第二帧,只能右移
    { 
     if((240-SLCD.pos)>SPB_MOVE_ACT)
     {
      SLCD.move(1,5,SLCD.pos);
      SLCD.pos=0;
     }else
     {
      SLCD.move(0,5,SLCD.pos);
      SLCD.pos=240;
     }   
    }else    //原来在第一帧,只能左移  0开始
    {
     if(SLCD.pos>SPB_MOVE_ACT)
     {
      SLCD.move(0,5,SLCD.pos);
      SLCD.pos=240;
     }else
     { 
      SLCD.move(1,5,SLCD.pos);
      SLCD.pos=0;
     }    

    }
     spbdev.selico=0xff;//取消spbdev.selico原先的设置 
   }else //属于点按.
   {
    for(i=0;i<9;i++)
    {
     if((spbdev.curxpos>spbdev.icos[SLCD.frame].x)&&(spbdev.curxpos<spbdev.icos[SLCD.frame].x+spbdev.icos[SLCD.frame].width)&&(spbdev.curxpos>spbdev.icos[SLCD.frame].x)&&
        (spbdev.curypos<spbdev.icos[SLCD.frame].y+spbdev.icos[SLCD.frame].height))
     {
      break;//得到选中的编号 
     }
    }
    if(i<9)
    {
     if(i!=spbdev.selico)//选中了不同的图标,切换图标
     {
      spb_set_sel(i);
      i=0xff;
     }else
     {
      spbdev.selico=0XFF;//发生了双击,重新复位selico.
     }
    }else i=0xff;//无效的点按.
   }
  }        
  spbdev.spbsta=0;//清空标志
 }
 return i;

}

其中,if(SLCD.pos>240)SLCD.pos=0;  //溢出了
是不是要改成if(SLCD.pos<0)SLCD.pos=0; 

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-7-8 15:43:43 | 显示全部楼层
你测试下试试.就知道了
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-18 02:29

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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