LscmunaixMG 发表于 2017-8-5 18:34:45

按下按键,LED点亮,否则熄灭,按键按住不放1秒以上LED则闪烁,放开则熄灭的实现方法


/*
按下按键,LED点亮,否则熄灭,按键按住不放1秒以上LED则闪烁,放开则熄灭。
延迟时间通过晶振频率修改,LED接P3.4和VCC,按键接P3.5和GND即可。
延时时间根据晶振频率修改,型号C51指令集通用。
By:LscmunaixMG 2017-08-05
*/

#include "reg51.h"
#include "intrins.h"
sbit led=P3^4 ;//灯
sbit key=P3^5 ;//按键
void delay1ms()                //延时1毫秒
{
      unsigned char i, j;

      _nop_();
      _nop_();
      i = 12;
      j = 168;
      do
      {
                while (--j);
      } while (--i);
}

void delay10ms()                //延时10毫秒
{
      unsigned char i, j;

      _nop_();
      _nop_();
      i = 117;
      j = 183;
      do
      {
                while (--j);
      } while (--i);
}

void main() {//主函数

    unsigned int a; //按键按住时间计数
    unsigned int b; //延时计数
    while(1) { //无限循环
      if(key==0){ //按键按下则
      delay10ms(); //按键消抖
            while(key==0){ //按键按住不放则
                if(a!=1000){ //a不等于1000则
                  led=0 ; //led点亮
                  delay1ms(); //延迟1毫秒
                  a++ ; //a加1
                } else { //a等于1000则
                  led=1 ; //led熄灭
                  for(b=0;b!=250;b++)delay1ms(); //延时250毫秒
                  led=0 ; //led点亮
                  for(b=0;b!=250;b++)delay1ms(); //延时250毫秒


                }
            }
      } else { //按键没有按下则
                delay10ms(); //延时10毫秒
            led=1 ; //led熄灭
            a=0 ; //a等于0
      }


    }


}




demon 发表于 2017-8-8 20:21:58

沙发。{:5_119:}
页: [1]
查看完整版本: 按下按键,LED点亮,否则熄灭,按键按住不放1秒以上LED则闪烁,放开则熄灭的实现方法