单片机上电后所有I/O口默认高电平 51 TTL电平:高 + 5V 逻辑1; 低 - 0V 逻辑0 按键松开,读取寄存器逻辑1; 按键按下,读取寄存器逻辑0 位运算:
运算符 | 意义 | 例子 |
---|
<< | 按位左移 | 0011 1100<<1 -> 0111 1000 | >> | 按位右移 | 0011 1100>>2 -> 0000 1111 | & | 按位与 | 0001 1000 & 0010 1010 -> 0000 1000 | | | 按位或 | 0001 1000 | 0010 1010 -> 0011 1010 | ^ | 按位异或(同位相等为0,不等为1) | 0001 1000 ^ 0010 1010 -> 0011 0010 | ~ | 按位取反 | ~0001 1000 -> 1110 0111 |
实例1 独立按键控制LED亮灭
#include <REGX52.H>
void main()
{
while(1)
{
if( P3_1==0 )
{
P2_0 = 0;
}
else
{
P2_0 = 1;
}
}
}
实例2 独立按键控制LED状态
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
P2_0 = ~P2_0;
}
}
}
实例3 独立按键控制LED显示二进制
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
void main()
{
unsigned char LEDNum = 0;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
P2 = ~LEDNum;
}
}
}
实例4 独立按键控制LED移位
#include <REGX52.H>
void Delay(unsigned int xms);
unsigned char LEDNum;
void main()
{
P2 = ~0x01;
while(1)
{
if(P3_1==0)
{
Delay(20);
while(P3_1==0);
Delay(20);
LEDNum++;
if(LEDNum>=8)
LEDNum = 0;
P2 = ~(0x01 << LEDNum);
}
if(P3_0==0)
{
Delay(20);
while(P3_0==0);
Delay(20);
if(LEDNum==0)
LEDNum = 7;
else
LEDNum--;
P2 = ~(0x01 << LEDNum);
}
}
}
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--)
{
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
}
}
|