一.独立按键
    1.特点:同侧导通,异侧断开
   2.独立按键的I/O口
       单片机上电后,所有I/O口默认都是高电平。没有按开关时都是高电平,按下后变成低电平。
       寄存器通过检测高低电平检测按键是否被按下
 1)由下原理图可知,独立按键         K1 = P3_0       K2 = P3_1       K3 = P3_2       K4 = 
P3_3
 
二.LED
 1. 16进制表示
点亮第1个LED     P2 = 0xFE;      //1111 1110
点亮第2个LED    P2 = 0xFD;      //1111 1101
 点亮第3个LED   P2 = 0xFB;      //1111 1011
 点亮第4个LED   P2 = 0xF7;      //1111 0111
 点亮第5个LED    P2 = 0xEF;      //1110 1111
 点亮第6个LED    P2 = 0xDF;      //1101 1111
 点亮第7个LED     P2 = 0xBF;      //1011 1111
 点亮第8个LED    P2 = 0x7F;      //0111 1111
  
2.I/O口表示
点亮第1个LED     P2_0=0;      熄灭第1个LED    P2_0=1;
点亮第2个LED     P2_1=0;      熄灭第2个LED    P2_1=1;
点亮第3个LED     P2_2=0;      熄灭第2个LED    P2_2=1;
后面的LED以此类推
三.按键的抖动
         为了除去抖动造成的影响,可以在按键抖动期间使用延时函数,从而避开抖动时间
while(1){ if(P3_1==0) { //除去抖动 Delay1ms(20); while(P3_1==0); Delay1ms(20); 
//LED亮暗取反 P2_0 = ~P2_0; } } 
四.实例应用
1.实现除去抖动、按下按键后改变灯的暗亮的功能
功能:按一次,LED变亮,再按一次,LED变暗,再按一次,LED变亮,以此类推。
if(P3_1==0) //按键按一次 { P2_0 = ~P2_0; //LED电平取反一次 } #include <REGX52.H> void 
Delay1ms(unsigned int xms) //@12.000MHz { unsigned char i, j; while(xms) { i = 
2; j = 239; do { while (--j); } while (--i); xms --; } } void mian() { 
while(1){ if(P3_1==0) { Delay1ms(20); while(P3_1==0); Delay1ms(20); P2_0 = 
~P2_0; } } } 
2.独立按键控制LED显示二进制
功能:按一次开关,二进制计数+1
 unsigned char LEDNum=0; //0000 0000 while(1) { if(P3_1==0) { Delay1ms(20); 
while(P3_1==0); Delay1ms(20); LEDNum++; //0000 0001 P2=~LEDNum; //1111 1110(取反) 
} } #include <REGX52.H> void Delay1ms(unsigned int xms) //@12.000MHz { unsigned 
char i, j; while(xms) { i = 2; j = 239; do { while (--j); } while (--i); xms 
--; } } void main() { unsigned char LEDNum=0; //0000 0000 while(1) { 
if(P3_1==0) { Delay1ms(20); while(P3_1==0); Delay1ms(20); LEDNum++; //0000 0001 
P2=~LEDNum; //1111 1110(取反) } } } 
3.独立按键控制LED位移(按键版流水灯)
功能:每按一次开关,LED灯移动一次。
按位左移<<
 按位左移的代码实现
unsigned char LEDNum = 0 ; while(1) { if(P3_1==0) { LEDNum++; if(LEDNum>=8) 
LEDNum=0; P2=~(0x01<<LEDNum); //“<<”按位左移 } } #include <REGX52.H> void 
Delay1ms(unsigned int xms) { unsigned char i, j; while(xms) { i = 2; j = 239; 
do { while (--j); } while (--i); xms --; } } void mian() { unsigned char LEDNum 
= 0 ; while(1) { if(P3_1==0) { Delay1ms(20); while(P3_1==0); Delay1ms(20); 
LEDNum++; if(LEDNum>=8) LEDNum=0; P2=~(0x01<<LEDNum); } } }