求51单片机按键中断消抖程序

我要实现的功能是 第一,int0口中断作为按键 3个数码管输出显示,按一下显示值加1;第二,由P3.7口输出一个100周期高电平300ms低电平30ms的脉冲。我的硬件与软件基本做好,差一个消抖功能不行,硬件防抖也做了效果不错但是还是会出现错误,所以加个软件防抖程序:帮我改改下面的程序!谢谢!
我的程序已经写好了,硬件也做好了,就差一个按键防抖功能不知道怎么写,硬件防抖效果不好!帮我改改程序:(防抖延时时间也在里面了)

MOV B,#100
DIV AB
MOV 22H,A
DISPY1:MOV A,22H
MOVC A,@A+DPTR
MOV P0,A
MOV A,B
MOV B,#10
DIV AB
MOV 20H,A
MOV 21H,B
DISPY2:MOV A,20H
MOVC A,@A+DPTR
MOV P2,A
DISPY3:MOV A,21H
MOVC A,@A+DPTR
MOV P1,A
AJMP DISPY
IN0: MOV A,R4
CJNE A,#200,ADD1
AJMP JP1
ADD1: ADD A,#01H
MOV R4,A
JP1: NOP
RETI
DELAY_10MS: ;中断按键防抖时间10MS
MOV R5,#03H
DJNZ R5,$
RET
DELAY_30MS: ;延时30ms
MOV R5,#60 ;1T
D30_1: MOV R6,#248 ;1T
DJNZ R6,$ ;2T
DJNZ R5,D30_1 ;2T
RET ;2T
DELAY_300MS: ;延时300ms
MOV R5,#3
D300_1:
MOV R6,#200
D300_2:
MOV R7,#230
D300_3:
DJNZ R7,D300_3 ;第一层循环
DJNZ R6,D300_2 ;第二层循环
DJNZ R5,D300_1 ;第三层循环
RET
TABLE: DB 0c0H,0F9H,0A4H,0B0H,99H
DB 92H,82H,0F8H,80H,90H;0到9译码
RET
END

第1个回答  2013-12-13
用if语句判断一下呗比如
{
if(按键1按下)
{
延时10毫秒;
if(按键1按下)
{
这里写你按键1按下要执行的程序
}
}
}本回答被网友采纳
第2个回答  2015-07-27
兄弟,学C吧。。。。很多东西包括unity游戏脚本的C#都是和C有共通的,有了C的基础在学C++和C#都是很好上手的。JAVA 除外,JAVA那货和C是反的。
第3个回答  2018-04-09
软件消抖就是延时而已,基本上10ms算稍差的,可以再加几次10ms,你的程序虽然是30ms但是确定是30ms吗?现在1T的芯片很多呢,执行效率快,防抖延时都要加大
第4个回答  2013-12-17
建议你做一个松手检测,判断按键松开后再跳出。
相似回答