共2条
1/1 1 跳转至页
问
答 1:
重新 电路如图所示,扫描算法如下:
P1=sccode;
if ((P1&0x0f) != 0x0f)
{
recode = (P1&0x0f)|0xf0;
return (~sccode)+(~recode);
}
sccode=(sccode<<1)|0x01;
if(sccode==0xff)
sccode=0xef;
问题:按照以上算法,键1、2、3、4的键值是多少?
答 2: 图http://www.21icsearch.com/buzi/upimage/upfile/20051171023010.jpg
答 3: 呵呵。。。无人可问津? 答 4: 估计大家都懒的看1:00010000+0001=0x11
2:0x21
3:0x41
4:0x81
5:0x12
6:0x22
...
16:0x88
对吗? 答 5: 呵呵。。。 答 6: 呵呵。。。mailbert,不对啊估计大家都懒的看
1:00010000+0001=0x11
2:0x21
3:0x41
4:0x81
5:0x12
6:0x22
...
16:0x88
对吗?
-----------
mailbert兄,不总是对。
我试过,如果将sccode初始化为7Fh,键值又变了样。
郁闷!超级郁闷!
答 7: 无人能解? 答 8: 你是在哪儿给sccode赋值的?uint8 sccode;
main(void)
{
uint8 a;
sccode=0x7F;
while(1)
{
a=sCANkey(void); //循环扫描
}
}
uint8 sCANkey(void)
{P1=sccode;
if ((P1&0x0f) != 0x0f)
{
recode = (P1&0x0f)|0xf0;
return (~sccode)+(~recode);
}
sccode=(sccode<<1)|0x01;
if(sccode==0xff)sccode=0xef;
return(0);
}
答 9: mailbert,我的算法和你的几乎完全一样(sccode赋初值7fh的话,要右循环),
这个算法仿真和理论结果一致,但实际运行结果却大出意料。
键4按下您能理解键值是0x11吗? 答 10: 图呢?图呢? 答 11: optec,图在这里http://www.21icsearch.com/buzi/upimage/upfile/20051171023010.jpg
答 12: 赋初值7F也是左移!既然是高四位循环移位,初值赋7F、BF、DF、EF没有区别!
答 13: 但实际运行就是不一致,郁闷。赋初值7F也是左移!
既然是高四位循环移位,初值赋7F、BF、DF、EF没有区别!
--------------
同意你的观点,而且端口的高四位做输入低四位做输出键值也应该一样。
但实际运行就是不一致,我想跳楼。
曾怀疑自己把线测错了,无数次反复测试按键通断,得出的结论一样。
很无奈,故发此贴求教。
答 14: 帮你顶用的什么单片机? 答 15: mailbert,我用的很普遍的89s52,端口是P1。多说点,这是最近我做的一个项目。
而在此之前,这个键盘扫描算法在我另一个项目运行得很好。
如果我一直较真追究这个问题,项目是不能按期完成的。
我只得把项目做完先。
P1=sccode;
if ((P1&0x0f) != 0x0f)
{
recode = (P1&0x0f)|0xf0;
return (~sccode)+(~recode);
}
sccode=(sccode<<1)|0x01;
if(sccode==0xff)
sccode=0xef;
问题:按照以上算法,键1、2、3、4的键值是多少?
答 2: 图http://www.21icsearch.com/buzi/upimage/upfile/20051171023010.jpg
答 3: 呵呵。。。无人可问津? 答 4: 估计大家都懒的看1:00010000+0001=0x11
2:0x21
3:0x41
4:0x81
5:0x12
6:0x22
...
16:0x88
对吗? 答 5: 呵呵。。。 答 6: 呵呵。。。mailbert,不对啊估计大家都懒的看
1:00010000+0001=0x11
2:0x21
3:0x41
4:0x81
5:0x12
6:0x22
...
16:0x88
对吗?
-----------
mailbert兄,不总是对。
我试过,如果将sccode初始化为7Fh,键值又变了样。
郁闷!超级郁闷!
答 7: 无人能解? 答 8: 你是在哪儿给sccode赋值的?uint8 sccode;
main(void)
{
uint8 a;
sccode=0x7F;
while(1)
{
a=sCANkey(void); //循环扫描
}
}
uint8 sCANkey(void)
{P1=sccode;
if ((P1&0x0f) != 0x0f)
{
recode = (P1&0x0f)|0xf0;
return (~sccode)+(~recode);
}
sccode=(sccode<<1)|0x01;
if(sccode==0xff)sccode=0xef;
return(0);
}
答 9: mailbert,我的算法和你的几乎完全一样(sccode赋初值7fh的话,要右循环),
这个算法仿真和理论结果一致,但实际运行结果却大出意料。
键4按下您能理解键值是0x11吗? 答 10: 图呢?图呢? 答 11: optec,图在这里http://www.21icsearch.com/buzi/upimage/upfile/20051171023010.jpg
答 12: 赋初值7F也是左移!既然是高四位循环移位,初值赋7F、BF、DF、EF没有区别!
答 13: 但实际运行就是不一致,郁闷。赋初值7F也是左移!
既然是高四位循环移位,初值赋7F、BF、DF、EF没有区别!
--------------
同意你的观点,而且端口的高四位做输入低四位做输出键值也应该一样。
但实际运行就是不一致,我想跳楼。
曾怀疑自己把线测错了,无数次反复测试按键通断,得出的结论一样。
很无奈,故发此贴求教。
答 14: 帮你顶用的什么单片机? 答 15: mailbert,我用的很普遍的89s52,端口是P1。多说点,这是最近我做的一个项目。
而在此之前,这个键盘扫描算法在我另一个项目运行得很好。
如果我一直较真追究这个问题,项目是不能按期完成的。
我只得把项目做完先。
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
与电子爱好者谈读图四被打赏50分 | |
与电子爱好者谈读图二被打赏50分 | |
【FRDM-MCXN947评测】Core1适配运行FreeRtos被打赏50分 | |
【FRDM-MCXN947评测】双核调试被打赏50分 | |
【CPKCORRA8D1B评测】---移植CoreMark被打赏50分 | |
【CPKCORRA8D1B评测】---打开硬件定时器被打赏50分 | |
【FRDM-MCXA156评测】4、CAN loopback模式测试被打赏50分 | |
【CPKcorRA8D1评测】--搭建初始环境被打赏50分 | |
【FRDM-MCXA156评测】3、使用FlexIO模拟UART被打赏50分 | |
【FRDM-MCXA156评测】2、rt-thread MCXA156 BSP制作被打赏50分 |