51定时器的使用

来源:百度知道 编辑:UC知道 时间:2024/05/14 21:59:40
在一个I/O口判断一次信号的输入后间隔10MS再判断一次,如果一样就输出高电平,并做100MS的延迟再开始下次循环,这两个延迟用定时器怎么做,16位定时器,工作模式1,头文件用AT89X51.H,说明越详细越好,最好写上执行步骤,把我弄懂了再加分

我来写两句:

这种情况,状态机来做比较好,具体点就是:一个动作随时间的进行而发生不同的动作;举个例子:常用的按键扫描,在定时中断10ms或20ms中,我们定义一个'step‘的变量,
无按键时,step=0,一旦检测到按键按下了,step=1...(下次中断来时)检测按键还处于按下(去抖),就说明按键真的按下了,置step=2,..再下次中断来时,可以做长按或按键松开处理。
key_temp=Key_Port;//定时中断每10~20ms进一次key_temp存单个时刻的按键值
switch(key_step)
{
case 0:
if(key_temp!=0xf0)//一旦检测到按键按下了,key_step就加1
key_step++;
break;
//------------------------
case 1:
if(key_temp==last_key_value)//上次有按下,如果本次还与上次 //一样就说明真有按键按下了。
{
key_press_f=1; //按键标志
key_value=key_temp;//按键值
key_step++; //进入下一阶段
}
break;
//------------------------
case 2:
if(key_temp!=last_key_value) //检测按键是否松开
{
key_step=0;
break;
}
last_key_value=key_temp;//存好本次的键值
}

言归正传,回到你的题目

//--------------------