首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
WJ-V4.0一个按键实现三个LED的亮灭延时控制
来源:本站整理  作者:佚名  2011-12-16 06:30:19



/*********** (C) COPYRIGHT 2011http://www.wang1jin.com************
* 程序用途:wang1jin带您从零学单片机视频教程配套程序代码
* 程序作者: wang1jin
* 程序版本: V1.0
* 编制日期: 2011-11-19
* 编译器:Keil C uVision4
* 芯片:STC89C52,12M晶振
* 技术支持:http://www.wang1jin.com
* 程序开发板:WJ-V4.0 51版本
* 提供原创51单片机、PROTEL99SE视频教程下载,欢迎大家前往论坛下载。
* 论坛地址:http://www.wang1jin.com/bbs/
********************http://www.wang1jin.com**********************/
实现功能:按下按键三个全亮,在按下LED2灭,再按下三个LED全灭,如此循环,相当于三档,第三档是停止。第一档和第二档定时5S,5S终了,停止运行,如果此时再按1次则回到第一档。如果5S之内按下,则切换到下一档。

论坛收集的程序

实现功能:按下按键三个全亮,在按下LED2灭,再按下三个LED全灭,如此循环,相当于三档,第三档是停止。第一档和第二档定时5S,5S终了,停止运行,如果此时再按1次则回到第一档。如果5S之内按下,则切换到下一档。


#include<AT89X52.H>
#define uint  unsigned int
#define uchar unsigned char

sbit Key = P3^3;
sbit LED0 = P0^0;
sbit LED1 = P0^1;
sbit LED2 = P0^2;
uchar KEY_Data = 0; //按键值
bit Time_Data = 0; //定时标志位
uchar Time = 0;  //定时计时
uchar Time_ms=0;  //MS计时
uchar Time_s =0;  //S计时
void Delay(uint i);
void READ_KEY(void);
void LED1_ON(void);
void LED2_ON(void);
void LED_OFF(void);
void main(void)
{
  TMOD=0x01;
        TH0=(65536-50000)/256;//50ms的初值
        TL0=(65536-50000)%256;
        ET0=1;
        TR0=1;
  EA=1;  
  while(1)
   {
   READ_KEY();//执行按键程序
   LED1_ON();//第1次按下执行
   LED2_ON();//第2次按下执行
   LED_OFF();//第3次按下执行
   }
}

void READ_KEY(void)
{
uchar Value =0;
uchar Value1 = 0;
if(Key == 0)//按键扫描
  {
   Delay(2000);
   if(Key ==0)
    {
     while(Key ==0 && Value1<100)//判断按键松开并执行
      {
       Value1++;
       Delay(1000);
      }
     KEY_Data++;
     Time_s = 0; //清空之前计时时间
     Time_Data = 1;//开启定时
     if(KEY_Data >2)
      {
       KEY_Data =0;
      }
    }
  }
}

void LED1_ON(void)//第一次按下点亮所有LED
{
if(Time_Data ==1 && KEY_Data ==1)
  {
   LED0 =0;
   LED1 =0;
   LED2 =0;
  }
}
void LED2_ON(void)//第二次按下关闭LED2
{
if(Time_Data ==1 && KEY_Data == 2)
  {
   LED1 = 1;
  }
}
void LED_OFF(void)//第三次按下或定时时间到关闭所有LED
{
if(KEY_Data == 0 ||Time_Data==0)
  {
   LED0 = 1;
   LED1 = 1;
   LED2 = 1;
  }
}

void timer0() interrupt 1 //定时器计时50MS
{
        TH0=(65536-50000)/256;
        TL0=(65536-50000)%256;
  if(Time_Data == 1)
   {
           Time++;
           if(Time>100)
                   {
                           Time=0;
                           Time_Data =0;
                   }
   }
}

void Delay(uint i)//延时函数
{
for(;i>0;--i);
}

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:109,535.20000 毫秒