orange's学习--第七章:de 显示输入普通字符和大写字符

对扫描码的解析工作有一点烦琐,所以我们还是分步骤来完成它。

不要低估了解析扫描码的复杂性,因为它不但分为Make  Code和Break Code,而且有长有短,功能也很多样,比如Home键对应的是一种功能而不是一个ASCII码,所以要区别对待。我们还是由简到繁,先挑能打印的打印一下。

/*======================================================================*
                           keyboard_read
*======================================================================*/
PUBLIC void keyboard_read()
{
    u8    scan_code;
    char    output[2];
    int    make;    /* TRUE: make;  FALSE: break. */

    memset(output, 0, 2);

    if(kb_in.count > 0){
        disable_int();
        scan_code = *(kb_in.p_tail);
        kb_in.p_tail++;
        if (kb_in.p_tail == kb_in.buf + KB_IN_BYTES) {
            kb_in.p_tail = kb_in.buf;
        }
        kb_in.count--;
        enable_int();

        /* 下面开始解析扫描码 */
        if (scan_code == 0xE1) {
            /* 暂时不做任何操作 */
        }
        else if (scan_code == 0xE0) {
            /* 暂时不做任何操作 */
        }
        else {    /* 下面处理可打印字符 */

            /* 首先判断Make Code 还是 Break Code */
            make = (scan_code & FLAG_BREAK ? FALSE : TRUE);

            /* 如果是Make Code 就打印,是 Break Code 则不做处理 */
            if(make) {
                output[0] = keymap[(scan_code&0x7F)*MAP_COLS];   //因为字符已经存储到二维数组里面了,获取到直接打印即可
                disp_str(output);
            }

        }
        /* disp_int(scan_code); */
    }
}

 

e代码没有贴出来。

处理Shift、Alt、Ctrl组合键,使用全局变量记录按下状态,按下后就是true,立刻松开就变成flase,在true的时候,按了其他字符就会选择到二维数组的第二列就是大写字符了。而且一个组合键需要调用多次keyborad_read()函数。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值