本帖最后由 zhange 于 2024-6-5 13:47 编辑
看了试验箱的程序和冲哥讲的不一样,看得不是很懂
各位大佬 u8 code T_KeyTable[16] = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0}; 为啥要设置为这几个数字
主要是这几个数字的由来不懂 其他都懂了
- u8 code T_KeyTable[16] = {0,1,2,0,3,0,0,0,4,0,0,0,0,0,0,0};
复制代码
-
- void IO_KeyScan(void) //50ms call
- {
- u8 j;
-
- j = IO_KeyState1; //保存上一次状态
-
- P0 = 0xf0; //X低,读Y
- IO_KeyDelay();
- IO_KeyState1 = P0 & 0xf0;
-
- P0 = 0x0f; //Y低,读X
- IO_KeyDelay();
- IO_KeyState1 |= (P0 & 0x0f);
- IO_KeyState1 ^= 0xff; //取反
-
- if(j == IO_KeyState1) //连续两次读相等
- {
- j = IO_KeyState;
- IO_KeyState = IO_KeyState1;
- if(IO_KeyState != 0) //有键按下
- {
- F0 = 0;
- if(j == 0) F0 = 1; //第一次按下
- else if(j == IO_KeyState)
- {
- if(++IO_KeyHoldCnt >= 20) //1秒后重键
- {
- IO_KeyHoldCnt = 18;
- F0 = 1;
- }
- }
- if(F0)
- {
- j = T_KeyTable[IO_KeyState >> 4];
- if((j != 0) && (T_KeyTable[IO_KeyState& 0x0f] != 0))
- KeyCode = (j - 1) * 4 + T_KeyTable[IO_KeyState & 0x0f] + 16; //计算键码,17~32
- }
- }
- else IO_KeyHoldCnt = 0;
- }
- P0 = 0xff;
- }
复制代码
这俩一结合 如何算的键值呀
上边那个数组为啥要取那几个值??????
有没有讲解视频???
|