You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

外接数字小键盘坐标存储问题:如何分别将按键存入x、y变量

问题分析与解决方案

原代码的核心问题是:每次按下数字键时,两个判断数字键的if语句会依次执行。第一次按数字键时,第一个if把值赋给x并将counter加1,紧接着第二个if因为counter>0的条件成立,会立刻把同一个数字赋给y,导致x和y始终相同。

修正思路

用counter明确标记当前需要输入的是x还是y:

  • counter=0:等待输入x坐标
  • counter=1:等待输入y坐标
  • 输入完x后counter变为1,输入完y后counter保持1(直到按下A键重置)
  • 按下A键时执行绘制,并重置counter为0,准备下一次坐标输入

修正后的代码

// 初始化x、y为合理默认值,避免首次按A键使用未定义值
int x = 0, y = 0;
int counter = 0;
// 补充数组类型定义
int numPad[16] = {1,4,7,14,2,5,8,0,3,6,9,15,10,11,12,13};

// 按键处理逻辑
if(numPad[key] < 10){
    if(counter == 0){
        // 第一次按数字键,存入x坐标
        x = numPad[key] * 16;
        counter = 1; // 切换到等待输入y的状态
    } else if(counter == 1){
        // 第二次按数字键,存入y坐标
        y = numPad[key] * 8;
    }
}
if(numPad[key] == 10){
    LCD_DrawPoint(x, y, WHITE);
    counter = 0; // 重置状态,准备下一次坐标输入
}

额外优化建议

  • 可以在LCD上添加状态提示(比如显示"输入X"或"输入Y"),提升操作直观性
  • 若需要修改已输入的坐标,可添加清除键(比如绑定B键对应值11),按下后重置counter为0并清空x、y值

内容的提问来源于stack exchange,提问作者Laros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 17:31:07