是不是STC32单片机太快了,矩阵按键的扫描激励通过IO送出去后,尚不稳定就开始了状态读取呢?
可以在分别 ...
试过了还是不行。 xxkj2010 发表于 2024-11-5 09:19
的确很神奇,有时间得试一试。
{:smile:} 王昱顺 发表于 2024-11-4 23:50
可以进入仿真,看看实际运行中的输入是进入了哪一行。
方便确定是哪里的问题 ...
嗯嗯,稍后会试一下 VCC 发表于 2024-11-5 00:13
是不是STC32单片机太快了,矩阵按键的扫描激励通过IO送出去后,尚不稳定就开始了状态读取呢?
可以在分别 ...
他这个判断实在while(1)循环里面,就算状态不稳也不会持续很久,若干次循环后总会稳定,而且只有开灯操作,没有闭灯操作,不大可能因为IO速度太快判断出错。 江上酒酒 发表于 2024-11-5 09:12
受教了,主要是新手,看手册有些难度。
(1)对于工作在“准双向口”模式的端口,在向端口赋值后(“P0=0XFE; //检测第一列”或者“P0=0XFD; //检测第二列”),需要等两个时钟周期以上才能正确读到端口的数据(“if(P06==0&&P07==1)//0键按下”或者“if(P06==0&&P07==1)//1键按下”)
(2)因此对于任何行列式(矩阵式)扫描键盘,必须在设置端口后加“NOP”指令延时后再读键盘状态!
(3)“看手册有难度”,抄袭会不会?举一反三会不会?下面是STC官方范例,官方范例就是拿来给你抄的呀:
void IO_KeyDelay(void)
{
u8 i;
i = 60;
while(--i);
}
void IO_KeyScan(void) //50ms call
{
u8j;
j = IO_KeyState1; //保存上一次状态
P0 = 0xf0;//X低,读Y
IO_KeyDelay();
IO_KeyState1 = P0 & 0xf0;
P0 = 0x0f;//Y低,读X
IO_KeyDelay();
IO_KeyState1 |= (P0 & 0x0f);
IO_KeyState1 ^= 0xff; //取反
(4)古人都知道“走路走大路,万不要走小路,”,对于STC单片机,STC官方的手册就是大路,STC官方范例就是大路,大路宽,大路直,大路才是最短的路。
(5)感叹:版主、客服、咨询和老总,一个比一个耐心好,要是我的学生这样,他早就被泪眼汪汪了
页:
1
[2]