1. 一开始给予ledone = 1 高电平不亮,用" ! "取反符号,实现单键控制LED1亮
#include "reg52.h"
#include <intrins.h>
sbit key2 = P2^0;
sbit key1 = P2^1;
sbit ledone = P3^7;
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()
{
ledone = 1;
while(1)
{
if(key1 == 0)
{
Delay50ms();
if(key1 == 0){
ledone = !ledone;
}
}
else if(key2 ==0)
{
ledone = 1;
}
}
}
2. 当业务代码相对复杂了,要处理的时序很多,这就要记录状态来控制IO口,比如以下代码,一开始给予记录状态变量为OFF_STATUS; key1==0,表示key1按下,key2雷同,if()函数判断给予ledmark赋值; 在下一个if()函数判断中实现led的亮灭
#include "reg52.h"
#include <intrins.h>
#define ON_STATUS 1
#define OFF_STATUS 0
sbit key2 = P2^0;
sbit key1 = P2^1;
sbit ledone = P3^7;
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 ledMark = OFF_STATUS;
ledone = 1;
while(1)
{
if(key1 == 0)
{
Delay50ms();
if(key1 == 0){
ledMark = ON_STATUS;
}
}
else if(key2 ==0)
{
ledMark = OFF_STATUS;
}
if(ledMark == ON_STATUS)
{
ledone = 0;
}else{
ledone = 1;
}
}
}