找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 960|回复: 13
收起左侧

这段单片机代码判断失效 求大佬解惑

[复制链接]
ID:1114858 发表于 2024-3-31 11:59 | 显示全部楼层 |阅读模式
unsigned char  Positional_Selection()//位选:选择更改位{

        if(Key()==2)
        {
               
                Bit_selection++;
               
        }
        
        if(Bit_selection>5)
        {
               
                Bit_selection=0;
        
        }

        
        return Bit_selection;
}
按下按钮后
if(Key()==2)
        {

                Bit_selection++;

        }

这段代码判断失效
求各位大佬帮忙看下到底是哪出了问题

DS1302时钟显示 - 可调时钟.rar

60.28 KB, 下载次数: 6

回复

使用道具 举报

ID:712097 发表于 2024-3-31 17:23 | 显示全部楼层
这段代码对应的IO是P30,查下有没有上拉?或者你把这个与正常的按键IO交换一下,就对判断是软件问题还是硬件问题了。
回复

使用道具 举报

ID:1114858 发表于 2024-3-31 17:47 | 显示全部楼层
chxelc 发表于 2024-3-31 17:23
这段代码对应的IO是P30,查下有没有上拉?或者你把这个与正常的按键IO交换一下,就对判断是软件问题还是硬 ...

谢谢回复,排查过了不是硬件问题
回复

使用道具 举报

ID:1109793 发表于 2024-3-31 17:53 | 显示全部楼层
可能key()永远不会等于2,被编译器忽略了
回复

使用道具 举报

ID:1114858 发表于 2024-3-31 18:06 | 显示全部楼层
xiaobendan001 发表于 2024-3-31 17:53
可能key()永远不会等于2,被编译器忽略了

谢谢你的回复,Key()这个函数的返回值里是可以等于2的这个我测试过了
回复

使用道具 举报

ID:69038 发表于 2024-3-31 19:25 | 显示全部楼层
要看你key()的代码和硬件电路连接。。
回复

使用道具 举报

ID:1114858 发表于 2024-4-1 11:20 来自手机 | 显示全部楼层
zhuls 发表于 2024-3-31 19:25
要看你key()的代码和硬件电路连接。。

谢谢你的回复,用的是普中的开发板,硬件应该没有什么问题
回复

使用道具 举报

ID:1109793 发表于 2024-4-1 12:31 | 显示全部楼层
if(Bit_selection>5)
        {
               
                Bit_selection=0;
        
        }
这部分有被编译吗?KEY()里面的代码发出来看看吧
回复

使用道具 举报

ID:1010435 发表于 2024-4-1 12:51 | 显示全部楼层
  1. 按下按钮后
  2. if(Key()==2)
  3.         {

  4.                 Bit_selection++;

  5.         }

  6. 这段代码判断失效
复制代码


你确定这个代码是失效了,还是Bit_selection一直在++
回复

使用道具 举报

ID:69038 发表于 2024-4-1 13:29 | 显示全部楼层
下一站过后 发表于 2024-4-1 11:20
谢谢你的回复,用的是普中的开发板,硬件应该没有什么问题

KEY()里面的代码呢?
回复

使用道具 举报

ID:1114858 发表于 2024-4-1 20:31 | 显示全部楼层
zhuls 发表于 2024-4-1 13:29
KEY()里面的代码呢?

#include <REGX51.H>
#include "Delay.h"       
unsigned char Key()
{
        unsigned char KeyNumber=0;
       
        if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}
        if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}
        if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}
        if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}
       
        return KeyNumber;
}
       
回复

使用道具 举报

ID:1114858 发表于 2024-4-1 20:31 | 显示全部楼层
mtt661 发表于 2024-4-1 12:51
你确定这个代码是失效了,还是Bit_selection一直在++

谢谢回复,
没失效
回复

使用道具 举报

ID:1114858 发表于 2024-4-1 20:32 | 显示全部楼层
mtt661 发表于 2024-4-1 12:51
你确定这个代码是失效了,还是Bit_selection一直在++

#include <REGX51.H>
#include "Delay.h"       
unsigned char Key()
{
        unsigned char KeyNumber=0;
       
        if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}
        if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}
        if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}
        if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}
       
        return KeyNumber;
}
       
这是Key里面的代码麻烦大佬给看看
回复

使用道具 举报

ID:619259 发表于 2024-4-2 00:07 | 显示全部楼层
你的模块化不完善,.h文件有了但没包含,等于没有呵
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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