单片机按键控制?

[复制链接]
2767|8
 楼主| 090104011023 发表于 2013-4-11 11:00 | 显示全部楼层 |阅读模式
单片机如何用一个按键控制灯的开与关, 按一下常亮, 再按一下就不亮了?程序怎么写,我试了好多次都不行啊。
fp123123 发表于 2013-4-11 11:39 | 显示全部楼层
void main()
{
  char lightOn = 0;

  for(;;)
  {
    if(检测到按键按下)
    {
      lightOn = ! lightOn;
      延时 300ms 作用是消抖动
    }

    if(lightOn) 开灯
    else 关灯
  }
}
dirtwillfly 发表于 2013-4-11 12:27 | 显示全部楼层
貌似最简单的程序了
jiaxinhui 发表于 2013-4-11 21:34 | 显示全部楼层
你首先得做好按键检测程序,这个程序好了,然后在按键检测程序中,当有按键按下的时候给给控制灯的那个IO口取反就行。
hlzhaowu 发表于 2013-4-11 22:51 | 显示全部楼层
楼主,是用啥的单片机写不出来呢
rgh111 发表于 2013-4-11 23:10 | 显示全部楼层
感觉缺乏基本的抽象思维能力啊,悲催啦
mcu5i51 发表于 2013-4-12 09:42 | 显示全部楼层
写一个通用的按键代码,不要嫌麻烦,以后所有的按键都用这个了,最多根据需要小改一下;
之后我的KEY函数这样操作就好了;
while(1)
{
...
    Key = GetKey();
    if(Key.One == K_On)
    {
      LED = ~LED;
    }
   ...

}
这里的key.one是单次触发的,在按键放开之前只会有一次为键值,其他时候为无建
简单的代码
u8 GetKey()
{
u8 key;
key = Keypin;
delay();
if(key == KeyPin)return key;
return 0;
}

main()
{
...
if(GetKey() == KEY_ON) Led = ~Led; 读取按键有效 反转灯状态
while(GetKey() != 0); 等待按键放开
...
}

lks2803173 发表于 2013-4-12 22:40 | 显示全部楼层
void aj()
{
  char i = 0;
    if(检测到按键按下)
    {
  
      延时 300ms 作用是消抖动
     if(检测到按键按下)
     { i++;}
    }
if(i%2==0)  led=1;
if(i%2!=0)  led=0;
}
outstanding 发表于 2013-7-20 15:13 | 显示全部楼层
这个太简单了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

80

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部