//主要使用P2的8个LED和P3的两个独立按键
按亮松灭
#include <REGX52.H>
void sleep(unsigned int bs)//耗时约半秒
{
int i,j;
while(bs--)
{
i=2,j=240;
do
{
while(--j);
}while(--i);
}
}
int main()
{
while(1)
{
if(P3_3==0)//按k4按键D1灯亮
{
sleep(1);//避免按键抖动,耗时半秒
while(P3_3==0) P2_0=0;
sleep(1);
}
else P2_0=1;//松开即灭
}
return 0;
}
一组按抬 控制亮灭
#include <REGX52.H>
void sleep(unsigned int bs)//耗时函数
{
int i,j;
while(bs--)
{
i=2,j=200;
do
{
while(--j);
}while(--i);
}
}
int main()
{
P2_0=0;//初始化灯亮
while(1)
{
if(P3_3==0)//
{
sleep(1);//这三行是判断是否按下抬起
while(P3_3==1)//
{
P2_0=1^P2_0;break;//按位异或
}
}
}
return 0;
}
左右按键一组按抬 实现LED移位效果
#include <REGX52.H>
void sleep(unsigned int bs)//ºÄʱԼ°ëÃë
{
int i,j;
while(bs--)
{
i=2,j=200;
do
{
while(--j);
}while(--i);
}
}
int main()
{
P2=0xFE;
while(1)
{
if(P3_0==0)//右开关
{
sleep(1);
while(P3_0==1)
{
P2=(P2<<1)+1;break;//左移需要加一
}
if(P2==0xFF)
{
P2=0xFE;
}
}
if(P3_1==0)//左开关
{
sleep(1);
while(P3_1==1)
{
P2=~(~P2>>1);break;//负数右移位需要两次取反
}
if(P2==0xFF)
{
P2=0x7F;
}
}
}
return 0;
}