标题:
求大神帮忙修改stc15f104e单片机的按键延时程序
[打印本页]
作者:
ziiyn
时间:
2017-6-2 20:46
标题:
求大神帮忙修改stc15f104e单片机的按键延时程序
本人单片机小,研究了好几天也没成功。
求大神帮忙修改程序。如果发错地方了还请斑竹原谅下。
要求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;
}
}
}
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1