3.1独立按键控制LED(1)
本节实现持续按下独立按键,LED灯珠持续点亮,松手熄灭
原理:对于REGX52.H库,对P3_0也就是独立按键,按键按下时 ,触点接触,对I/o有改变这一点我还是不太明白。
#include<REGX52.H>
void main(){
while(1){
if(P3_0==0){
P2_0=0;
}
else{
P2_0=1;
}
}
}
3.2独立按键控制LED(2)
本节实现按下按键LED灯珠改变状态。在此之前我们先学习一种新情况-----按键的抖动
由于按键的抖动,会产生不确定的误差,因此需要消除这种情况
我们可以对按键进行延时操作确保收到正确的指令
#include <REGX52.H>
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main(){
while(1){
if(P3_1==0){//当检测到按键置0时,先延时20ms消除按键的抖动,确保按键是低电平
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);//最后在延迟20ms消除按键松手的抖动
P2_0=~P2_0;//对D1灯珠进行取反操作,改变灯珠状态
}
}
}
3.3独立按键控制LED (3)
学习了以上知识,我们知道P2作为LED显示控制的八位参数,当对应位置为低电平的时候,LED亮起,以下代码使用了按位取反使对应灯珠亮起。
#include <REGX52.H>
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main(){
unsigned char LEDNum;
LEDNum=0;
while(1){
if(P3_1==0){
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);
LEDNum++;
P2=~LEDNum
}
}
}
3.4独立按键控制LED(4)
本节实现通过按键K1 K2 控制灯珠分别向左向右移动,下方代码与江协科不太一样,
LEDNum=(++LEDNum)%8;
这里使用了取余运算使LED只在0~7之间亮起
#include <REGX52.H>
void Delay1ms(unsigned int xms);
unsigned char LEDNum;
void main(){
P2=~(0X01);
while(1){
if(P3_1==0){
Delay1ms(20);
while(P3_1==0);
Delay1ms(20);
LEDNum=(++LEDNum)%8;
P2=~(0X01<<LEDNum);
}
if(P3_0==0){
Delay1ms(20);
while(P3_0==0);
Delay1ms(20);
LEDNum=(--LEDNum)%8;
P2=~(0X01<<LEDNum);
}
}
}
void Delay1ms(unsigned int xms) //@11.0592MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 199;
do
{
while (--j);
} while (--i);
xms--;
}
}