【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;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章