关于二进制LED等的亮灭问题,一是=号和==号,而是关于if条件语句的判断执行问题。

#include<regx51.h>
#include<intrins.h>

void delay(unsigned int xms)        //@11.0592MHz
{
    unsigned char i, j;
    while(xms--)
    {    _nop_();
        i = 2;
        j = 199;
        do
        {
            while (--j);
        } while (--i);
    }

}         

void main()
{
    unsigned char lednum=0;
    while(1)
    {    
        if(P3_1==0)//该条件语句是判断k1是否按下,判断应该用==号,而我用成了=号。下面while同理。
        { //曾将if条件语句下面的花括号省略了,结果功能不能正常执行,加上就没有问题,还没有想明白这是因为什么,这个程序到底怎么执行的。
            delay(20);//延时消抖
            while(P3_1==0);//再次判断K1是否按下,如果按下了,那么P3_1=1,为假。即结束while循环。
            
            lednum++;//二进制加法   0000 0001 ,0000 0010 , 0000 0011 ,0000 0100    ,看出led亮灭高低电平刚好相反。
            P2=~lednum; 
         }
    
    }
}

关于这个程序,第一个问题就是把判断的==号,别用成了=号。写程序的时候犯了这样的错。第二个问题就是主函数中的if条件语句,刚开始把下面的花括号省略了,程序没有实现想象中的功能,加上花括号就好了。但是还是没有想明白这个花括号加不加程序到底是怎么执行的,问什么会出现这种问题,有大神吗?可以帮忙解答一下嘛?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值