⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 4x4.c

📁 几个模块程序 包括IIc 初始化 读写操作 2*16LcD 初始化 显示程序 4*4键盘键盘扫描程序
💻 C
字号:
/*-----------------------------------------------
函数名称:key_scan
功   能:键盘扫描,返回数字键值
输   入:无
输   出:无符号整型键值
范   围:
------------------------------------------------*/
unsigned char key_scan(void)
{
    uchar sccode, recode;       //行扫描码(低4位1110 1101 1011 0111),重新编码(高4位 1101)
    uchar key;
    P2 = 0xf0;                  //发全0行扫描,列线输入
    if( (P2 & 0xf0) != 0xf0)    //若有4*4有键按下,在进行键盘扫描,找出按下的键
    {
        delay_nms(20);           //延时去抖动,一个按键持续上百毫秒
        if( (P2 & 0xf0) != 0xf0 )
        {
            sccode = 0xfe;      //逐行扫描初值
            while( (sccode & 0x10) != 0 )             //本行有键按下
            {
                P2 = sccode;                          //行扫描码写入P2
                if( (P2 & 0xf0) != 0xf0 )
                {
                    recode = (P2 & 0xf0) | 0x0f;      //保存列特征信息
                    key = ( (~sccode) + (~recode) );  //特征字节码
                }
                else
                {
                    sccode = (sccode << 1) | 0x01;    //该行没有键按下,则行扫描码
                }                                     //左移一位,继续下一行的扫描
            }
        }
        
        switch(Key)
        {
        case 0x11: return 1;    break;
        case 0x21: return 2;    break;
        case 0x41: return 3;    break;
        case 0x81: return MAX;  break;

        case 0x12: return 5;    break;
        case 0x22: return 6;    break;
        case 0x42: return MIN;  break;
        case 0x82: return 8;    break;

        case 0x14: return 9;    break;
        case 0x24: return UART; break;
        case 0x44: return NC;   break;
        case 0x84: return 0;    break;

        case 0x18: return NC;   break;
        case 0x28: return NC;   break;
        case 0x48: return NC;   break;
        case 0x88: return NC;   break;
        
        default: break;
    }

    }

    return (NC);  //没有键按下,返回0
}

/************************************
函数名称:delay_xms
功    能:延时 X ms
输    入:无符号整型
输    出:
范    围:12MHZ
************************************/
void delay_nms(uint n)
{
    uint i;
    for(; x > 0; x--)
    {
        for(i = 0; i < 124; i++)
        {
            /*没有循环体*/
        }
    }
}





/*-----------------------------------------------------------------------

----------------------------------------------------------------------- */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -