第1个回答 2019-10-20
如果你的计数过程不是非常快的话,可以不用外部中断。
include
<reg51.h>
void
xianshi(long
unsigned
int
i)
//显示子函数,用来显示数字。
{
}
void
delay()
//延迟函数
{
int
x,y;
for(x=0;x<100;x++)
//修改数值,可改变延迟时间
for(y=0;y<10;y++);
//修改数值,可改变延迟时间
}
main()
{
long
unsigned
int
a=0;
//定义无符号长整型
a
while(1)
//大循环
{
if(P1_0==0)
//判断脉冲信号,如果为低,进入计数,如果为高,则继续判断。
{
delay();
//等待一下,消抖,防止线路干扰等情况。
if(P1_0==0)
//第二次判断
{
a++;
//计数加1
xianshi(a);
//执行显示函数,现实数字。
while(P1_0==0);
//脱离计数检测,即“松手检测”,当被测物体一直在时,防止重复计数。
}
}
}
}
说明:自己现写的程序,呵呵,不知道有没有错误。
P1.0口接脉冲输入,可以自己定义其它接口。
当输入电平为低时,a就会自增一次,一般情况下可以计数到6万多或者几十亿。
可以根据实际情况,如被测物体速度、晶振频率等,修改delay函数中的值,以适合实际测量。
没有写显示函数,这取决于你要用的显示方式。