×
单片机 > 单片机程序设计 > 详情

实现位变量反转功能

发布时间:2020-08-31 发布时间:
|

////////////////////////////////////////////////////////

在51单片机中有个特殊的变量 sbit (位变量)

用它做一个变量反转是很简单的, nuber=!nuber就实现了。

为什么需要这个功能呢?

下面看一个程序

假设 LED是一个灯,LED=1为亮,LED=0为灭。

那么我想要他200毫秒闪烁,

 

while(1)

{

  LED=!LED;

  delay_ms(200);

}

这是51单片机的写法。

 

在c语言中这样是不可取的,因为我们不能去映射某一位,(其实是我不会把寄存器映射某一位出来操作)

所以通常我用的都是函数LED_ON(),LED_OFF()

 

这样的话程序就该这样

while(1)

{

  LED_ON()

  delay_ms(100);

  LED_OFF();

    delay_ms(100);

}

那么我的while(1)中还有其它很多事情,我必须每10ms跑一次,那么51实现200ms的闪烁应该这样

while(1)

{

  n++;

  if(n==20){

    n=0;

            LED=!LED;

    }

  delay_ms(10);

}

也很简单,但是放在没有位变量的stm32呢?程序是不是该想一想了?

我下面提供一下小方法

(1)

flag=1; //需要应该标志变量

while(1)

{

  n++;

  if(n==20){

            n=0;

   if(flag==1)

LED_ON();

   else LED_OFF(); 

flag*=-1 //这里每次乘以-1,其实就是从1变-1,又到1

    }

  delay_ms(10);

}

 

(2)

flag=1; //需要应该标志变量

while(1)

{

  n++;

  if(n==20){

            n=0;

   if((flag&0x1)==1)

LED_ON();

   else LED_OFF(); 

        flag=!flag;    //这个也一样  

 

    }

  delay_ms(10);

}

当然还有很多实现的方式,就不一样列举了。

关键字:位变量  反转功能  51单片机 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
采用AT89C2051的数字可调稳压电源单片机源程序