//屏幕滑动及按键检测
//返回值: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; |