怀疑键盘按键识别程序有错
推荐给好友
打印
加入收藏
更新于2009-07-10 16:24:55

怀疑键盘按键识别程序有错

===来信===

陈老师好!

        我看到你书上的例子好象不能完成实验板上的某些功能。
        你看看下面两段程序,作一下比较,看看哪个行。

void key_prc()
{  uchar key;
   key=XBYTE[0x2000];
   if(key!=0xff)
   {  delay_ms(10);
      KEY_BLG=1;
      if((key=XBYTE[0x2000])!=0)
      keyvalue=0;
      while(key&0x01!=0)
      {  key>>=1;    //如果这段作移位操作,keyvalue就不是想要的值了,是这样的吗?
         keyvalue++;
      }
   }
}

下面的是我改的

void key_prc()
{  uchar key;
   key=XBYTE[0x2000];
   if(key!=0xff)
   {  del_ms(10);
      KEY_FLG=1;
      if((key=XBYTE[0x2000])!=0xff)
      {  keyvalue=0;
         while(0x0f&key!=0)
         {  key--;  //这段我改了,这样是不是能实现你实验板上的功能呢,这个我没有做过,只仿真过。
            keyvalue++;
         }
      }
   }
}

===回复===

这位同学/同志:

        你好!
        键盘按键在我的实验板上是并行接收,键按下时对应位输入为0,否则因上拉而为1,例如k2键按下则d2位为0,所以临时变量key要右移2次,键值变量keyvalue也相应增量2次,得到键值2。
        我原来的程序,都在实验板上验证过的(除非出版时有录入印刷错误)。因此最好还是用硬件平台实际体验一下。
        我有个图书专栏可以用“河南工业大学陈涛+书名”搜索到。
        再次来信可换邮箱 chentao@zzu.edu.cn

陈涛
2009-6-23

===再次来信===

 陈老师:

        你那个程序真的没有问题,原来只是我把输入端看成为低电平!
        我觉得你写出的书也是蛮值得参考和学习的,因为我觉得它实用性很强。
        有时候去新华书店看书的时候,我都在找你写的书介绍给我的朋友,不过去了几次就是没有找到,这让我非常失望。
        还有最近我想做出来你所画的电路,但是今天我找了几间电子零件店都没找到几个ic,这也让我很无奈!而且我在这边买的板子实在太少资源了,所以我每次都是在proteus那里仿真的,这也让我感觉到还有很多用语言不能描述的东西挡着我的学习路途。


===再次回复===

这位同学/同志:

        你好!来信收到了。
        你有没有考虑过买一块我的实验板呢,这样的话可以与书本对照着学习。
        其实很多人不懂,买实验板最重要的一条是配有较多的实验资源和程序实例,特别是综合性的程序实例可以参考、模仿和学习。对初学者来说,最好是由浅入深。我看到很多实验板也提供了较多的实验资源,但他们的缺点是,所给的例子比较孤立,就一个设备论一个设备,缺少系统性强的、综合性强的例子。
        如果你能接到单片机项目的话,有时还可以用板上的资源来做项目仿真。我曾经接过别人一个小项目,是研发替代瑞士产自动挤奶设备中的一部分电路,要求2路输出,而且输出的花样很多(周期、占空比、启动延迟等有几十种变化),我最后是用了一个4维数组来实现的。当时就是先用我的实验板(用到了LED、拨动开关、按键和蜂鸣器)做的仿真,用2路LED的显示来代表高低电平的输出,用蜂鸣器的鸣响时间来代表启动延时,看程序主体有没有问题。否则,电路的输出、挤牛奶的动作在目标电路板上是看不见的,你怎么知道它的时序对还是不对。
        关于我写的书,再有就是与别人合作编写的“微机原理”教材,有一本叫“16/32位微机原理、汇编语言及接口技术”(钱晓捷、陈涛,机械工业出版社,2001年第1版,2005年第2版),我是第二作者,负责写了微机原理的部分。但估计该书你可能用不着。

陈涛
2009-6-25

相关链接


 
关于我们 | 诚邀加盟 | 客户服务 | 相关法律 | 网站地图 | 友情链接 | 服务信箱:service@eefocus.com
© 2006 与非门科技信息咨询(北京)有限公司 All Rights Reserved.