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

📄 key_scan.c

📁 4X4键盘的扫描程序
💻 C
字号:
//该函数只完成一次扫描任务,需在循环内调用
//row列,hor横

#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

void delay(uint time)
{
    uchar i,j;
    for(i=time;i>0;i--)
        for(j=110;j>0;j--);
}

uchar key_scan()
{
    uchar temp,hor,row;
    
    P2 = 0xf0;
    temp = P2;
    temp &= 0xf0;
    if(temp != 0xf0)//扫描到按键动作
    {
        delay(5);
        
        //开始进行列检查
        P2 = 0xf0;
        temp = P2;
        temp &= 0xf0;
        if(temp != 0xf0)//确认有按键动作
        {
            temp = ~temp;
            temp >>= 4; //列值在temp的低四位
            switch(temp)//列值转换,并保存在row中
            {
                case 1 : row = 1; break;
                case 2 : row = 2; break;
                case 4 : row = 3; break;
                case 8 : row = 4; break;
                default: break;
            }
            //列检查结束

            //开始进行行检查
            P2 = 0x0f;
            temp = P2;
            temp = ~temp;
            temp &= 0x0f;//行值在temp的低四位
            switch(temp)//行值转换,并保存在hor中
            {
                case 1 : hor = 1; break;
                case 2 : hor = 2; break;
                case 4 : hor = 3; break;
                case 8 : hor = 4; break;
                default: break;
            }
            //行检查结束

            //检查按键动作是否结束,否则程序在此等待
            P2 = 0xf0;
            temp = P2;
            temp &= 0xf0;
            while(temp != 0xf0)
            {
                P2 = 0xf0;
                temp = P2;
                temp &= 0xf0;
            }
            //按键动作结束,程序往下进行
            
            //计算键值并返回
            return ((hor-1)*4 + row);

        }
    }
    //没有按键动作,返回0;
    return 0;   
}



/*
//测试开始
void display(uchar seat_data,seg_data)  //seat_data位值,seg_data管值
{
    P0 = (seat_data<<4)|seg_data;
}

void main()
{
    uchar key,shi,ge;
    P2 = 0xff;
    while(1)
    {
        key = key_scan();
        if(key != 0)
        {
            shi = key/10;
            ge = key%10;
        }
        display(6,shi);
        display(7,ge);
    }
}
//测试结束

⌨️ 快捷键说明

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