
sbit key=P2.0char keyLastStatus=0
keyLastStatus=key //初始化
while (1)
{
if(key==1 &&keyLastStatus!=key) Todo()//上升沿
if(key==0 &&keyLastStatus!=key) Todo()//下降沿
keyLastStatus=key //记录上一次的状态
}
外部中断的常用功能外部中断经常用来记录外部脉冲的个数,也就是当我们使用外部中断1时,如果想记录自身单片机的某个引脚的下降沿个数,只需用杜邦线把这个引脚和P3.3连接即可。
比如P2.3引脚产生这样的电平无规律跳转,则下降沿的个数为5
所以我们就用外部中断1来实现记录K4按键从按下到松手的抖动过程中经历了多少个下降沿,把下降沿的个数显示在数码管上。
2.程序思路
我们定义一个16位的全局变量pulse用来记录P2.3下降沿的个数,在中断函数中的任务就是简单的pulse自加,因为引脚遇到下降沿就会进入中断函数。
在主函数里就是负责数码管显示即可。
3.代码#include
#include //详见第六章第8讲
u16 pulse=0
void main()
{
u16 x,PULSE_buf
IT1 = 1 //下降沿触发模式
EX1 = 1
EA = 1
LED_Init()//初始化LED硬件模块
KEY_Init()//初始化按键功能模块
ShowNumber(pulse)
while(1)
{
SEG_Scan()
if(PULSE_buf!=pulse)ShowNumber(pulse)//pulse不再是前一次的值,也就是pulse数值更新了,所以数码管缓存区也要更新pulse的数值以便显示出来
x++
if(x>=50)//隔一段时间过来记录此时的pulse数值
{
x=0
PULSE_buf=pulse
}
}
}
//请把P3.3和P2.3用杜邦线连接起来
void EXTI1_IRQHandler() interrupt 2
{
pulse++
}
大家多按几次K4,发现按下后松手的一个动作里有时pulse就自加了几次,显示在数码管上的数加了好几下。
TMOD=0x05;TH0=0;TL0=0;
TR0=1;
while(1)
{
a=TH0*256+TL0;
display(a);
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)