|
发表于 2008-12-30 00:04:11
|
显示全部楼层
三菱键盘扫描方法:
其实【13楼】 h2feo4 无机酸 的两个贴子中已经对各种键盘的扫描方式作了很详尽,很深入的介绍,这里再简单地重复一下。
以51单片机准双向口的IO为例,采用定时中断对两口线分三次扫描,扫描结果记录于静态变量Key_state中。对照下图,对于按下K1~K6,Key_state可以分别得到不同的值:0x06,0x09,0x00,0x0e,0x0d,0x0c
主程序中只要根据Key_state的值,并加以消抖,即可进行判断并执行相应的动作。
void Key_scan() interrupt 1 //定时器T0中断函数
{
TH0 = 0xd9; //重装定时器,10ms@12MHz OSC
TL0 = 0xf0;
Key_state = 0; //初始化按键状态变量
if (GPIO1) Key_state |= 0x08; //检测两口线状态,并记录
if (GPIO2) Key_state |= 0x04;
GPIO1 = 0; //将口线1置0
_nop();
_nop(); //等待口线2状态稳定
if (GPIO2) Key_state |= 0x02; //记录口线2状态
GPIO1 = 1; //恢复口线1为1
GPIO2 = 0; //将口线2置0
_nop();
_nop(); //等待口线1状态稳定
if (GPIO1) Key_state |= 0x01; //记录口线1状态
GPIO2 = 1; //恢复口线1为1
}
(原文件名:2io_6key.PNG) |
|