hehung
获得 334 次赞
帮助过788人
如果实现按下2s才开机的话是需要唤醒之后做定时器操作的,唤醒之后计时2s并且在这个计时过程中判断中断引脚的IO口的状态,如果2s以内就松开了的话就再次进入休眠模式,2s之后都没有松开就执行唤醒之后的逻辑或者看门狗复位唤醒
你出这个程序实现起来不麻烦,重要的是高电平的捕获和时间计数,不知道你使用的是什么单片机,如果是51单片机的话,51单片机有定时器和外部中断,你可以使用定时器计时。1、初始化定时器中断,中断时间是每10ms(这是10ms是根据你的状态变化的精度来的额,可以自行设置进入定时器中断的时间)进入一次中断并设置2个变量counter1(用来记录60s)和counter2(用来记录10s)来记录状态改变之后的时间;2、设置两个变量记录IO口状态(触发信号的状态),一个变量兼做current_state另一个口叫做last_state,分别表示当前IO口的状态和上一次IO口的状态,并且每次进入定时器的时候判断这个IO口的状态伪代码如下:if(current_state ==1 && last_state == 0) //收到触发信号{ counter1 = 1; //清空之前的计数值,准备重新开始计数}else if(current_state ==1 && last_state == 1) //触发信号保持{ counter1++; //开始计数}else if(current_state ==0 && last_state == 1) //触发信号关闭{ counter1 = 0; //清空计数值 counter2 = 0;}else{ counter1 = 0; //清空计数值 counter2 = 0;}if(counter1 >= 6000) //计数60s{ counter1 = 6000; //数值不在继续变大,避免数据溢出 counter2 =1; //10s即使开始}if(counter2 != 0) //开始计数{ counter2 ++; if(counter2 >= 1000) { counter2 = 1000; 关闭继电器 }}
伸缩杆其实就是电机,需要电机驱动,如果是做项目的话,伸缩杆应该是可以在某宝上面没都买的,卖家都会提供资料的,i你可以根据资料购买相应的电机驱动进行驱动
现在的单片机时cortex-M3及以上框架的,是支持中断嵌套的,一般情况先只要程序写的逻辑正确就不会存在什么影响,注意不要在嵌套中断的时候操作中断,也就是再嵌套中断的时候修改中断优先级,使能/禁能中断等