IC资料查询:
武汉力源搜索:
  资料类型
输入器件型号关键字 :

资料 货源 价格
公告
载入中...

导航
载入中...

最新更新
载入中...

新回复
载入中...

留言
载入中...

blog信息
载入中...

链接

站长个人入口













  欢迎光临文君阁!


匠人的百宝箱


hotpower的水潭


AVR猎手的地盘


电脑圈圈的家当

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

友情链接

《两条I/O,接六个按键的电路(无附加集成块)》及配套程序


//6keyfor2io.c
//
//昨日网友啊龙发布了一个《两条I/O,接六个按键的电路(无附加集成块)》
//思路非常巧妙,仅用2个IO就可区分出无键和6个单独按键共7种状态,
//不过论坛上好像有许多人没搞清怎么去区分出这些状态,
//故针对该电路写了个配套的按键检测程序,希望大家喜欢!
//如有疑问也可发送邮件至:xwjfile@21cn.com讨论
//                                  xwj    2006/06/16
#i nclude <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);
    }
}
//本程序由xwj设计的UltraEdit脚本加亮显示,如需要脚本访问我的Blog发送邮件至:xwjfile@21cn.com


原贴:两条I/O,接六个按键的电路(无附加集成块),欢迎各位排砖.

xwj 发表于 2006-6-16 12:06:00

Re:《两条I/O,接六个按键的电路(无附加集成块)》及配套程序
PSoC_Rock(游客)一个I/O口可实现8,10,12...个键,只要有AD就行了.
PSoC_Rock(游客)发表评论于2008-7-9 13:15:00
返回首页     个人主页 | 引用 | 返回 | 删除 | 回复

Re:《两条I/O,接六个按键的电路(无附加集成块)》及配套程序
ty_21ic我好像在一本电子杂志上看过,是Macrochip公司发表的,当时是和单片机画在一起,外部电路一样,只是说了原理,没有程序.
楼主辛苦了,先收下,谢谢!!!
我想用3个或更多IO口是否能扩展更多的KEY呢?
ty_21ic发表评论于2007-4-12 9:16:00
返回首页     个人主页 | 引用 | 返回 | 删除 | 回复

Re:《两条I/O,接六个按键的电路(无附加集成块)》及配套程序
CG(游客)好神奇!创意一流!
CG(游客)发表评论于2006-11-24 17:20:00
返回首页     个人主页 | 引用 | 返回 | 删除 | 回复

顶一下!
早红头晕了!
清楚时再来看!
早红发表评论于2006-11-14 16:48:00
返回首页     个人主页 | 引用 | 返回 | 删除 | 回复

回复:《两条I/O,接六个按键的电路(无附加集成块)》及配
无悔(游客)支持
无悔(游客)发表评论于2006-7-13 16:52:00
返回首页     个人主页 | 引用 | 返回 | 删除 | 回复

发表评论:
载入中...