矩阵按键之行列式扫描

 

4×4行列式扫描:

每个按键都由两根线共同控制,两者都为低电平时按键才能发挥作用,如上图所示,P10-P13称为列线,P14-P17称为行线,使其中一条行线(或列线)为低电平,分别去检测另外的列线(或行线)即可。

如上图所示的行列式扫描程序如下:

//定义一个扫描函数

typedfe unsigned char u8;

u8 key_scan()
{
		u8 key_value=0;

		K=0x7f;							  //第一行为0即P17=0
		if (K!=0x7f)
		{
			delay_10us(1000);
		
			switch(K)        //保证第一行为0
			{	
				case 0x77:key_value=0; break;     //如果第一列为0.P13=0
				case 0x7b:key_value=1; break;
				case 0x7d:key_value=2; break;
				case 0x7e:key_value=3; break;
			}
		}
			while (K!=0x7f);					//按键松开
	


		K=0xbf;
		if (K!=0xbf)
		{
				delay_10us(1000);
			
			switch(K)
				{
				case 0xb7:key_value=4; break;
				case 0xbb:key_value=5; break;
				case 0xbd:key_value=6; break;
				case 0xbe: key_value=7; break;
			}
			}
			while(K!=0Xbf);




		K=0xdf;
		if (K!=0xdf)
		{
			delay_10us(1000);
		
		switch(K)
		{
			case 0xd7:key_value=8; break;
			case 0xdb:key_value=9; break;
			case 0xdd:key_value=10; break;
			case 0xde: key_value=11; break;
			}
		}
		while(K!=0xdf);



		K=0xef;
		if (K!=0xef)
		{
			delay_10us(1000);
		
		switch(K)
		{
			case 0xe7:key_value=12; break;
			case 0xeb:key_value=13; break;
			case 0xed:key_value=14; break;
			case 0xee: key_value=15; break;
			}
		}
		while(K!=0xef) ;


		return key_value;
		}

//主函数
void main()
{

while(1)
{
//要执行的程序
}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值