求51单片机利用定时器消抖的程序!!

就一个简单的例子,,用按键控制各LED的亮灭,,消抖必须用定时器消抖。。

定时器消抖就是利用定时器运行一段时间以消耗一段程序运行周期达到延时目的,再关闭定时器,如果你的想法是这样那很好办,一般我们都用delay函数来粗虐延时,你只要将TRx=1(定时器1或0的开关)去替换delay就行,然后根据定时器的初始化来确定延时长短,然后进去中断服务函数,重装初值后TRx=0,关闭定时器就行了,然后下一次消抖又打开,进去中断又关闭,这样反复就达到了延时目的。
有其他想法可以回复一起讨论。
希望我的回答能帮助到你。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-12-16
#include <reg51.h>//库函数
void InitTimer0(void)//定时器T0的初始化,12M晶振,延时10Ms
{
TMOD = 0x01;
TH0 = 0x0D8;
TL0 = 0x0F0;
EA = 1;
ET0 = 1;
}
void main(void)//主程序
{
InitTimer0();先初始化一下定时器T0
while(1)//程序循环
{
if(按键是否被按下)
TR0 = 1;//按键按下开始计时,溢出后中断
//还可以加其他代码
}
}
void Timer0Interrupt(void) interrupt 1
{
TR0 = 0;//关定时器
TH0 = 0x0D8;//赋初值
TL0 = 0x0F0;
//在这里加上按键的处理
}本回答被提问者采纳
第2个回答  2013-06-23
在键盘扫瞄时加入滤波 滤波时间用定时器追问

我要程序!!!

51单片机按键消抖方法介绍
1,任意引脚接按键,2,开个定时器中断几毫秒-几十毫秒中断一次,执行下面的函数。unsigned char Cnt=0;\/\/键按下时间计数器 if(!Key)\/\/如果键按下,{ if(Cnt)\/\/如果已经计数一次中断时间 { Cnt=0;\/\/清计数器 Key_flag =1;\/\/键识别成功 } else\/\/按键初次按下,{ Cnt++;\/\/计数器加1 }...

51单片机的外部中断如何写按键消抖c程序!
跟外部的按键消抖一样处理就可以了。void ext0() interrupt 0 { delay(10);\/\/ flag=0;\/\/按键有效标志=0为无效 if(P3_2){ while(!P3_2);\/\/等待按键抬起 flag=1;} }

51单片机实验(关于定时器计数器)
KEYDLY: CLR BELL ; 按键消抖动专用延时程序, ACALL DISPLY ; 在消除抖动的同时发出按键提示音 SETB BELL RET NOP NOP LJMP ERR ; 软件陷阱;DL50MS: MOV R7,#0AH ; 50毫秒延时程序DL50M1: ACALL DISPLY ; 每调用一次显示程序5MS DJNZ R7,DL50M1 ; 调用10次 RET NOP NOP LJMP ERR ; 软件陷阱;DL1...

急求利用51单片编写,,当P2.0口检测到输入第一个高电平时P2.1为1,当...
include<reg51.h> #define uint unsigned intuint num,m,n;sbit key=P2^1; \/\/将S1位定义为P1.4引脚sbit LED=P2^0; \/\/void delay(uint tt);void main(void){ LED=1; key=0; \/\/ P2=0x00;while(1) { \/\/ if(key==1) \/\/消抖 (!key)是(key==00) \/\/delay(...

51单片机如何用一个按键和一个定时器来模拟PWM控制一个LED灯的...
timeMultiple2Flag=0; \/\/清定时器复用置位标志 } } void main() \/\/测试 { u8 keyFlag=1; \/\/程序中没有消抖处理,只是简易的按键进出自锁标志 led0=ledon; \/\/先打开0号灯,用于和7号灯对比亮度 initT0(1,10,grading); \/\/1毫秒的基本定时,亮的时间1*10毫秒,暗1*(grading...

用51单片机串口发送,按键按下时发送一个数,松开后再发送一个数,然后停...
if(!key) \/\/当键按下 { delay_ms(20);\/\/延时消抖 if(!key) \/\/延时完毕键依然是按下状态 {while(!key); \/\/等待键释放 your code; \/\/发送数;} } 难道你的意思是按下键的时候一直发送?这样的话if(!key){ delay_ms(20);if(!key){your code;} } ...

51单片机外部中断下降沿去抖动。。。
外部中断,可选为下降沿触发,这样一次下降沿,就只会产生一次中断。想使用外部中断,就是要利用它的即时反应的特点,这就要求输入的信号不要抖动。为了避免在瞬间产生多次下降沿,应该在外部电路中加一个消抖电路。否则,本来是希望发生一次中断,就会产生多次响应。在中断函数中,也可以加上延时,进行消抖...

51单片机双键同时识别(长按)判断程序怎么编?
假设“1”表示键按下,那么双键同时按,肯定端口有两个“1”,只有一个键按则只有一个“1”,当然“0”表示按下的话,取反就是了。这样就好办了,将这个有效键位值赋值给累加器A,根据奇偶标志“P"的值就可以判断是单键还是双键了。

利用51单片机,4个数码管设计一个计时器,要求在数码管上显示的数据从0开...
校时电路是直接加一个脉冲信号到时计数器或者分计数器或者秒计数器来对“时”、“分”、“秒”显示数字进行校对调整。在本设计中,24小时时钟显示、秒表的设计和显示都是依靠单片机中的定时器完成。使用定时器T0产生1s的中断,在中断程序中完成每一秒数字的变化,并在主程序中动态显示该字符。其功能框图如图2.3所示。

一个51单片机电子钟程序,求详细的解释啊急急急!!!
TR0=1; \/\/开定时器 ET0=1; \/\/开定时器中断 EA=1; \/\/开总中断 while(1){ if(P0_0==0) \/\/判断P00口的按键是否按下 { for(i=5;i>0;i--)for(j=248;j>0;j--);\/\/延时消抖 if (P0_0==0) \/\/判断按键真的按下了 { second++; \/\/秒加1 if(second==60) \/\/秒加到60...

相似回答
大家正在搜