Bronyaer 2022-12-07 18:02 采纳率: 60%
浏览 38
已结题

51单片机独立按键控制LED二进制

独立按键控制LED二进制
STC89C52以及普中51的开发板
第一个问题 为什么要定义为unsigned char,int可不可以
第二个 为什么 NUM++;P2=~NUM;放在if的大括号外边就不型,在里面就可以


#include <REGX52.H>
#include<INTRINS.H>
int main()
{
    //        P2=0XFE;
    void Delay1ms(int x);
    unsigned char NUM=0;
    while(1)
    {
        if(P3_1)
        {
            Delay1ms(20);
            while(P3_1)
            {
                Delay1ms(20);

            }
        NUM++;
        P2=~NUM;
        }


    }
    return 0;
}

void Delay1ms(int x)        //@11.0592MHz
{
    while(x)
    {
        unsigned char i, j;

        _nop_();
        _nop_();
        _nop_();
        i = 11;
        j = 190;
        do
        {
            while (--j);
        } while (--i);
        x--;
    }
    
}

  • 写回答

1条回答 默认 最新

  • Norcor 2022-12-07 18:36
    关注

    1.int是可以的,但是但凡玩单片机的都会注意内存管理。int太大了,而且不同的平台下,int的长度也不相同。
    为什么用unsigned char?unsigned char值是0-255,16进制为0-0xff,只占用一个字节,除了bit以外的最小单位,省空间而且够用啊
    2. 如果放在if外,那就在P3_1为低电平的情况下,就一直执行;放在if内,则在p3_1被拉高时,进入第二级while,并在p3_1被松开时,执行
    显然,你想做个按键控制,就必须放在if内
    ps.你确定要P2 = ~NUM嘛?如果我没猜错,P2应该也是一个引脚,引脚的类型一般是bit,只有1位。而NUM可是一个有8位的unsigned char啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 12月18日
  • 已采纳回答 12月10日
  • 创建了问题 12月7日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵