关于DSP通用IO口做矩阵键盘

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

DSP的通用IO口做矩阵键盘的接口的一个简单应用

首先关于矩阵键盘的扫描方式就不在这里细说了,我在这里利用了一般扫描矩阵键盘的方法之一,成为行扫描法,对于不明白其原理的同学可以参考相关资料。了解行扫描的基本原理。

其实利用DSP的IO口做矩阵键盘和单片机的不同之处:

首先,在DSP利用IO口之前,首先:要先配置GPXMUX寄存器,将该寄存器的利用的相应位置为0;既然配置为通用IO口后就要配置器方向是作为输入还是作为输出的,这些都要在初始化中配置,一般用到行扫描是使四个位置为输出,四个位置为输入。配置为方向后就要扫描了。而在MCS-51中IO口就不要配置,要作为输出时候,直接给他相应位赋个值就可以了,要作为输入时候,只要先软件置“1”,然后就可以读取相应位的状态了。所以在MCS-51中IO口在输入和输出之间的切换时不用设置什么寄存器的,而在DSP中要改变当前IO口的工作方式,就要重新打开写保护,然后配置方向,左后在关闭写保护。才可以。所以这是一个DSP与单片机IO口的第一点不同之处。

其次,就是在程序中的问题了,你按照MCS-51的写法和例程在写程序的时候,你发现程序运行不正确或者说就是没有反应,而且在单步调试的时候又可以,每个键都是按照你的要求扫描进去的。这是为什

么呢?我也摸索了两天才弄明白这是为什么了.

造成的这个的主要原因不是逻辑的错误,因为单步调试可以,而是DSP的速度太快。

因为你在键盘扫描中肯定有一条语句是先给IO口赋个值,然后读取IO口的状态,然后判断和你原先给的值一样不,如果不一样说明有键按下,这样的逻辑没有任何错误,错误在哪里?就在你给IO口赋值的时候,由于DSP执行的速度太快,如果你没有延时,而是马上读取IO的状态就要可能造成,IO的电平还没有完成变化的时候你就读取,这样就造成了你没有把当前的状态读取造成错误。所以,这就是我要说的第二点,在用DSP做IO口来扫描矩阵键盘的时候,给IO 口赋个值后,一定要延时哪怕是一条i++;指令也可以完成。再去读取IO口的状态。这样就可以完成了键盘的扫描。

接下来就是你把16个键扫描进去了,而每个键的功能需要自己定义,比如我的16个键其中0~9占了10个数字键,然后又有四个功能键,分别是用来显示零序参数、A相参数、B相参数、C相参数。然后有一个键是来设定其接地方式,通过该键可以选择1.经消弧线圈接地2.不接地3.经电阻接地。这三种接线方式。然后还有一个键没有定义,等待我的扩展。

这个键的定义根据你的其他模块又很大的关系,比如你用不同的显示模块,就会有不同的想法。我这里用的是1602显示,这个就比较简单,主要是1602的资源比较紧缺,所以开发的功能也就比较少,根

据设计任务的要求要实时显示,并且可以实时观测其他相得参数,这样就要求和按键结合起来了。并且要可以改变接线方式,可以根据接线方式来设定对应的参数等等的操作,而且这些参数的改变需要实时可以观察到。这些要求就可以任你想着怎样把键盘和显示联合起来。比如要设定什么值,或是按下那个键就要显示某个东西,你要你在扫描到那个键后面调用相应的现实函数就可以了。具体不在介绍可以参考我的例程。

学生:王传胜

指导老师高瑜

相关文档
最新文档