c/c++语言开发共享51单片机非常简洁的矩阵扫描程序

“`c /*按键的键位定义*/ unsigned char code anj[4][4] = { 1,2,3,10, 4,5,6,11, 7,0,9,12, 13,8,14,15, }; char ScanKey() { char key = -1;//赋值用于判读没有按下… …

/*按键的键位定义*/ unsigned char code anj[4][4] = { 	1,	2,	3,	10, 	4,	5,	6,	11, 	7,	0,	9,	12, 	13,	8,	14,	15, };  char scankey() {         char key = -1;//赋值用于判读没有按下 	unsigned i,j; 	for (i = 0;i < 4;i++) 	{ 		p1 = _cror_(0x7f,i); 		for (j = 0;j < 4;j++) 		{ 			if ((p1 & _cror_(0x08,j)) == 0) 			{ 				key = anj[i][j]; 				while ((p1 & _cror_(0x08,j)) == 0);//松手检测 				break; 			} 		} 	}     return key; } 
原理: 比如高位是行低位是列 先给p1复制 0111 1111 然后&上    0000 1000 如果第一列有按下那么    0111 1111 & 0000 0000 (有按键按下 0000 1000 变为 0000 0000) = 0000 0000   自然就得到 (1,1)这个位置的按键按下了 加上右移(_cror_())后面的都以此类推就可以检测所有的按键了。 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/599684.html

(0)
上一篇 2021年5月9日
下一篇 2021年5月9日

精彩推荐