独立按键的原理

独立按键式直接用I/O口线构成的单个按键电路,其特点式每个按键单独占用一根I/O口线,每个按键的工作不会影响其他I/O口线的状态。独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一个I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。

独立按键的软件常采用查询式结构。先逐位查询没跟I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

独立键盘理想的波形是按下去时保持低电平,实际上在上升沿和下降沿的过程中(即按键和离键时的一段微小时间)会出现抖动。消抖的方法有两种,一种是通过硬件:在电路上连个电容;另一种是软件消抖,根据经验增加10ms的延时。

sbit key = P1 ^ 1;


while(!key); //有按键抬起
delay_ms(10);
while(!key); //确实有按键抬起
这样即能起到消抖的作用。


独立键盘有扫描法和中断法。

下面主要介绍中断法:

1.打开总中断

2.设置外部中断的触发方式 (TCON寄存器)

IT0:INT0: 1 负边缘触发(下降)   0   低电平触发

IE0:中断请求标志位

IT1:INT1: 1 负边缘触发(下降)   0   低电平触发

3.打开外部中断

EX0 = 0;

4.外部中断服务函数

void isr_exito() interrupt 0

{

    EX0 = 0;

   /* 你所实现的功能程序*/

    EX0 = 1;

}

下面是一个例子:

void int_init(void)        //中断函数
{
    EA = 1;
    IT0 = 1;
    EX0 = 1;
}

void init_isr(void) interrupt 0   //中断服务函数,实现的功能是在数码管上显示数字,按键按一下+1,范围0~99
{
    static unsigned char disdata = 0;
    EX0 = 0;
    delay_ms(10);
    if(0 == key1)
    {
        while(!key1);
	delay_ms(10);
	while(!key1);
	disdata++;
	if(100 == disdata)
	{
	    disdata = 0;
	}
	tempdata[0] = segdata[disdata / 10];
	tempdata[1] = segdata[disdata % 10];
    }
    EX0 = 1;
}

  • 1
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值