当前位置:首页 > 单片机 > 正文内容

矩阵键盘程序

haohao2年前 (2023-12-27)单片机212
#include <reg51.h>

#define KEYPAD P2

unsigned char code seg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};	//共阳

void delay(void) //10MS
{
    unsigned char data i, j;
    i = 20;
    j = 113;
    do
    {
        while (--j);
    } while (--i);
}


char getKey(){
    char row; //行号
    char column; //列号
    KEYPAD=0xf0; //检测行
    if(KEYPAD==0xf0){ //没检测到按键按下
            return -1;
    }
    delay();
    if(KEYPAD==0xf0){ //消抖
            return -1;
    }
    switch(KEYPAD){
        case 0x70: row=0; break; //第0行被按下
        case 0xb0: row=1; break; //第1行被按下
        case 0xd0: row=2; break; //第2行被按下
        case 0xe0: row=3; break; //第3行被按下
    }
    KEYPAD=0x0f; //检测列
    switch(KEYPAD){
        case 0x07: column=0; break; //第0列被按下
        case 0x0b: column=1; break; //第1列被按下
        case 0x0d: column=2; break; //第2列被按下
        case 0x0e: column=3; break; //第3列被按下
    }
    while(KEYPAD!=0x0f); //等待松手
    return row*4 + column;
}

main(){
    char keyCode;
    while(1){
        keyCode = getKey();
        if(keyCode!=-1){
            P0=seg[keyCode];
        }
    }
}

相关文章

点亮LED(快速体验)

点亮LED(快速体验)

部分电路原理图 点亮D1、D6(将P1.0、P1.5口置低电平)程序1#include <reg51.h> main() {    P1...

传统51单片机的RAM

传统51单片机的RAM

传统51单片机RAM大体分为片内RAM(IDATA)和片外RAM(XDATA)。根据需要,可以通过外接RAM芯片的方式,将片外RAM最大扩充至64KB,现阶段不做研究 片内RAM共有256个单元,又...

创建Keil工程及进行仿真的步骤

创建Keil工程及进行仿真的步骤

创建Keil工程(以《led_test》工程为例) 启动Keil软件菜单栏->Project->New uVision Project在合适的位置,手动创建工程文件夹,以《led_tes...