找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助:(一个轻触开关控制2个LED灯点亮)STC单片机小程序

  [复制链接]
跳转到指定楼层
楼主
ID:65170 发表于 2014-8-18 08:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位单片机师傅们好!我刚刚才学习单片机,很想做一个单片机由一个轻触开关控制2个LED灯点亮。当按一下时第一个灯亮再按一下时第一个灯灭第二个灯亮,单片机用STC12C2052或STC89C52.那位师傅有的话发给我,谢谢!
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏4 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:58502 发表于 2014-8-18 12:43 | 只看该作者
#include <reg51.h>
sbit  K1 = P0^0;
sbit  LED1 = P1^0;
sbit  LED2 = P1^1;
void delayms(unsigned char ms)        
// 延时子程序
{                                                
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}
main()
{
  LED1==0; //先点亮第一个灯
while(1)
  {
     if(K1 == 0)  
       {LED1==!LED1;
        LED2==!LED2;  //将两个灯取反
        delams(10);  //延时去抖
        }
   }
}

评分

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

查看全部评分

回复

使用道具 举报

板凳
ID:1 发表于 2014-8-18 13:03 | 只看该作者
liaolinhui 发的程序非常完美
回复

使用道具 举报

地板
ID:63752 发表于 2014-8-18 13:11 | 只看该作者
怎么没有按键去抖动呢?delams(10);  //延时去抖,难道是这一句吗?
回复

使用道具 举报

5#
ID:58502 发表于 2014-8-18 18:39 | 只看该作者
XUSHENG 发表于 2014-8-18 13:11
怎么没有按键去抖动呢?delams(10);  //延时去抖,难道是这一句吗?

就是这句,如果觉得时间不够可以加长,
回复

使用道具 举报

6#
ID:19715 发表于 2014-8-18 21:56 | 只看该作者
一个按键控制2个LED灯点亮熄灭,
灯有4个状态:都点亮,LED1亮LED2灭、LED1灭LED2亮、都熄灭:
回复

使用道具 举报

7#
ID:19715 发表于 2014-8-18 21:59 | 只看该作者
#include <reg51.h>
sbit  K1 = P0^0;
sbit  LED1 = P1^0;
sbit  LED2 = P1^1;
unsigned char keycon;
void delayms(unsigned char ms)        
// 延时子程序
{                                                
        unsigned char i;
        while(ms--)
        {
                for(i = 0; i < 120; i++);
        }
}
main()
{
  LED1==0; //先点亮二个灯
  LED2==0; //先点亮二个灯
  keycon=0;
  while(1)
  {
      if(K1 == 0)  
       {
          delams(10);  //延时去抖
   if(K1 == 0)  
          {
           keycon++;
           if(keycon>=4)keycon=0;
           }
           if(keycon == 0)//都亮
           {
              LED1==0; //点亮第一个灯
              LED2==0; //点亮第二个灯
            }
           if(keycon == 1) //1灭2亮
           {
              LED1==1; //熄灭第一个灯
              LED2==0; //点亮第二个灯
            }
           if(keycon == 2) //1亮2灭
           {
              LED1==0; //点亮第一个灯
              LED2==1; //熄灭第二个灯
            }
           if(keycon == 4) //都熄灭
           {
              LED1==1; //熄灭第一个灯
              LED2==1; //熄灭第二个灯
            }
          while(K1 == 0);//等待按键松开
       }
   }
}
回复

使用道具 举报

8#
ID:58502 发表于 2014-8-18 22:53 | 只看该作者
明白 发表于 2014-8-18 21:59
#include
sbit  K1 = P0^0;
sbit  LED1 = P1^0;

你这程序弄得有点长了,考虑下用循环。,看我之前做的七彩灯
#include <reg52.h>
void delay(unsigned int i);  //声明延时函数
main()
{
  unsigned char Num = 0xff;
  while (1)
  {P3  = Num;
   delay(1000);           //延时函数
   Num--;
   }

}


/*******延时函数*************/
void delay(unsigned int i)
{
    unsigned char j;
    for(i; i > 0; i--)
        for(j = 255; j > 0; j--);

}
这是之前做的七彩灯程序,如果在  while (1) 后面加if(k1==0)这样的语句就能达到你那样的效果了
回复

使用道具 举报

9#
ID:65170 发表于 2014-8-19 08:17 | 只看该作者
非常感谢大家的帮助!
回复

使用道具 举报

10#
ID:112693 发表于 2018-1-10 18:31 | 只看该作者
正在学习!谢谢楼主!!
回复

使用道具 举报

11#
ID:515309 发表于 2022-5-5 15:42 | 只看该作者
liaolinhui 发表于 2014-8-18 12:43
#include
sbit  K1 = P0^0;
sbit  LED1 = P1^0;

为什么我秒这个程式上去不行呢
回复

使用道具 举报

12#
ID:735831 发表于 2022-5-5 15:55 | 只看该作者
陆少 发表于 2022-5-5 15:42
为什么我秒这个程式上去不行呢

有没有这个可能,你的LED灯和你的按键没有和这个引脚连接。(你挖坟了)不是
回复

使用道具 举报

13#
ID:121859 发表于 2022-5-5 16:16 | 只看该作者
KEY
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
  JB
回复

使用道具 举报

14#
ID:61140 发表于 2022-5-8 15:07 | 只看该作者
XUSHENG 发表于 2014-8-18 13:11
怎么没有按键去抖动呢?delams(10);  //延时去抖,难道是这一句吗?

这一句去不了抖,只会导致LED亮的时间长10MS
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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