项目日志:Day29 --- 2020.9.10

任务:

衔接昨天遗留下的诸多问题;


上午

昨天下班前在论坛上问了录入状态的判断问题,今天的回复是这样的:

在这里插入图片描述

也就是说,我可以设置加载的数据,根据数据地址中的值来判断是否处于输入状态;
但这样就需要逐一判断了呀,一共 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 来取消;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值