繁体中文
高级搜索
 
首页 | 电子技术应用 | 行业最新动态 | 行业最新产品 | 软件资料下载 | 电路图纸欣赏 | 博客文章精选 | 电子精品论坛 | 电子技术贴吧

当前位置:首页 >> 博客文章精选 >> 单片机-----博客 >> 《两条I/O,接六个按键的电路(无附加集成块)》及配套程序【转】
《两条I/O,接六个按键的电路(无附加集成块)》及配套程序【转】
作者:   来源: 发表时间:2006-12-08  字号:  

转来留着备用,原理尚未研究,呵呵。

点击看大图
//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


!注意:如果您发现此文章出现影响您的阅读的状况,请从浏览器地址栏里复制本文的链接到留言本报告给站长解决!
  • 上一篇: 在程序中使用宏实现跨PAGE调用和跳转
  • 下一篇: 为arm,51与优盘进行串口通信的东东

  • >> 联系我们请给我们留言·留言本
    本站所有提供的信息软件资料均来自网络,版权及著作权归原作者所有,如果无意中侵犯了您的相关权利或触及法律法规,请给我们留言, 我们将在24小时内删除。
      浙ICP备05071687号  电子技术精品网