外接数字小键盘坐标存储问题:如何分别将按键存入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
相关产品推荐
相关产品推荐

