标题: 求助:(一个轻触开关控制2个LED灯点亮)STC单片机小程序 [打印本页]

作者: SHANGYU    时间: 2014-8-18 08:57
标题: 求助:(一个轻触开关控制2个LED灯点亮)STC单片机小程序
各位单片机师傅们好!我刚刚才学习单片机,很想做一个单片机由一个轻触开关控制2个LED灯点亮。当按一下时第一个灯亮再按一下时第一个灯灭第二个灯亮,单片机用STC12C2052或STC89C52.那位师傅有的话发给我,谢谢!
作者: liaolinhui    时间: 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);  //延时去抖
        }
   }
}
作者: admin    时间: 2014-8-18 13:03
liaolinhui 发的程序非常完美
作者: XUSHENG    时间: 2014-8-18 13:11
怎么没有按键去抖动呢?delams(10);  //延时去抖,难道是这一句吗?

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

就是这句,如果觉得时间不够可以加长,
作者: 明白    时间: 2014-8-18 21:56
一个按键控制2个LED灯点亮熄灭,
灯有4个状态:都点亮,LED1亮LED2灭、LED1灭LED2亮、都熄灭:

作者: 明白    时间: 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);//等待按键松开
       }
   }
}
作者: liaolinhui    时间: 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)这样的语句就能达到你那样的效果了
作者: SHANGYU    时间: 2014-8-19 08:17
非常感谢大家的帮助!
作者: dragon19790000    时间: 2018-1-10 18:31
正在学习!谢谢楼主!!
作者: 陆少    时间: 2022-5-5 15:42
liaolinhui 发表于 2014-8-18 12:43
#include
sbit  K1 = P0^0;
sbit  LED1 = P1^0;

为什么我秒这个程式上去不行呢
作者: hzhehe    时间: 2022-5-5 15:55
陆少 发表于 2022-5-5 15:42
为什么我秒这个程式上去不行呢

有没有这个可能,你的LED灯和你的按键没有和这个引脚连接。(你挖坟了)不是
作者: zhxiufan    时间: 2022-5-5 16:16
KEY
ORG 0000H
LJMP MAIN
ORG 0030H
MAIN:
  JB
作者: xiaoyuxinke    时间: 2022-5-8 15:07
XUSHENG 发表于 2014-8-18 13:11
怎么没有按键去抖动呢?delams(10);  //延时去抖,难道是这一句吗?

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




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