实现的方法很几种 不需要精准的话做个简易的延时函数就可以了,需要精准的时间 就用定时器做一个时间出来。
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
这段代码就可以延时500ms,在11.0592M的频率下
逻辑的话,设置1个标志位
检测到有高电平而且标志位没有置位,7脚输出,将标志位置位,然后延时500ms,再停止输出
因为有标志位,所以只会导通一次
建议用定时器做,这样你的单片机就还可以做其他的事情。
第二种逻辑 不使用标志位
检测到有高电平,7脚输出,,然后延时500ms,再停止输出,接一个死循环while(1);
因为是个死循环,所以整个代码只会执行一次,这样的方式 你这个电路可以使用,你是直接断掉单片机的电了,每次开门相当以重启单片机,单片机启动后只能执行一次 |