当有脉冲输入的时候,启动定时器,并对定时器的计数值进行清零
每一次脉冲输入都清零计数值,当脉冲消失后,定时器的计数值达到指定时间则关闭
关闭的同时,调用其它函数,例如你的继电器控制
需要说明的是,我使用的开发板和你的不见得一样,所以端口的使用只能你自己修改了
但程序已经经过硬件测试成功,请放心使用,如果满意记得采纳哦
/***************************************************************************/
#include <reg51.h> //51单片机通用头文件
sbit P24=P1^0sbit P25=P1^1sbit P26=P1^2sbit P27=P1^3//数码管位选端口
char table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}//数码管显示编码
sbit k=P3^7sbit KK=P1^4//定义按键和继电器端口
int t,n,s,fe=0
/***************************************************************************/
void YS(int hs){int hkfor(hs>0hs--){for(hk=100hk>0hk--)}}//延时函数
/***************************************************************************/
void XS(int xs)//数码管显示
{
char d1,d2,d3,d4
d1=(xs/1)%10 d2=(xs/10)%10 d3=(xs/100)%10 d4=(xs/1000)%10
P0=table[d1]P27=0YS(5)P27=1
P0=table[d2]P26=0YS(5)P26=1
P0=table[d3]P25=0YS(5)P25=1
P0=table[d4]P24=0YS(5)P24=1
}
/***************************************************************************/
void main(void)//主函数
{
TMOD=0x01EA=1ET0=1KK=0//定时器初始化
TH0=(65536-921)/256TL0=(65536-921)%256//定时器初值
while(1)
{
XS(t)//调用数码管显示函数
if(k==0)//如果按键被按下
{
YS(10)//延时去抖动
if(k==0)//如果是有效按键
{
TR0=1//启动定时器,开始计时
n=0//每次按键都清空定时计数
t++//按键值累加一次
KK=1//继电器打开
while(!k){XS(t)}//等待按键松开,并调用数码管显示,避免黑屏
}
}
if(fe==1)//如果没按键输入
{
fe=0t=0//清空按键计数值,并设置标识符
KK=0//继电器吸合
}
}
}
/***************************************************************************/
void int1() interrupt 1 //定时器中断
{
TH0=(65536-1000)/256TL0=(65536-1000)%256n++//n等于100时,则为1秒
if(n>1000){TR0=0n=0fe=1}//如果达到指定时间,则关闭定时器,并设置标识符
}
#include <stdio.h>void main()
{
memcpy((void *)0x1000, (void *)0x2000, 100)
}