【PROTEUS】AT89C51实现矩阵键盘按键数码管显示

原理图及运行效果

实现依次按下四个按键,依次显示键值
在这里插入图片描述

源代码

#include "reg51.h"

//CK
//unsigned char code seg[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
//CA
unsigned char code seg[]= {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xbf};
unsigned char num[]={16,16,16,16};
int n=0;
char key_scan(void);
delay(int t)
{
	while(t--);
}

int main()
{
	int cnt=0,KeyIn;
	while(1)
	{
		KeyIn=key_scan();
		if(KeyIn>=0)
		{
			num[cnt]=KeyIn;
			cnt++;
			while(key_scan()!=-1);
		}
		P1=0XFF; //仿真必须		
		P1=~seg[num[n]];
		P2=~(0x01<<n);
		delay(100);
		n++;
		n=n%4;
	}
}




char key_scan(void)
{
    char key,key1,key2;
    P0=0X0F;
    delay(2);
    key1=P0;
    P0=0XF0;
    delay(2);
    key2=P0;
    key=key1|key2;
    switch(key)
    {
    case 0xee:
        return 0;
        break;
    case 0xde:
        return 1;
        break;
    case 0xbe:
        return 2;
        break;
    case 0x7e:
        return 3;
        break;
    case 0xed:
        return 4;
        break;
    case 0xdd:
        return 5;
        break;
    case 0xbd:
        return 6;
        break;
    case 0x7d:
        return 7;
        break;
    case 0xeb:
        return 8;
        break;
    case 0xdb:
        return 9;
        break;
    case 0xbb:
        return 10;
        break;
    case 0x7b:
        return 11;
        break;
    case 0xe7:
        return 12;
        break;
    case 0xd7:
        return 13;
        break;
    case 0xb7:
        return 14;
        break;
    case 0x77:
        return 15;
        break;
    default:
        return -1;
    }
}
  • 3
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值