1.独立按键
1.1独立按键工作原理
此单片机使用的独立按键是轻触按键——相当于是一种电子开关,按下时开关接通,松开时开关断开,实现原理是通过轻触按键内部的金属弹片受力弹动来实现接通和断开。
图1独立按键原理图
由图1可知四个独立按键某一端构成一个公共端并接地,并由四条输入线接到单片机的IO口上,当按下K1按键时,+5v通过按键K1最终进入GND形成一条通路,由于这条电路的全部电压都加到了该通路的电阻上,所以K1这个引脚就是个低电平。当松开按键后,线路断开,就不会有电流通过,K1和+5v就应该为等电位,是一个高电平。于是我们就可以通过K1和这个IO口的高低电平来判断是否有按键按下。
1.2按键的抖动
对于机械开关,当机械触点断开,闭合时,由于机械触点的弹性作用,一个开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开,所以会在闭合及断开的瞬间会伴随着一连串的抖动(如下图2)。所以我们在使用独立按键时,在按下与松开时应给以适当时间的延时。
图2
2.LED
2.1LED介绍
LED灯即发光二极管,发光二极管为二极管的一种,二极管有阳极和阴极,电流从正极流向负极导通,反向阻断。
图3LED实物图及原理图
2.2LED的工作原理
由下图知八个LED的正极分别串联一个限流电阻后共同接到VCC,由此,某P2口输出一个低电平时,相当于跟GND一样的0v电压,此时与之 相对应的整个电路接通,LED被点亮;反之,当某P2口输出一个高电平时,相当于跟VCC一样的5v电压,此时与之相对应的整个电路两端是等电位,是一个高电平,LED熄灭。于是我们可以给相应P2口输入高低电平来实现对与之对应LED的亮灭进行控制。
图4
3.代码
#include <REGX52.H>
void Delay(unsigned int xms)
{
unsigned char i, j;
while(xms--){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main(){
unsigned char LEDNum=0;
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);
}//按下独立按键1时,LED灯向左移
if(P3_0==0){
Delay(20);
while(P3_0==0);
Delay(20);
if(LEDNum==0)
LEDNum=7;
else
LEDNum--;
P2=~(0x01<<LEDNum);
}//按下独立按键2时,LED灯向右移
}
}