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

📄 5 4x4 key.c

📁 很好的51单片机仿真模板。
💻 C
字号:
//4*4 键盘检测程序,按下键后相应的代码显示在数码管上 
#include<reg51.h> 
sbit beep=P2^3;    //蜂鸣器接口 
sbit dula=P2^6;    //控制数码管段选的锁存器锁存端 
sbit wela=P2^7;    //控制数码管位选的锁存器锁存端 
unsigned char i=100; 
unsigned char j,k,temp,key; 
void delay(unsigned char i)    //可自定义延时长短的延时函数 
{         //当 i=10 时大约为 10 毫秒 
	for(j=i;j>0;j--) 
	for(k=125;k>0;k--); 
} 
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 
							0x6d,0x7d,0x07,0x7f,0x6f,
							0x77,0x7c,0x39,0x5e,0x79,0x71}; // 0-F编码 
display(unsigned char num)    //  显示子函数 
{ 
	P0=table[num];   //将第 num 个显示编码送 P0 口 
	dula=1;          //一个下降沿将数据锁存 
	dula=0; 
	P0=0xc0;         //位选通全部的数码管 
	wela=1;          //一个下降沿将数据锁存 
	wela=0; 
				  


} 
void main() 
{	dula=0;                //先关闭两个锁存器 
	wela=0; 
	while(1)                //进入检测总循环 
	{	P3=0xfe;             //给 P3.0 送低电平,其余为高电平 
		temp=P3;            //把 P3 口数据读回来 
		temp=temp&0xf0;     //把 P3 口与 11110000 相与 
		if(temp!=0xf0)        //如果有键按下刚一定不相等,于是进入下一步检测 
		{	delay(10);           //延时去抖动 
			if(temp!=0xf0)       //再次判断是否有键按下 
			{	temp=P3;         //判断为有,再次读 P3 口数据 
				switch(temp)      //因为我们刚才是将第一行置的低 
				{                //在这里再判断是第几列 
					case 0xee:      //如果 temp=0xee 则为第一行和第一列 
						key=0;    //的交叉点,由此我们知道是矩阵键盘 
						break;    //上的第一个键被按下,我们给 key=0。 
					case 0xde:      //以后依此类推 
						key=1; 
						break; 
					case 0xbe: 
						key=2; 
						break; 
					case 0x7e: 
						key=3; 
						break; 
				} 
				while(temp!=0xf0)    //这段程序是检测按键是否被释放 
				{	temp=P3;         //如果没有释放就一直等待并且 
					temp=temp&0xf0; 
					beep=0;           //蜂鸣器一直响 
				} 
				beep=1;             //释放后关闭蜂鸣器 
				display(key);          //显示按下相应键值的数据 
				P1=0xfe;            //将第一个发光二极管点亮(我写 
			}                     //程序的时候测试用的) 
		} 
		P3=0xfd; 
		temp=P3; 
		temp=temp&0xf0; 
		if(temp!=0xf0) 
		{ 
			delay(10); 
			if(temp!=0xf0) 
			{ 
			temp=P3; 
			switch(temp) 
			{ 
				case 0xed: 
					key=4; 
					break;
				case 0xdd: 
					key=5; 
					break; 
				case 0xbd: 
					key=6; 
					break; 
				case 0x7d: 
					key=7; 
					break; 
			} 
			while(temp!=0xf0) 
			{ 
				temp=P3; 
				temp=temp&0xf0; 
				beep=0; 
			} 
			beep=1; 
			display(key); 
			P1=0xfc; 
			} 
		} 
		P3=0xfb; 
		temp=P3; 
		temp=temp&0xf0; 
		if(temp!=0xf0) 
		{ 
			delay(10); 
			if(temp!=0xf0) 
			{ 
				temp=P3; 
				switch(temp) 
				{ 
					case 0xeb: 
						key=8; 
						break; 
					case 0xdb: 
						key=9; 
						break; 
					case 0xbb: 
						key=10; 
						break; 
					case 0x7b: 
						key=11; 
						break; 
				} 
				while(temp!=0xf0) 
				{ 
					temp=P3; 
					temp=temp&0xf0; 
					beep=0; 
				} 
				beep=1; 
				display(key); 
				P1=0xf8; 
			} 
		} 
		P3=0xf7; 
		temp=P3; 
		temp=temp&0xf0; 
		if(temp!=0xf0) 
		{ 
			delay(10); 
			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; 
					beep=0; 
				} 
				beep=1; 
				display(key); 
				P1=0xf0; 
			} 
		} 
	} 
} 
 

⌨️ 快捷键说明

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