求51单片机按键中断消抖程序 50
我要实现的功能是第一,int0口中断作为按键3个数码管输出显示,按一下显示值加1;第二,由P3.7口输出一个100周期高电平300ms低电平30ms的脉冲。我的硬件与软件...
我要实现的功能是 第一,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 展开
我的程序已经写好了,硬件也做好了,就差一个按键防抖功能不知道怎么写,硬件防抖效果不好!帮我改改程序:(防抖延时时间也在里面了)
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 展开
4个回答
展开全部
用if语句判断一下呗比如
{
if(按键1按下)
{
延时10毫秒;
if(按键1按下)
{
这里写你按键1按下要执行的程序
}
}
}
{
if(按键1按下)
{
延时10毫秒;
if(按键1按下)
{
这里写你按键1按下要执行的程序
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
兄弟,学C吧。。。。很多东西包括unity游戏脚本的C#都是和C有共通的,有了C的基础在学C++和C#都是很好上手的。JAVA 除外,JAVA那货和C是反的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
软件消抖就是延时而已,基本上10ms算稍差的,可以再加几次10ms,你的程序虽然是30ms但是确定是30ms吗?现在1T的芯片很多呢,执行效率快,防抖延时都要加大
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
建议你做一个松手检测,判断按键松开后再跳出。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询