单片机2个引脚识别6个按键
本帖最后由 86hupeng 于 2012-6-7 12:02 编辑利用单片机2个引脚识别6个按键
大概的程序如下,具体的程序还有待改进
#define S1 1
#define S2 2
#define S3 3
#define S4 4
#define S5 5
#define S6 6
//***************两IO出六键*************************
unsigned char KeyValue(void)
{
unsigned char KeyTemp;
if(!IO1&&!IO2) KeyTemp=S3;//如果都为低,则说明是S3
else if(!IO1) KeyTemp=S2;
else if(!IO2) KeyTemp=S1;
else
{
IO1=1;//拉高IO1,来读取状态
IO2=0;//扫描,置IO1=0;
if(!IO1) //IO1==0的话,只有S4或S5按下会出现
{ //反向扫描按键
IO2=1;//拉高IO2,来读取状态
IO1=0;
if(!IO2) KeyTemp=S4;//IO2==0的话,只能是S4按下会出现
else KeyTemp=S5;
}
else//只能是S6了*/
KeyTemp=S6;
}
IO1=1;
IO2=1;
return(KeyTemp);
GOOD 收了。{:victory:} 留着有用. 留着学习 收藏了
{:lol:} 这个不错,学习学习{:smile:} 这样每次检测是否肯定有一按键产生?如果任何按键都没按下呢?是否应该在
else//只能是S6了*/
KeyTemp=S6;
的地方改成这样呢?
else//只可能是S6了*/
{
IO2=1;//拉高IO2,来读取状态
IO1=0;
if(!IO2) KeyTemp=S6;//IO2==0的话,只能是S6按下会出现
elseKeyTemp=0;//无键
} 学习学习...一下啊.. chengtina 发表于 2012-6-7 10:47 static/image/common/back.gif
这样每次检测是否肯定有一按键产生?如果任何按键都没按下呢?是否应该在
el ...
恩,要改滴,我上面只是大改算法,不同单片机肯定还有那么一些不同的 7楼,这样的话还有可能是S4和S6按下 收下了,学习中 好像楼主发的图片挂了。。。。。。。。。。 lxa0 发表于 2012-6-7 11:50 static/image/common/back.gif
好像楼主发的图片挂了。。。。。。。。。。
的确是不知道为什么就挂了,现在重发 idea不错。 想法不错,有谁实际用过吗。 或许日后有用 顶 和当初的3个引脚22个IO一个道理 {:lol:}给力啊 作个记号,或者以后都不会用到! 正要用呢 给力,赞一个 还可以 学习学习 不懂也mark一下 太有创意了,收藏了 mark,以后可能有用
有想法。。。算法坳不清了{:dizzy:} 很好很强大。。。。。。MARK
很强大。。。。。。。。 太有学习价值了!! 或许日后有大用场! 非常好,值得研究 51单片机,key4-key6检测不到 正需要,谢谢{:lol:} 收藏了,虽然可能用到的情况不多 这个略叼~ 额外加了四个二极管,四个电阻,并且不支持组合按键,虽略屌,但不实用。 mark 不支持两个同时按哈哈哈哈哈哈 好东西,留着慢慢研究!!!!!!!!!!! 不看好这个电路。特别是S3键。 收藏 备用~ 拓展一下硬件设计的思路不错的 原理领会了 实际中一般情况下估计是不会使用的谢谢分享 思路很好,研究研究{:biggrin:} 好屌{:victory:}
页:
[1]