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

📄 test.c

📁 16*16键盘51单片机C语言扫描程序
💻 C
字号:
/*=======================================================
                 键盘显示程序
						武汉世纪久华科技有限公司

========================================================*/
#include <reg51.h>
#include <intrins.h>    
#define uchar unsigned char
#define uint unsigned int
        
sbit  PL1=P1^0;	  //数码管选通最低位的端口
sbit  LCD_E = P1^7;
uint num,temp;

uchar code dis_7[]={0XC0, 0XF9,0XA4,0XB0,0X99,0X92,0X83, 0XF8,0X80,0X98,0xa0,0x83,0xa7,0xa1,0x84,0x8e,0xbf,0x7f };
				      //数码管显示编码"0"	——————“9”,“a"-----"f"
void delay(uint z)	  //延时程序,约7.6us
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--);
}

uchar keyscan()
{
			P2=0xfe;	//1111 1110,P2.0置"0"扫描第四列(K4--K16),P2口高位4位置“1”,准备接受数据
			temp=P2;
			temp=temp&0xf0;
			while(temp!=0xf0) //如果P2口高四位不为1111,说明有键按下
				{
					delay(5);		//延时去抖动
					temp=P2;
					temp=temp&0xf0;	
					while(temp!=0xf0)	 //进一步确定是否有键按下
					{
						temp=P2;
					switch(temp)			 //进一步确定是第四列的哪一行键按下
						{
							case 0xee:num=0; 	   //如果是第一个行(第四列)
								break;
							case 0xde:num=12;	  //如果是第二行(第四列)
								break;
							case 0xbe:num=8;
								break;
							case 0x7e:num=4;
								break;
						}
					while(temp!=0xf0)
						{
							temp=P2;
							temp=temp&0xf0;
						}  
					}
				}

			P2=0xfd;          //扫描第三列
			temp=P2;
			temp=temp&0xf0;
			while(temp!=0xf0)
				{
					delay(5);
					temp=P2;
					temp=temp&0xf0;
					while(temp!=0xf0)
					{
						temp=P2;
					switch(temp)
						{
							case 0xed:num=15;  //如果是第一个行(第三列)
								break;
							case 0xdd:num=11;   //如果是第二行(第三列)
								break;
							case 0xbd:num=7;
								break;
							case 0x7d:num=3;
								break;
						}
					while(temp!=0xf0)
						{
							temp=P2;
							temp=temp&0xf0;
						}
					}
				}


			P2=0xfb;	 //扫描第二列
			temp=P2;
			temp=temp&0xf0;
			while(temp!=0xf0)
				{
					delay(5);
					temp=P2;
					temp=temp&0xf0;
					while(temp!=0xf0)
					{
						temp=P2;
					switch(temp)
						{
							case 0xeb:num=14;
								break;
							case 0xdb:num=10;
								break;
							case 0xbb:num=6;
								break;
							case 0x7b:num=2;
								break;
						}
					while(temp!=0xf0)
						{
							temp=P2;
							temp=temp&0xf0;
						}
					}
				}


			P2=0xf7;		 //扫描第一列
			temp=P2;
			temp=temp&0xf0;
			while(temp!=0xf0)
				{
					delay(5);
					temp=P2;
					temp=temp&0xf0;
					while(temp!=0xf0)
					{
						temp=P2;
					switch(temp)
						{
							case 0xe7:num=13;
								break;
							case 0xd7:num=9;
								break;
							case 0xb7:num=5;
								break;
							case 0x77:num=1;
								break;
						}
					while(temp!=0xf0)
						{
							temp=P2;
							temp=temp&0xf0;
						}
					}
				}
return num;			//返回扫描的键值

}

main()
{
	while(1)
	{
		LCD_E = 0;
		keyscan();	  // 调用键盘扫描程序
		PL1=0;		  // 只选通数码管的最低位
		P0=dis_7[num]; //查找数组中(扫描键值对应的)编码,并赋给P0口(数码管的数据端口)
		delay(1);	
	}
}

⌨️ 快捷键说明

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