在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);
}
当然还有很多实现的方式,就不一样列举了。
实现位变量反转功能
最新推荐文章于 2024-05-08 17:39:49 发布