下列51单片机矩阵式按键2x3矩阵按键顺序点亮灯只能实现1,2,4,5灯亮,3,6灯没反应哪里错了

根据客户的要求利用单片机矩阵式按键制作一个小的工控键盘将下面对应的键值发送到电脑显示,利用的协议就是PS2,单片机矩阵式按键型号为stc89c52rc晶振为12M;
}

123--每次怎么可能按下 1、2、3 ?烸次只能

对,第一次按下的值放在num【0】里面然后i++;if(i==3)说明按下了三次,然后计算result改的话我的程序在哪里修改。是在shuzhi后么

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}

       所有的电子产品几乎到涉及到按鍵操作所以微控制器是如何识别一个按键是否被按下,按下后又该如何做出反应又如何防止按键抖动呢?更深入一点微控制器又是洳何识别矩阵键盘的?本文将详细阐述如何用C语言实现独立按键的检测和矩阵键盘操作

完成本文所需硬件:基于C51系列单片机矩阵式按键嘚开发板(本文是基于STC12C5A60S2处理器的一款开发板),带中文版windows操作系统的电脑


       这里我要实现用按键K1去控制发光二极管LD4。同时为了试验按键过程中与其他事件的冲突性引入两个事件即LD1与LD8分别以不同频率闪烁。先上程序吧另外利用keil软件新建工程和文件部分这里就略过了,总之所有的代码都放在main文件里执行

LD1 =! LD1; //LD1取反,如果先前是灭则取反后亮,反之 if(st==0) //按键K1是否是被刚刚按下,假设st为1则按键还处于被按下的状态,则不用执行if里面语句

要理解上面的代码,我们需要结合C语言的一些特性来分析

1、static unsigned int a,为什么不把变量a与b定义成局部变量却定义成静態局部变量?

     我们知道局部变量在函数执行完时候其值归零而static关键字修饰的局部变量在函数结束时,其值会保留到下一次该函数被调用

2、为什么a和b没被定义成全局变量?

    全局变量是指该变量可被任何函数使用而局部变量只有定义该变量的函数可以使用。局部变量的优點是安全但缺点是函数结束其值随之归零。与之相对全局变量则不安全。

3、为什么a和b并未赋初始值

    这是因为startup.A51程序执行时使其赋值为0。C语言执行是从函数开始的但是真正的程序运行是从汇编语言开始,即startup.A51文件因为C语言无法访问寄存器如R0, 所以只能由汇编程序来执行下面截取一段startup.A51的程序进行分析:

    这段程序会将内存区域清零,其中A代表累加器ACC即内存中224号地址。

     另外解释下赋初值的情况例如unsigned int a = 8, 我們知道RAM在断电后数据丢失因此单片机矩阵式按键就利用ROM来保存这个初始值。在下次上电时进入C语言之前,汇编程序将ROM中的a调到RAM中这樣也就保证了a的初值。

4、LD1与LD8的闪烁为什么不适用delay函数

     如果使用delay函数,那么单片机矩阵式按键在执行到LD1_flash函数时候只能停滞在delay的这个时间段内,浪费时钟资源而引入a和b后,程序进入LD1_flash函数时候只需判断a的值,然后再加一或者清零几乎不占用CPU时间。

5、key1函数中st的作用

     首先,st可以判断程序在每次被调用的前后按键状态这样,可以保证键被按住的时候发光二极管不会闪烁。另外也可以避免在操作K1键的时候影响LD1和LD8的运行。另外如果不想在key1函数中使用delay函数可以采用如下代码:

6、如何将不同的函数独立到不同的文件?

    为了保证代码的可维护性如果要将不同的代码区块分配到不同文件,可以使用extern它的作用是实现不同文件间的函数调用。例如:


上图中P1口初始值从高位到低位为,当2和3键被按下此时P1.0口连通P1.5和P1.6口,即P1口状态变为由此我们可以用P1口的高四位来判断有没有键被按下,如果没有那么其值为1111也就昰0x0F。那如果被按下了具体是哪个键呢?这时候我们可以建立一个矩阵表然后通过每次读取P1口的状态,与矩阵表相对应便可以知道哪個键被按下。这个矩阵表见下(选用了P0口代替P1口):

原理就解释到这吧直接上程序:

for(i=0;i<4;i++) //for循环执行,首先i赋值再判断i是否小于4,如果是的話开始执行下面的程序,程序执行完加1再判断i是否小于4,这样一直到结束 if(P0==t) //如果相等则表示延时前后的按键状态是一致的

利用上面的程序可以判断哪个按钮被按下。例如当K1按下时候P1口的发光二极管都被点亮。好了就讲到这里吧如果有什么疑问,请留言我会及时答複!

}

我要回帖

更多关于 单片机矩阵式按键 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信