本帖最后由 f晨星 于 2015-2-2 01:10 编辑 我给第一段代码加上注释 ![]() //其中的DATA是一组IO口 u8 keyscan() { u8 tm , tm2; DATA = 0XOF; // 输出值为 0000 1111 tm = DATA; // 读回DATA的实际值保持(我觉得这一句可以省去) if(DATA != 0X0F) //发现有按键按下时,这时DATA 不在是0000 1111 而是0000 xxxx\\\解释看下面 { dalay_ms(5); tm = DATA; //读回DATA的实际值保存 现在的DATA值,,可能是0000 xxxx // 其中值可能是 0000 0111\\0000 1011\\\0000 1101\\\0000 1110 if(DATA != 0X0F) // 再次判读是否真的按下 { tm2 = tm & 0x0f; // 去除高4位中的变化值 tm2= 0000 xxxx //为什么不吧tm直接赋值给tm2呢..是防止高四位中出现1的状况,屏蔽掉高4位可能出现的1 DATA = 0xf0; //DATA输出 1111 0000 因为被按下 DATA读回来实际值是 xxxx 0000 \\x中其中一个是0 同上的解释 tm = DATA; //读回DATA的实际值保存 因为被按下 DATA读回来的实际实际值是 xxxx 0000 \\x中其中一个是0 同上的解释 tm2 |= tm; // xxxx 0000 或 0000 xxxx 取出其中按下的 } } return tm2 ; } |
沙发![]() ![]() |
|Archiver|手机版|独闷闷网
( 粤ICP备12007667号-2 )
GMT+8, 2025-4-19 22:16 , Processed in 0.183972 second(s), 22 queries .