不在一组IO口的矩阵按键扫描程序C语言如何处理?
在同一组IO口做4x4矩阵按键,网上扫描程序很多,也很经典。但是行线、列线不在同一组IO口,甚至比较分散的IO口进行编程网上很少.最近用STC8H4K64TL做试验,由于完整的P2口和P4口均被数码管占用,只能用其它不连续的IO作为4X4矩阵按键,自己琢磨了很久还是不得其法,特发帖求助各位大佬,谢谢!类似的,替换其中的内容即可实现不同IO集合到一起
//将键盘IO集合为一个8位数据
void Set_Key(unsigned char Dat)
{
P30 = (Dat>>0)&1;
P31 = (Dat>>1)&1;
P32 = (Dat>>2)&1;
P33 = (Dat>>3)&1;
P34 = (Dat>>4)&1;
P35 = (Dat>>5)&1;
P42 = (Dat>>6)&1;
P44 = (Dat>>7)&1;
}
unsigned char Get_Key(void)
{
unsigned char Dat;
Dat = ((P44?1:0)<<7)|((P42?1:0)<<6)|((P35?1:0)<<5)|((P34?1:0)<<4)|
((P33?1:0)<<3)|((P32?1:0)<<2)|((P31?1:0)<<1)|((P30?1:0)<<0);
return Dat;
}
dat = (P0 & 0XE0) |(P15 << 4));
dat >>= 4;
王昱顺 发表于 2024-11-22 16:54
类似的,替换其中的内容即可实现不同IO集合到一起
感谢版主!我的C语言不过关!没想到这样组合! 邮箱 发表于 2024-11-22 17:00
dat = (P0 & 0XE0) |(P15 >= 4;
非常感谢!原来是这样组合的{:4_167:} 本帖最后由 Tuier 于 2024-11-22 17:46 编辑
邮箱 发表于 2024-11-22 17:00
dat = (P0 & 0XE0) |(P15 >= 4;
unsigned char hex_num;
hex_num=(P0&0XE0)|(P15<<4);
编译通不过?
提示:main.c(146): error C193: '<<': bad operand type。不能用P15<<4这种方式{:4_167:}我原来也是用的你这种方式就是不行。
dat=(P07<<7)|(P06<<6)|(P05<<5)|(P15<<4),这种方式失败了!编译通不过!
邮箱 发表于 2024-11-22 17:00
dat = (P0 & 0XE0) |(P15 >= 4;
dat = (P0 & 0XE0) |(P15 << 4));
这个不对吧P15是bit怎么可以移4位? soma 发表于 2024-11-22 17:33
dat = (P0 & 0XE0) |(P15
(u8)P15 应该可以 本帖最后由 邮箱 于 2024-11-22 18:30 编辑
Tuier 发表于 2024-11-22 17:17
unsigned char hex_num;
hex_num=(P0&0XE0)|(P15
我回复前面的错了,看一楼的
王昱顺 发表于 2024-11-22 16:54
类似的,替换其中的内容即可实现不同IO集合到一起
版主的程序好用,矩阵按键的万能程序,可以根据实际情况接任何IO口,谢谢分享!有你更上一层楼{:4_250:}
页:
[1]
2