节约单片机端口资源的键盘电路
uchar getkey(void)
{
uchar x
P1=P1|0x07; /*I/O1至I/O3写“1”*/
xP10x07; /*读入I/O1至I/O3并屏蔽其它位*/
if(x= =10)
{
P1=P1|0x07;
P1=P10xfd; /*I/O2写“0”*/
x=P10x07;
x=(x+1)/2+10; /*屏蔽I/O2并转换K10至K12的键值*/
if(x = =13)
{
P1=P1|0x07;
P1=P10xfb; /*I/O3写“0”*/
x=P10x07;
x=x+13; /*屏蔽I/O3并转换K13至K15的键值*/
}
}
}
return x;
}
利用该键盘电路并根据逻辑组合原理可推断开n条I/O线可组合的按键数N为:
N=(2n-1)+(2 n-1 -1)n
表1给出了2至4条I/O线可组合的按键数。
表1 2~4条I/O线可组合的按键数
I/O线 可组合按键
2 5
3 16
4 43
3 结束语
这种新型键盘电路在使用时非常稳定可靠,节省大量的I/O端口,而且程序处理也很简洁,速率比4×4的扫描式电路还要快,因此,该电路特别适合一些引脚较少的单片机,如PIC12C508、Z86E03以及AT89C2051等。
评论