标题: 求助一个小程序(3个按钮3个LED灯 按哪个按钮哪个灯亮其它2个灯灭) [打印本页]

作者: jkl8687    时间: 2014-8-30 13:58
标题: 求助一个小程序(3个按钮3个LED灯 按哪个按钮哪个灯亮其它2个灯灭)
我是一个刚学编序想求助的程序是3个按钮3个LED灯,按哪个按钮哪个灯亮其它2个灯灭。谢谢各位大师
作者: admin    时间: 2014-8-30 14:10
这简单本站有类似的程序 我帮你找一下
作者: daliu    时间: 2014-8-30 14:15
#include < at89x51.H> //包含文件
void delay10ms(void) //延时函数
{
  unsigned char i,j;
  for(i=20;i>0;i--)    //用循环的方法延时
  for(j=248;j>0;j--);
}


void main(void)

{P1_4=0;  //开led使能
while(1)  //死循环
    {if(P3_7==0)//以下3行是消除抖动
        {delay10ms(); //延时大约10毫秒
          if(P3_7==0)
            {
              while(P3_7==0); //松手检测,如果没有松手则一直循环
               {
              P0_0=0;     //这个灯亮 其他2个灯灭
              P0_1=1;
               P0_2=1;
                  }
            }
        }
    }
}



作者: jkl8687    时间: 2014-8-30 14:33
谢谢我试试看搞不定在请教
作者: 明白    时间: 2014-8-30 14:55
按键按下后,只有等待松开才响应
作者: jkl8687    时间: 2014-8-30 15:07
这个程序里按钮好像只有一个是吗?
作者: jkl8687    时间: 2014-8-30 16:28
为什么在P1_4=0是错误阿
作者: daliu    时间: 2014-8-30 16:36
如果 P1_4=0是错误  说明 你的头文件不对   可能呢你那缺少at89x51.H 文件
作者: liaolinhui    时间: 2014-8-30 23:51
本帖最后由 liaolinhui 于 2014-8-31 00:07 编辑
jkl8687 发表于 2014-8-30 16:28
为什么在P1_4=0是错误阿

是因为没定义,keil默认P1.4是P1^4,你要用P1_4的话需要加sbit P1_4=P1^4我也写了个小程序
#include <reg51.h>
main()
{
while(1)
{
P1=P0;//P0接按键,P1接led,直接将按键状态用led显示出来,按哪个亮那个
}
}


作者: xueyunmicheng    时间: 2014-8-31 00:14
本帖最后由 xueyunmicheng 于 2014-8-31 10:03 编辑

#include < reg51.H> //包含文件
sbit LED1 = P2^0;    //第一个灯
sbit LED2 = P2^1;    //第二个灯
sbit LED3 = P2^2;    //第三个灯
sbit key1 = P1^0;    //按键1
sbit key2 = P1^1;    //按键2
sbit key3 = P1^2;    //按键3     以上 根据自己情况修改
//============主函数=============
//============上电后三个灯全部点亮=============
//=======按键按下 释放后有效================
void main(void)
{
LED1 = 0;  //开led使能
LED2 = 0;
LED3 = 0;
while(1)  //死循环
{
   if(!key1)    //按键1按下
  {
    while(!key1);
    LED1 = 0;    //第一个亮
   LED2 = 1;    //第二个灭
   LED3 = 1;     //第三个灭
  }
   if(!key2)    //按键2按下
  {
    while(!key2);
    LED1 = 1;    //第一个灭
   LED2 = 0;    //第二个亮
   LED3 = 1;     //第三个灭
  }
   if(!key3)    //按键3按下
        {
    while(!key3);
    LED1 = 1;    //第一个灭
   LED2 = 1;    //第二个灭
   LED3 = 0;   //第三个亮
  }
}
}
作者: 神火飞鱼    时间: 2014-8-31 10:23
加点延时消抖好一点
作者: xueyunmicheng    时间: 2014-8-31 12:49
他需要的 是单稳态 不会存在按键抖动导致的 异常情况 所以 故意把消抖去掉的 要是 是双稳态 (一个按键两个状态) 就必须要加延时消抖了!
作者: XUSHENG    时间: 2014-8-31 16:01
应该要双稳态的吧,按一下,灯亮,再按,灯灭
作者: jkl8687    时间: 2014-8-31 16:33
很好谢谢,刚学单片机请各位师傅多指导
作者: xueyunmicheng    时间: 2014-8-31 20:00
他的是 按键分别点亮 该LED 其他的灭 没有要求 在按一次翻转状态 所以 被我写成上面的情况了 要是 需要反转(双稳态)的话 加一个 延时 在加一个取反 状态就反过来了!
作者: 明白    时间: 2014-8-31 20:09
单稳态没有延时,好容易产生错触发,
其实去抖动,也可以提高抗干扰。
作者: 老菜鸟    时间: 2014-9-5 15:47
p1^4 keil不默认吗?
作者: 202305415    时间: 2015-3-1 10:01
值得学习

作者: chenggong999    时间: 2017-1-12 20:43
刚好需要 我也试试




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1