新概念51单片机c语言教程矩阵键盘检测例4.2.1

◇◆丶佛笑我妖孽 提交于 2020-01-20 13:08:54
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar code table[]={};
sbit dula=P2^6;
sbit wela=P2^7;
void delayms(uint xms){
	uint i,j;
	for(i=xms;i>0;i--)
		for(j=110;j>0;j--);
}
void display(uchar num){
	dula=1;
	P0=table[num];
	dula=0;
}
void matrixkeyscan(){
	uchar temp,key;
	P3=0xfe;
	temp=P3;
	temp=temp&0xf0;
	if(temp!=0xf0){
		delayms(10);
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xf0){
			temp=P3;
			switch(temp){
				case 0xee:
					key=0;
					break;
				case 0xde:
					key=1;
					break;
				case 0xbe:
					key=2;
					break;
				case 0x7e:
					key=3;
					break;
			}
			while(temp!=0xf0){
				temp=P3;
				temp=temp&0xf0;
			}
			display(key);
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf0;
	if(temp!=0xf0){
		delayms(10);
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xf0){
			temp=P3;
			switch(temp){
				case 0xed:
					key=4;
					break;
				case 0xdd:
					key=5;
					break;
				case 0xbd:
					key=6;
					break;
				case 7d:
					key=7;
					break;
			}
			while(temp!=0xf0){
				temp=P3;
				temp=temp&0xf0;
			}
			display(key);
		}
	}
	P3=0xfd;
	temp=P3;
	temp=temp&0xf0;
	if(temp!=0xf0){
		delayms(10);
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xf0){
			temp=P3;
			switch(temp){
				case 0xeb:
					key=8;
					break;
				case 0xdb:
					key=9;
					break;
				case 0xbb:
					key=10;
					break;
				case 0x7d:
					key=11;
					break;
			}
			while(temp!=0xf0){
				temp=P3;
				temp=temp&0xf0;
			}
			display(key);
		}
	}
	P3=0xf7;
	temp=P3;
	temp=temp&0xf0;
	while(temp!=0xf0){
		delayms(10);
		temp=P3;
		temp=temp&0xf0;
		if(temp!=0xf0){
			temp=P3;
			switch(temp){
				case 0xe7:
					key=12;
					break;
				case 0xd7:
					key=13;
					break;
				case 0xb7:
					key=14;
					break;
				case 0x77:
					key=15;
					break;
			}
			while(temp!=0xf0){
				temp=P3;
				temp=temp&0xf0;
			}
			display(key);
		}
	}
}
void main(){
	P0=0;
	dula=1;
	dula=0;
	P0=0xc0;
	wela=1;
	wela=0;
	while(1){
		matrixkeyscan();
	}
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!