实现位变量反转功能


	在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);
	}	
	
	当然还有很多实现的方式,就不一样列举了。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值