在平时写代码的过程中,我们有时在主函数中要处理一些比较复杂的业务逻辑,就比如点灯。可能你业务逻辑复杂起来了,点灯的代码又不知道在哪写,这时候就可以用到标志位了。
#include "reg52.h" //51单片机的头文件
#include "intrins.h" //_nop_()函数的头文件
#define ON_STATUS 0 //宏定义状态的值
#define OFF_STATUS 1 //宏定义状态的值
sbit key1 = P2^1; //按键1的引脚
sbit key2 = P2^0; //按键2的引脚
sbit led1 = P3^7; //led1的引脚
void Delay50ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
_nop_();
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void main()
{
int mark = OFF_STATUS; //定义一个标志位,标志位默认为1
led1 = 1; //默认led1灯灭
//用while不断查询key1和key2的状态
while(1)
{
//判断key1的状态,如果key1为低电平执行花括号的代码
if(key1 == 0)
{
//延时50毫秒再次判断key1的状态
Delay50ms();
if(key1 == 0)
{
//标志位置0
mark = ON_STATUS;
}
}
//判断key2的状态,如果key2为低电平led1灭
if(key2 == 0)
{
//标志位置1
mark = OFF_STATUS;
}
//判断mark的状态来进行是否点灯的操作
if(mark == OFF_STATUS)
{
//灯灭
led1 = 1;
}
if(mark == ON_STATUS)
{
//灯亮
led1 = 0;
}
}
}
标志位的作用在于,你执行完一个逻辑以后,可以在其他的地方进行操作。