微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机独立与矩阵

51单片机独立与矩阵

时间:10-02 整理:3721RD 点击:
51芯片,我想写一个程序,需要用到10个按键来设置0-9,   4个选择键,还有一个启动和停止键。我想从独立键盘分离出4个键来做选择键,但是分离出来的独立和矩阵的一起用,不能正常工作,想请大神帮帮忙。

先确认一些程序里涉及到的内容,按键总共14个,4个选择键,10个数字键,数码管暂定2位,显示内容为10-49,其中十位为选择键的编号,个位对应十个数字键,操作过程为选择键和数字键交替按下,即先按下选择键,再按下数字键,之后又是选择键,如此循环。首先按键程序用扫描方式的程序,不用中断方式,通过给行或列的四个引脚置1,读入列或行的四个引脚状态,判断是否有按键按下,有按键按下后,需要判断按键的释放,作为按键结束的判断,防止多次按键的产生。按键的处理和对应内容的显示可以用一个子程序。主程序扫描按键,当有选择键按下时,进入按键处理子程序。按键处理子程序里根据按下的选择键在数码管十位显示对应的数值,然后执行按键扫描子程序,当按键为数字键时为按键有效,若是选择键按下则不理,重新进行按键扫描。当数字键按下后,在数码管个位显示对应的数值,然后退出按键处理子程序,返回主程序。

这还不简单:这个可以采用 双击 的方式来解决嘛。

代码贴出来,或者把算法大概讲一下,然后我帮你出出主意。

按键复用吗?      

这个不了解  跟着小编学习一下

给你个建议哦,用功能键的方式
举个例子,假如你有10个按键,分别是0-9
那么01234 这5个用来做功能键,0是选择键,1234是启动和停止等等。
56789这5个呢,本来是代表 0-4这5个按键,一旦0那个选择键按下,就变成56789这5个按键
这么说,你能听得懂吗

这个就设计到菜单程序啦! 0-9 10个按键 这个应该是在一个子菜单里才有效,而开机停止等功能键 只能是在主菜单才有效 只要程序菜单设计的好 不会冲突的

这里我想K1,K5,K9,K13做选择键,K2,K3,K4,K6,K7,K8,K10,K11,K12,K15按下去的时候是1,2,3,4,5,6,7,8,9,0。如果按下k1,再按K2-K15.在数码管第一位上就显示相应的键值。按下K5,再按K2-K15,在数码管的第二位上就显示相应 的数值。以此类推。

这里好像不涉及独立和矩阵的问题,你这个是类似菜单的性质,不同的选择键是不同的菜单,不同的数码管是对应菜单要显示的内容,另外S1-S4四个键你还没定义用途。

可以考虑双键或者三键位同时按,定义最左端为最高为,依次得到的单键位编码为0001,0010,0100,1000四个码位,然后双键位可以考虑,0011,0101,1001,0110,1010,1100,共计6键位,再加上3键位同时按,就有14个组合,这个就可以用来满足10键位需求。就是比价不好按。区分不好容易错。

对,类似这样。其他四个独立按键直接给低电平就可以了。有想法吗?

你是说两个或者三个键一起按下去?是这个意思吗?

对的,比如4*4矩阵,我把要返回键值的0-9这10个按键写在一个函数里,4个选择键写在另一个函数里,只有按下选择键后再按数值键才有效。我是在中断里面实时扫描这个选择键。但是实现不了

我知道,不过写出来的代码有点问题

暂时还不知道你那四个独立按键怎么用,先不管他们。其他的可以做成四个子程序,一个选择键一个子程序,主程序如果检测到选择键,则进入相应选择键的子程序,在子程序里再进行按键检测,检测到按键后,就在对应的数码管显示对应的内容就可以了,这种做法比较简单,也比较重复,四个子程序的功能和写法都差不多。如果功能实现了,你可以尝试把四个子程序合成一个,就是多了些判断就是了。

有兴趣写一个吗?我写一个,然后对比一下。看看能不能实现,一起讨论下。

是的。这样编码不易就容易区分,输入数字是可以以考虑用和的方式进行输入。

这样是达不到要求的,而且也不可能这样做。

我是用汇编写51的,明天再给你一个细化一点的流程吧,你再试试看能不能实现。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top