51单片机独立与矩阵
先确认一些程序里涉及到的内容,按键总共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的,明天再给你一个细化一点的流程吧,你再试试看能不能实现。