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

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 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
  • ¥15 Mac(标签-IDE|关键词-File) idea
  • ¥15 潜在扩散模型的Unet特征提取
  • ¥15 iscsi服务无法访问,如何解决?
  • ¥15 感应式传感器制作的感应式讯响器
  • ¥15 如何使用SC92F8003固件库解析私有协议数据?
  • ¥15 如何在音频中嵌入字符串(水印)信息进行传递
  • ¥30 plc怎么以设计说明书申请软著
  • ¥15 硬盘识别不了,需要初始化,可我的数据怎么办
  • ¥15 lvm2被mask了,怎么unmask都没用(标签-ubuntu|关键词-apt)