任务:
衔接昨天遗留下的诸多问题;
上午
昨天下班前在论坛上问了录入状态的判断问题,今天的回复是这样的:
也就是说,我可以设置加载的数据,根据数据地址中的值来判断是否处于输入状态;
但这样就需要逐一判断了呀,一共 72 个地址,这判断就有点儿慢;
昨天回家路上想到了另一个方法,真就不用键盘,光标用图标,利用一个图标变量,这样点击的时候,就能知道地址了,数据输入的话,不用键盘的模拟触控,而用一个 ans 记录按键,当扫描到按键,ans * 10 + key,每次一轮扫描的结束都将 ans 传过去,OK 键结束输入;
图标是可以了,但又有一个 BUG:不小心点了两个怎么办,同时闪是不应该存在的,也就是下一次触摸时要让上一次关停,还要处理退格取消等操作,感觉这个问题也很多呀;
我还是先试一下数据地址的判断吧;
软件仿真看出来,用判断做的话是有点慢的;
下午
用判断的方法做了一下,效果还可以,现在就是描述指针间隔问题,要做一个越界上限判断了;
先设置了一个判断标志位:
bool isNeedJudge = true; //判断录入地址的标志位;
,初值置为 true,每次扫描按键之前都要判断是否已经处于录入状态了
//扫描数据地址以判断是否在进行数据录入;
void isInput()
{
int n = 8;
while(n--) {
Send_Dwin(Read_input, 7);
delay_ms(1);
if(address1 == 0x80 && data == 1) {
Read_input[5] = 0x00;
Sdata_hidedata[5] = 0x20 + address2 * 0x10;
Sdata_showdata[5] = Sdata_hidedata[5];
Send_Dwin(Sdata_hidedata, 8); //点击后即隐藏该控件;
isNeedJudge = false; //扫描到一个后就不需再扫描了;
return;
}
Read_input[5]++;
}
Read_input[5] = 0x00;
return;
}
if(code_state == 1 && isNeedJudge) {
isInput(); //判断一下是否在输入状态;
}
上述只是用了 8 个控件做试验,现在要全部覆盖,所以要计算好描述指针的值;下述的修改优化了一下
void isInput()
{
int n = 72;
while(n--) {
Send_Dwin(Read_input, 7);
delay_ms(1);
if(address1 == 0x80 && data == 1) {
Read_input[5] = 0x00;
Sdata_hidedata[4] = 0x51 + address2 / 16;
Sdata_hidedata[5] = address2 % 16 * 0x10;
Sdata_showdata[4] = Sdata_hidedata[4];
Sdata_showdata[5] = Sdata_hidedata[5];
Sdata_showdata[7] = (address2 - 1) * 0x02; //这是解决了cancel的显示问题,要记录需要显示的地址;
Send_Dwin(Sdata_hidedata, 8);
isNeedJudge = false; //扫描到一个后就不需再扫描了;
return;
}
Read_input[5]++;
}
Read_input[5] = 0x00;
return;
}
接下来就是按键互锁问题,当没有输入时,按下 OK 键是无效的,只能按 Cancel 来取消;