找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 6668|回复: 18
打印 上一主题 下一主题
收起左侧

求助一个小程序(3个按钮3个LED灯 按哪个按钮哪个灯亮其它2个灯灭)

  [复制链接]
跳转到指定楼层
楼主
ID:65605 发表于 2014-8-30 13:58 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我是一个刚学编序想求助的程序是3个按钮3个LED灯,按哪个按钮哪个灯亮其它2个灯灭。谢谢各位大师

评分

参与人数 1威望 +5 黑币 +5 收起 理由
202305415 + 5 + 5 赞一个!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏3 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2014-8-30 14:10 | 只看该作者
这简单本站有类似的程序 我帮你找一下
回复

使用道具 举报

板凳
ID:65608 发表于 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;
                  }
            }
        }
    }
}


评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 帮助他人的奖励

查看全部评分

回复

使用道具 举报

地板
ID:65605 发表于 2014-8-30 14:33 来自手机 | 只看该作者
谢谢我试试看搞不定在请教
回复

使用道具 举报

5#
ID:19715 发表于 2014-8-30 14:55 | 只看该作者
按键按下后,只有等待松开才响应
回复

使用道具 举报

6#
ID:65605 发表于 2014-8-30 15:07 来自手机 | 只看该作者
这个程序里按钮好像只有一个是吗?
回复

使用道具 举报

7#
ID:65605 发表于 2014-8-30 16:28 来自手机 | 只看该作者
为什么在P1_4=0是错误阿
回复

使用道具 举报

8#
ID:65608 发表于 2014-8-30 16:36 | 只看该作者
如果 P1_4=0是错误  说明 你的头文件不对   可能呢你那缺少at89x51.H 文件
回复

使用道具 举报

9#
ID:58502 发表于 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显示出来,按哪个亮那个
}
}

评分

参与人数 1威望 +40 黑币 +40 收起 理由
admin + 40 + 40 赞一个! 回答问题积分奖励!!

查看全部评分

回复

使用道具 举报

10#
ID:63997 发表于 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;   //第三个亮
  }
}
}

评分

参与人数 1威望 +50 黑币 +50 收起 理由
admin + 50 + 50 回答问题积分奖励!!

查看全部评分

回复

使用道具 举报

11#
ID:65400 发表于 2014-8-31 10:23 来自手机 | 只看该作者
加点延时消抖好一点
回复

使用道具 举报

12#
ID:63997 发表于 2014-8-31 12:49 | 只看该作者
他需要的 是单稳态 不会存在按键抖动导致的 异常情况 所以 故意把消抖去掉的 要是 是双稳态 (一个按键两个状态) 就必须要加延时消抖了!
回复

使用道具 举报

13#
ID:63752 发表于 2014-8-31 16:01 来自手机 | 只看该作者
应该要双稳态的吧,按一下,灯亮,再按,灯灭
回复

使用道具 举报

14#
ID:65605 发表于 2014-8-31 16:33 来自手机 | 只看该作者
很好谢谢,刚学单片机请各位师傅多指导
回复

使用道具 举报

15#
ID:63997 发表于 2014-8-31 20:00 | 只看该作者
他的是 按键分别点亮 该LED 其他的灭 没有要求 在按一次翻转状态 所以 被我写成上面的情况了 要是 需要反转(双稳态)的话 加一个 延时 在加一个取反 状态就反过来了!
回复

使用道具 举报

16#
ID:19715 发表于 2014-8-31 20:09 | 只看该作者
单稳态没有延时,好容易产生错触发,
其实去抖动,也可以提高抗干扰。

评分

参与人数 1威望 +6 黑币 +6 收起 理由
daliu + 6 + 6 很给力!

查看全部评分

回复

使用道具 举报

17#
ID:65837 发表于 2014-9-5 15:47 | 只看该作者
p1^4 keil不默认吗?
回复

使用道具 举报

18#
ID:73964 发表于 2015-3-1 10:01 | 只看该作者
值得学习
回复

使用道具 举报

19#
ID:158734 发表于 2017-1-12 20:43 | 只看该作者
刚好需要 我也试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表