找回密码
 立即注册
查看: 836|回复: 15

发现一个神奇的问题

[复制链接]
  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-11-4 23:04:05 | 显示全部楼层 |阅读模式
本帖最后由 江上酒酒 于 2024-11-5 09:32 编辑

用32G12K128试验箱的矩阵按键点灯,
修改前1键控制P61灯,5键控制P65灯,运行后P61灯不会亮,P65可以亮,其余灯正常;
第一次修改后1键控制P65灯,5键控制P61灯,运行后P61灯会亮,P65可以亮,其余灯正常;
第二次修改后把1键连同它所控制的P61灯程序放在5键连同它所控制的P65灯程序后面,所有灯正常亮
但是只能是按照程序注释上的把两个按键程序调换(不含两个按键所控制的灯的程序或含两个按键所控制的灯的程序)才可以,如果按键程序不换顺序,把俩灯的顺序调换还是像修改前一样



总之,必须把按键1的程序放在按键5后面,所有灯都正常亮

#include <STC32G.H>
void Delay10ms(void)        //@24.000MHz
{
        unsigned char data i, j;

        i = 39;
        j = 230;
        do
        {
                while (--j);
        } while (--i);
}

void main()
{
        P0M0=0X00;
        P0M1=0X00;
        P4M0=0X00;
        P4M1=0X00;
        P6M0=0X00;
        P6M1=0X00;
        P40=0;
        while(1)
        {
                P0=0XFE;            //检测第一列
                if(P06==0&&P07==1)  //0键按下
                        P60=0;            
                if(P06==1&&P07==0)  //4键按下      
                        P64=0;
                P0=0XFD;            //检测第二列
                if(P06==0&&P07==1)  //1键按下        修改后这一行换成if(P06==1&&P07==0)
                       P61=0;
                if(P06==1&&P07==0)  //5键按下        修改后这一行换成if(P06==0&&P07==1)
                        P65=0;
                P0=0XFB;            //检测第三列
                if(P06==0&&P07==1)  //2键按下
                        P62=0;
                if(P06==1&&P07==0)  //6键按下
                        P66=0;
                        P0=0XF7;          //检测第四列
                if(P06==0&&P07==1)  //3键按下
                        P63=0;
                if(P06==1&&P07==0)  //7键按下
                        P67=0;
        }
}


43cb8a309623247ec5c2ba1abba3f3b.jpg
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:461
  • 最近打卡:2025-06-18 01:15:53
已绑定手机

38

主题

2222

回帖

2671

积分

荣誉版主

积分
2671
发表于 2024-11-4 23:37:21 | 显示全部楼层
看代码逻辑很简单,不大可能出现你描述的这种问题
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-06-18 10:23:27
已绑定手机
已实名认证

112

主题

2395

回帖

6042

积分

版主

积分
6042
发表于 2024-11-4 23:50:23 | 显示全部楼层
可以进入仿真,看看实际运行中的输入是进入了哪一行。
方便确定是哪里的问题
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:125
  • 最近打卡:2025-06-04 21:38:29
已绑定手机

60

主题

782

回帖

4027

积分

论坛元老

自定义头衔

积分
4027
发表于 2024-11-5 00:13:59 | 显示全部楼层
是不是STC32单片机太快了,矩阵按键的扫描激励通过IO送出去后,尚不稳定就开始了状态读取呢?

可以在分别激励1、2、3、4列的P0赋值语句后面,试着增加一点点延时,例如加3个_nop_()函数

点评

他这个判断实在while(1)循环里面,就算状态不稳也不会持续很久,若干次循环后总会稳定,而且只有开灯操作,没有闭灯操作,不大可能因为IO速度太快判断出错。  详情 回复 发表于 2024-11-5 10:17
联系我请点击左下角的【回复】按钮,否则我收不到消息提
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-13 00:05:49

115

主题

1223

回帖

1万

积分

荣誉版主

积分
13008
发表于 2024-11-5 00:39:29 | 显示全部楼层
据说流行“万事不决,先问网路”,其实很多问题是我们没有仔细阅读STC官方手册造成的。论坛中有很多问题也是不肯先看手册,张嘴就问的,其实正确的答案和解决问题的方法就已经在STC官方手册中了。因此我们应该养成碰到问题先看手册上有没有解答,“万事不决,先看手册”的习惯。
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:469
  • 最近打卡:2025-06-18 06:25:36
已绑定手机

19

主题

3231

回帖

5289

积分

论坛元老

积分
5289
发表于 2024-11-5 07:21:26 来自手机 | 显示全部楼层
逐个IO检测,感觉好奇怪啊
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:178
  • 最近打卡:2025-06-12 08:44:23
已绑定手机

15

主题

628

回帖

822

积分

高级会员

积分
822
发表于 2024-11-5 07:34:31 来自手机 | 显示全部楼层
是挺奇怪的
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-11-5 09:11:03 | 显示全部楼层
so*** 发表于 2024-11-5 07:21
逐个IO检测,感觉好奇怪啊

矩阵按键检测不是就两种方法吗
1十字交叉
2先确定一行或一列,再检测列或行,逐步循环扫描
还有其他方法吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-11-5 09:12:26 | 显示全部楼层
杨*** 发表于 2024-11-5 00:39
据说流行“万事不决,先问网路”,其实很多问题是我们没有仔细阅读STC官方手册造成的。论坛中有很多问题也 ...

受教了,主要是新手,看手册有些难度。

点评

(1)对于工作在“准双向口”模式的端口,在向端口赋值后(“P0=0XFE; //检测第一列”或者“P0=0XFD; //检测第二列”),需要等两个时钟周期以上才能正确读到端口的数据(“if(P06==0&&P07==1) //0键按下”或者  详情 回复 发表于 2024-11-5 11:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民I
  • 打卡总天数:75
  • 最近打卡:2025-01-05 14:16:57

30

主题

132

回帖

214

积分

中级会员

积分
214
发表于 2024-11-5 09:14:45 | 显示全部楼层
晓*** 发表于 2024-11-4 23:37
看代码逻辑很简单,不大可能出现你描述的这种问题

这种问题我之前也遇见过,之前用的是十字交叉进行矩阵按键扫描,也是有个键没反应。
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-18 11:52 , Processed in 0.163991 second(s), 107 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表