两个IO 6按键

0

本文作者:xjtudll  发布于:2012-12-15  分类:技术心得  点击:


clip_image002

2IO6按键演示

分析

首先:IO1,IO2输出高电平

S1按下,IO2为低电平

S2按下,IO1为低电平

S3按下,IO1,IO2为0.7V(1N4148导通电压),还是低电平。

现在开始判别其他几个按键了:

1、IO1输出低电平,读IO2电平

① 如果IO2为低电平,此时应该是S4或者S6按下(S6按下时,IO2为0.7V,依旧是低电平)。

② 此时IO1输出高电平,IO2输出低电平,读IO1电平

当S4按下时,IO1为低电平。剩余的就只能是S6了。

2、IO1输出高电平,IO2输出低电平

读IO1,S5按下时,IO1为低电平。若IO1依旧为高电平,则是S6按下了。

按键扫描程序

unsigned char scan_key(void)

{

unsigned char keyval = 0;//无键,有键1~6

KEY_IO1 = 1;//释放总线

KEY_IO2 = 1;//释放总线

if (!KEY_IO1 && !KEY_IO2)

keyval = 3;//S3

else if (!KEY_IO1)

keyval = 2;//S2

else if (!KEY_IO2)

keyval = 1;//S1

else

{

//开始扫描,也要考虑小毛贼的问题~~~

KEY_IO1 = 0;//扫描

if (!KEY_IO2)

{

//这时不能立即判定S4/S6

KEY_IO1 = 1;//释放总线

KEY_IO2 = 0;//反向扫描

if (!KEY_IO1)

keyval = 4;//S4~~~

else

keyval = 6;//S6

}

else

{

//只能是S5了

KEY_IO1 = 1;//释放总线

KEY_IO2 = 0;//反向扫描

if (!KEY_IO1)

keyval = 5;//S5

//else keyval = 6;//S6//上面已判出了S6,这句是废话

}

KEY_IO1 = 1;//释放总线//已经释放~~~

KEY_IO2 = 1;//释放总线

}

return keyval;//返回键值0-无键,1~6-S1~S6键

}

流程图

clip_image003

本文标签: 键盘  单片机  算法  
本文Url: http://www.xjtudll.cn/Exp/253/ (出自: 鸟的天空)
我要引用: 点击这里获取该日志的TrackBack引用地址

相关文章:

252. 堪称一绝的“IO口扫键”法  (2012-12-12 14:47:38)

250. 基于状态机实现的按键处理算法  (2012-11-18 11:40:33)

242. EEPROM读写注意事项  (2012-9-18 15:41:6)

240. 用反相器和晶振做晶体振荡电路  (2012-8-4 11:32:34)

239. 关于数码管动态扫描  (2012-7-30 18:7:57)

237. 51单片机内部扩展RAM  (2012-6-20 12:6:45)

229. Keil新增STC 51型号  (2012-4-12 9:19:40)

209. TM87系列单片机使用及注意事项  (2011-12-7 15:47:2)

71. DB9串口引脚定义  (2010-4-12 18:43:28)

49. REG51.H详解  (2010-3-9 8:8:22)

0 Comments

Write a comment ?