共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 跳转至页
回复
| 有奖活动 | |
|---|---|
| 2026年“我要开发板活动”第三季,开始了! | |
| 硬核工程师专属补给计划——填盲盒 | |
| “我踩过的那些坑”主题活动——第002期 | |
| 【EEPW电子工程师创研计划】技术变现通道已开启~ | |
| 发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
| 【EEPW在线】E起听工程师的声音! | |
| 高校联络员开始招募啦!有惊喜!! | |
| 【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
我要赚赏金打赏帖 |
|
|---|---|
| 【分享开发笔记,赚取电动螺丝刀】在音频测试中顺序的调整可改变功效被打赏¥18元 | |
| 【分享开发笔记,赚取电动螺丝刀】点阵显示模块及其应用-----献给新年的小礼物被打赏¥22元 | |
| 基于地奇星开发板的数码管模块显示技术被打赏¥23元 | |
| window下生成compilecommands.json的的方法被打赏¥22元 | |
| 【S32K3XX】GPIO中断配置被打赏¥26元 | |
| 【分享开发笔记,赚取电动螺丝刀】WS2812B的RGB灯介绍以及驱动方法被打赏¥25元 | |
| PTC与NTC功能常规对比被打赏¥14元 | |
| 【S32K3XX】核间通信MU使用被打赏¥27元 | |
| 【分享开发笔记,赚取电动螺丝刀】关于3pin锂电池接口的介绍/使用被打赏¥16元 | |
| 以启明云端ESP32P4开发板实现TF卡读写功能被打赏¥28元 | |
我要赚赏金
