单片机P2端口,我用矩阵键盘编写的调时程式出现乱码

单片机P2端口,我用矩阵键盘编写的调时程式出现乱码,第1张

我就搞不懂了,K1按下后,P2=0x7F(0b0111 1111),3×3键盘所在 P20~P25全是1,它是怎么识别后面的 K2、K3的。
这程序,大量使用delay ,不闪烁就见鬼了。
这程序,没有松手检测,不乱加就见鬼了。
从TR0=~TR0可以看出,LZ已经会定时器了。会定时器,还在使用Delay,就有点“活该”的味道了。
如果你从网上某某视频学的,建议你删了那些个视频,真的害人不浅。
如果你是纯粹自己乱想做的,建议你改变一下编程思维。
1、延时不是靠delay来做的。单片机中,与时间有关的东西,是定时器。应该采用定时器计时的方法作为时间标准。
2、可救的是,LZ对按键,还没使用while(K==0)。按键是否按下、是否松手,不需要死等,只要记录按键状态即可判断。从无到有,即为按下,从有到无,即为松手。
3、51单片机只能识别低电平,不能识别高电平。单片机识别高电平,其实是通过识别,不是低电平来认为是高电平的。让键盘扫描端口=1,只会让单片机无法识别按键。

实验目的
1. 了解 44 矩阵键盘的工作原理。
2. 掌握利用行列扫描法读取按键信息及软件消抖的方法。
3. 熟悉掌握 VHDL 语言和 QUARTUS 2 软件的使用。
4. 理解状态机的工作原理和设计方法。
5. 掌握利用 EDA 工具进行自顶向下的电子系统设计方法。
实验任务
设计制作一个检测 44 矩阵键盘的按键编码的实验, 把实际按键的 键值的八位编码先转换成从 0000—1111 的编码,再译成数码管能识别 的八位编码, 在数码管动态显示时, 矩阵键盘的第一行对应 00—03, 44 第二行对应 04—07,第三行 08—11,第四行对应 12—15。
实验原理
1.键盘的工作原理: 按键设置在行、列线交点上,行、列线分别连接到按键开关的 两端。行线通过上拉电阻接到+5V 电源上。无按键按下时,行线处 于高电平的状态, 而当有按键按下时, 行线电平与此行线相连的列 线电平决定。
2.行列扫描法原理:
第一步, 使行线为编程的输入线,列线是输出线,拉低所有的列线, 判断行线的变化,如果有按键按下,按键按下的对应行线被拉低,否则 所有的行线都为高电平。
第二步, 在第一步判断有键按下后, 延时 10ms 消除机械抖动,再次读取行值,如果此行线还处于低电平状态则进入下 一步,否则返回第一步重新判断。
第三步,开始扫描按键位置,采用逐 行扫描,每间隔 1ms 的时间,分别拉低第一列,第二列,第三列,第四 列,无论拉低哪一列其他三列都为高电平,读取行值找到按键的位置, 分别把行值和列值储存在寄存器里。
第四步,从寄存器中找到行值和列 值并把其合并,得到按键值,对此按键值进行编码,按照从第一行第一 个一直到第四行第四个逐行进行编码,编码值从“0000” 至“1111” , 再进行译码,最后显示按键号码。 3.数码管动态扫描原理。数码管动态扫描原理: 数码管的 7 个段及小数点都是由 LED 块组成的,显示方式分为静 态显示和动态显示两种。数码管在静态显示方式时,其共阳管的位选 信号均为低电平,四个数码管的共用段选线 a、b、c、d、e、f、g、dp 分别与 CPLD 的 8 根 I/O 口线相连,显示数字时只要给相应的段选线送 低电平。数码管在动态显示方式时,在某一时刻只能有一个数码管被 点亮显示数字,其余的处于非选通状态,位选码端口的信号改变时, 段选码端口的信号也要做相应的改变 ,每位显示字符停留显示的时间 一般为 1-5ms,利用人眼睛的视觉惯性,在数码管上就能看到相当稳定 的数字显示。

是要仿真吗?还是在实物开发板上显示?
写C程序吗?还是汇编程序?
既然都用矩阵键盘了,还用什么独立键盘K1?
一个时钟吗,值得用矩阵键盘吗?纯粹就是为了使用矩阵键盘吧?


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12954152.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存