找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求大神帮忙修改stc15f104e单片机的按键延时程序

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


本人单片机小,研究了好几天也没成功。
求大神帮忙修改程序。如果发错地方了还请斑竹原谅下。
要求1:通电一直打开继电器,按下按键立刻关闭继电器并于6秒(可源码修改时间)后打开继电器。
要求2:按键按着不放只执行1次“要求1”。
要求3:按键一直放开5秒(可源码修改时间)后才能重新执行“要求1”;5秒内再次按键不能执行“要求1”,松开按键后并重新计时。

现在问题就出在 要求3上,求帮助,先谢谢大家了
#include <STC15F104E.H>

sbit OUT1=P3^2;         
sbit OUT2=P3^3;        
sbit IN0=P3^4;

unsigned char counter_100ms = 0;
unsigned char counter_poweron = 0;
unsigned char counter_poweroff = 0;
bit pressdown_flag = 0;

void Timer0Init(void)         //100毫秒@6.000MHz
{
  AUXR &= 0x7F;         //定时器时钟12T模式
  TMOD &= 0xF0;         //设置定时器模式
  TL0 = 0xB0;         //设置定时初值
  TH0 = 0x3C;         //设置定时初值
  TF0 = 0;         //清除TF0标志
  TR0 = 1;         //定时器0开始计时
  ET0 = 1;    //使能定时器0中断
  EA = 1;
}

void tm0_isr() interrupt 1 using 1
{
  counter_100ms++;
  if (counter_100ms >= 10)
  {
    counter_100ms = 0;
    counter_poweron++;
    counter_poweroff++;
  }

  if (counter_poweron >= 6)
    counter_poweron =6;        

  if (counter_poweroff >= 5)
    counter_poweroff =5;        
}

void delay40ms(void)        //@6.000MHz
{
    unsigned char i, j, k;

    i = 1;
    j = 234;
    k = 113;
    do
    {
        do
        {
            while (--k);
        } while (--j);
    } while (--i);
}

void main()
{
  OUT1=0;         
  OUT2=0;        
  Timer0Init();

  for(;;)
  {
  if ((IN0 == 0)&&(pressdown_flag == 0))//按下脚踏
    {
      delay40ms();
      if ((IN0 == 0)&&(pressdown_flag == 0))
        {
        pressdown_flag = 1;
        counter_poweron = 0;
        OUT1=1;         
        OUT2=1;
        }
    }

  if (counter_poweron == 6)
    {
    OUT1=0;         
    OUT2=0;
    }

  if (IN0 == 1)//松开脚踏
    {
    delay40ms();
    if (IN0 == 1)
      {        
      //counter_poweroff = 0; //问题所在:清零就不能再次触发,不清零就会 当无信号时没有延时立刻触发
      if (counter_poweroff == 5)
        {
        pressdown_flag = 0;
              }        
      }        
    }        
  }
}


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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