//6keyfor2io.c
//
//昨日网友啊龙发布了一个《两条I/O,接六个按键的电路(无附加集成块)》
//思路非常巧妙,仅用2个IO就可区分出无键和6个单独按键共7种状态,
//不过论坛上好像有许多人没搞清怎么去区分出这些状态,
//故针对该电路写了个配套的按键检测程序,希望大家喜欢!
//如有疑问也可发送邮件至:xwjfile@21cn.com讨论
// xwj 2006/06/16
#include <REG52.H>
#define uchar unsigned char
sbit IO1=P1^6;
sbit IO2=P1^7;
uchar keybuf,keydat;
bit bkeyok;
void delay_us(unsigned int n)
{
while(--n);
}
void delay_ms(unsigned int n)
{
do
{
delay_us(1000);
}
while(--n);
}
bit scan_key(void)
{
uchar tempkey;
IO1=1;IO2=1;
if(!IO1)
{
if (!IO2)
tempkey="3";
else
tempkey="2";
}
else
{
if (!IO2)
tempkey="1";
else
{
IO1=0;
if (!IO2)
{
IO1=1;IO2=0;
if (!IO1)
tempkey="4";
else
tempkey="6";
}
else
{
IO1=1;IO2=0;
if (!IO1)
tempkey="5";
else
tempkey="0";
}
}
}
IO1=1;IO2=1;
if((keybuf !=0) && (keybuf == tempkey))
{
bkeyok="1";
keydat="tempkey";
}
keybuf="tempkey";
return(bkeyok);
}
uchar read_key(void)
{
bkeyok="0";
return(keydat);
}
void doanything(uchar key)
{
//----------按键处理只有有按键并正确消抖时才会进入,功能自己随便写
;
}
void main(void)
{
while(1)
{
if(scan_key())
doanything(read_key());
delay_ms(10);
}
}
文章评论(0条评论)
登录后参与讨论