orange's学习--第七章:m键盘灯处理

Cap sLock 、NumLock 、Scro llLock    键盘上这3个键有一点特殊,因为每一个都对应一个小灯 (LED)。实际上,不但通过敲击键盘可以控制这些灯的亮灭,通过写入8042的输入缓冲区也可以做到这一点。这样,我们可以维持3个全局变量,用以表示3个灯的状态,在键盘初始化的时候给它们任意赋我们想要的初值,并同时设置灯的相应状态。 

/*======================================================================*
                           init_keyboard
*======================================================================*/
PUBLIC void init_keyboard()
{
    kb_in.count = 0;
    kb_in.p_head = kb_in.p_tail = kb_in.buf;

    shift_l    = shift_r = 0;
    alt_l    = alt_r   = 0;
    ctrl_l    = ctrl_r  = 0;

    caps_lock   = 0;
    num_lock    = 1;
    scroll_lock = 0;

    set_leds();

        put_irq_handler(KEYBOARD_IRQ, keyboard_handler);/*设定键盘中断处理程序*/
        enable_irq(KEYBOARD_IRQ);                       /*开键盘中断*/
}

/*======================================================================*
                 set_leds
 *======================================================================*/
PRIVATE void set_leds()
{
    u8 leds = (caps_lock << 2) | (num_lock << 1) | scroll_lock;

    kb_wait();
    out_byte(KB_DATA, LED_CODE);
    kb_ack();

    kb_wait();
    out_byte(KB_DATA, leds);
    kb_ack();
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值