项目日志:Day28 --- 2020.9.9

任务:

现在的要求是无键盘,也就是说只用按键去输入;
还有就是按了确认键以后,自动跳到下个输入;


上午

现在有个办法,就是我把键盘做的足够小,然后模拟精准触控,只用一块底色就好,这样也不会误触;
在这里插入图片描述

逐格跳的话,可以尝试先将触摸的数据上传,得到地址,再模拟触控下一个地址上的录入控件;这样就要设置自动上传了;

首先把每个按键地址提前定义出来,这样每次按值发送即可

//发送的按键模拟指令
char Sdata_simulateTouch_1[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x62, 0x00, 0x29};
char Sdata_simulateTouch_2[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x6C, 0x00, 0x29};
char Sdata_simulateTouch_3[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x76, 0x00, 0x29};
char Sdata_simulateTouch_4[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x62, 0x00, 0x33};
char Sdata_simulateTouch_5[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x6C, 0x00, 0x33};
char Sdata_simulateTouch_6[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x76, 0x00, 0x33};
char Sdata_simulateTouch_7[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x62, 0x00, 0x3D};
char Sdata_simulateTouch_8[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x6C, 0x00, 0x3D};
char Sdata_simulateTouch_9[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x76, 0x00, 0x3D};
char Sdata_simulateTouch_0[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x62, 0x00, 0x47};
char Sdata_simulateTouch_pot[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x6C, 0x00, 0x47};
char Sdata_simulateTouch_delete[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x80, 0x00, 0x29};
char Sdata_simulateTouch_cancel[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x80, 0x00, 0x3D};
char Sdata_simulateTouch_ok[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x80, 0x00, 0x47};
char Sdata_simulateTouch_data[14] = {0x5A, 0xA5, 0x0B, 0x82, 0x00, 0xD4, 0x5A, 0xA5, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00};

u8 Xh, Xl;      //X坐标的高位和低位;
u8 Yh, Yl;     //Y坐标的高位和低位;

接着写地址换算函数,利用返回的地址,计算下一个需要触控的 X,Y 坐标;

//通过返回的地址计算行和列;
void CalculateLocation()     
{
    int row, col;
    row = (address2 + 2) / 18;      //应该是要触摸下一个地址所对应的坐标;
    col = (address2 + 2) % 18;

    Xh = (60 + col * 56) / 255;
    Xl = (60 + col * 56) % 255;
    Yh = (205 + row * 50) / 255;
    Yl = (205 + row * 50) % 255;

    return;
}

这样按下 OK 按键后所需实行的操作就如下所示:

if (INT_H_KEY1 == 0)    //OK
{
    delay_ms(10);

    if (INT_H_KEY1 == 0)
    {
        BEEP = 1;
        if(code_state == 1) {
            Send_Dwin(Sdata_simulateTouch_ok, 14);
        }
        while (!INT_H_KEY1)
            ;
        BEEP = 0;
        delay_ms(10);   //等待中断;
        CalculateLocation();
        Sdata_simulateTouch_data[10] = Xh;
        Sdata_simulateTouch_data[11] = Xl;
        Sdata_simulateTouch_data[12] = Yh;
        Sdata_simulateTouch_data[13] = Yl;
        Send_Dwin(Sdata_simulateTouch_data, 14);
    }
}

下午

现在还有问题,就是每次输入时,原来的值不会清空,这样输入过程就会发生遮挡现象,这个好像要用描述指针来实现;
再者跳格还要优化,就是当跳到了最后一格以后,是要自动往下移一行的,也就是要加个判断;
还有序号应该是自动填充的;

初始化应该全置为隐藏,除了序号,而且序号的地址应该不能和数据地址连续,因为是要系统给值的,把序号地址独立出来,以 0x1100 作为起始地址;

隐藏的话问题有点多,怎么判断第一次输入的地址呢,好像不能读取键盘录入的状态;

调试的时候该状态栏要变色;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值