①在REGX52.H文件中,变量P2表示整个8个LED灯的状态。
如果用二进制表示,一共有8位,从高位到低位依次是D8-D1。
如果用单独的变量表示对应的一个LED灯,则P2_0到P2_7分别是D1-D8。
②变量P3表示独立按键,P3_0表示独立按键K2,P3_1表示独立按键K1。
低电平代表独立按键受到压力的状态,高电平表示不受压力的状态。
DISC1:独立按键控制LED灯
#include <REGX52.H>
void main(){
P2_0 = 0;
while(1){
if(P3_0 == 0 || P3_1 == 0)
{
P2_0=0;
}
else
{
P2_0=1;
}
}
}
这段程序实现的具体功能是,当独立按键受到外力(不松手);LED灯亮。当独立按键不受外力时(松手),LED灯熄灭。
DISC2:独立按键控制LED灯的状态
这部分代码主要的功能是,控制独立按键,使得其像是电灯泡开关一样。按一下灯亮,再按一下灯灭,长此以往,P2_0的初始状态表示灭。
#include <REGX52.H>
void Delay(unsigned int xms) //@12MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
void main()
{
while(1)
{
if(P3_1==0)//P3_1==0表示被按下
{
Delay(20);
while(P3_1==0);//按下没松手
Delay(20);
P2_0 = ~P2_0;//状态取反
}
/*P2_0=0;
Delay(500);
P2_0=1;
Delay(500);*/
}
}
DISC3:独立按键控制LED灯显示二进制
#include <REGX52.H>
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms--){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
}
}
void main(){
unsigned char LEDNum = 0;
while(1){
if(P3_1==0){
Delay(200);
while(P3_1==0);
//P2++;//高电平代表灭,低电平代表亮,D8-D1代表从高位到低位
LEDNum++;
P2=~LEDNum;
}
}
}
DISC4:独立按键控制LED灯移位(难点1)
#include <REGX52.H>
void Delay(unsigned int xms); //@12.000MHz
void main(){
unsigned char LEDNum = 0;
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) //@12.000MHz
{
unsigned char i, j;
while(xms){
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}