找回密码
 立即注册

QQ登录

只需一步,快速开始

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

[求助]大侠们,谁帮我写一个按钮点亮LED的程序?

[复制链接]
跳转到指定楼层
楼主
ID:24249 发表于 2010-6-3 20:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

我刚刚开始接触单片机,算还没完全入门呢。实验板的例程也研究的似懂非懂的。

 

题目是:

有4个按钮开关S1-S4,分别对应4个LED灯,L1-L4,(或对应4个继电器J1-J4)。

 

要求实现:

当按一S1时,L1亮,再按一下S1时,L1灯灭(或是继电器J1断开)。

如果还是按S1时,还是L1亮(或是继电器J1吸合)。

这时若是按下S2,原来亮的L1熄灭(或是继电器J1断开),

L2亮(或是继电器J2吸合)。

若再按S2,L2灭(或是继电器J2开)。

依次类推,开关的按下没有顺序规定。

 

今天搞了一下午,没有成功,我只会做到按下S1,L1亮,按下S2,L1灭,L2亮。。。。。。

无法做到,按过S1,L1亮后,再按一下S1能让L1灭掉。

请大侠们不吝赐教,程序思路怎么样,怎样做到判断再次按下S1时,灯是否是亮的。

如果可能的,大侠们能帮忙编一段程序吗?

 

[此贴子已经被作者于2010-6-3 20:39:09编辑过]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:1 发表于 2010-6-4 01:10 | 只看该作者

这个很简单啊,把下面的代码烧入51hei开发板,按S5按钮立刻看到效果,按一次亮再按一次灭……,希望对你有帮助

 

#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=~P0_0;     //如果松手则把p1.0取反后送P1.0
            }
        }
    }
}

[此贴子已经被作者于2010-6-4 1:11:17编辑过]
回复

使用道具 举报

板凳
ID:24249 发表于 2010-6-4 18:11 | 只看该作者

太感谢了,一句P0_0=~P0_0,让人豁然开朗,我今天下午实现了题目要求的功能,谢谢。

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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