| 查看: 434 | 回复: 0 | ||
[求助]
求助 关于单片机4*4矩阵扫描程序 想了一天 没想通
|
|
下划线部分不懂 求不吝赐教 void InterruptTimer0() interrupt 1 { unsigned char i; static unsigned char keyout = 0; //矩阵按键扫描输出索引 static unsigned char keybuf[4][4] = { //矩阵按键扫描缓冲区 {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF}, {0xFF, 0xFF, 0xFF, 0xFF} }; TH0 = 0xFC; //重新加载初值 TL0 = 0x67; //将一行的4个按键值移入缓冲区 keybuf[keyout][0] = (keybuf[keyout][0] << 1) | KEY_IN_1; keybuf[keyout][1] = (keybuf[keyout][1] << 1) | KEY_IN_2; keybuf[keyout][2] = (keybuf[keyout][2] << 1) | KEY_IN_3; keybuf[keyout][3] = (keybuf[keyout][3] << 1) | KEY_IN_4; //消抖后更新按键状态 for (i=0; i<4; i++) //每行4个按键,所以循环4次 { if ((keybuf[keyout] & 0x0F) == 0x00) { //连续4次扫描值为0,即4*4ms内都是按下状态时,可认为按键已稳定的按下 KeySta[keyout] = 0; } else if ((keybuf[keyout] & 0x0F) == 0x0F) { //连续4次扫描值为1,即4*4ms内都是弹起状态时,可认为按键已稳定的弹起 KeySta[keyout] = 1; } } //执行下一次的扫描输出 keyout++; //输出索引递增 if(keyout>3) { keyout=0; } // keyout = keyout & 0x03; //索引值加到4即归零 switch (keyout) //根据索引,释放当前输出引脚,拉低下次的输出引脚 { case 0: KEY_OUT_4 = 1; KEY_OUT_1 = 0; break; case 1: KEY_OUT_1 = 1; KEY_OUT_2 = 0; break; case 2: KEY_OUT_2 = 1; KEY_OUT_3 = 0; break; case 3: KEY_OUT_3 = 1; KEY_OUT_4 = 0; break; default: break; } } |
» 猜你喜欢
散金币祈福
已经有187人回复
求助,如何提取ELK的rt-TDDFT在某一时刻的自旋密度分布和电子密度分布
已经有1人回复
物理学I论文润色/翻译怎么收费?
已经有279人回复
澳门大学IAPME李海峰教授常年招收博士研究生
已经有0人回复
澳门大学IAPME李海峰教授常年招收博士研究生
已经有0人回复
澳门大学IAPME李海峰教授常年招收博士研究生
已经有0人回复
深圳大学应用技术学院招聘凝聚态物理博士后
已经有115人回复
深圳大学2027级光电信息工程/物理学研究生推免
已经有70人回复
求助中医院临床中医中标的青年标书学习,谢谢
已经有4人回复
浙大物院表面物理课题组长期招收普博及直博学生
已经有257人回复
【征稿】Springer Nature热电专题 Discover Materials / Discover Chemistry
已经有45人回复










回复此楼