单片机89c51外部摁键中断程序

单片机89c51外部摁键中断程序,第1张

按键一端接地,另一端接P3^2 就是外部中断0 ,,

sbit key = P3^2

void main()

{

EX0 = 1

IT0 = 1

EA = 1

while(1)

{

这里写你的功能;

}

}

void int0() interrupt 0

{

unsigned int i = 0

while(1)

{

if(key == 0)

{

i++

if(i >= 1000)

{

i=0

flag = 1

break

}

}

else

{

i=0

break

}

}

}

这个程序包括了消抖部分,答谨磨flag = 1的时候就表明 按键晌带按下了。 flag的变量定义,还有头文件,自己加上,在主程序你清斗检测flag的状态就可以了

比如说按键接在p3.2,用外部旦没纯中断0实现键按一次进入外部中断程序并保持,再按一下中断返回

ORG 0000H

LJMP MAIN

ORG 000BH 外部中断0的入口地址

LJMP IN0

ORG 0030H ;主程序的开始

MAIN:MOV SP,#60H

SETB EA ;开中断总允许

SETB EX0;开外部中断0允许模咐

SETB IT0 ;外部中断0触发方察歼式

SJMP $;原地踏步,可以用你自己的具体程序替代

IN0:JB P3.2,$ ;判断按键(p3.2)是否按下

JNB P3.2,$ ;判断按键(p3.2)是否释放

RETI ;中断返回断点处

END

main函数外 int flag=0while(1)中改拆侍为:

if(key==0)

{

while(key=0)

flag++

}

if(flag%2==0)

{

P0=disp[i]

i++

if(i>10)

i=0

delay(250)

}

按闹陪一次,暂停,再按继续液御蠢循环。你试试看看对不?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12538774.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存