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

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 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 用matlab 设计一个不动点迭代法求解非线性方程组的代码
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler
  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试