51单片机通过独立按键实现led左右移动
#include "reg52.h" //定义一些特殊功能寄存器
typedef unsigned int u16;
typedef unsigned char u8;
sbit k1=P3^1;
sbit k2=P3^0; //位定义
u8 n=0;
u8 code a[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //1-8 led 点亮数组
/****************************************************
* 函数名 :delay
* 函数功能 :延时(i等于1时,大约延时1ms)
****************************************************/
void delay(u16 i)
{
while(i--);
}
/****************************************************
* 函数名 :keypros
* 函数功能 :检测按键
****************************************************/
void keypros()
{ if(k1==0)
{
delay(1000); //消抖
if(k1==0)
{ n++;
if(n>=7)
n=7; }
while(!k1);
}
if(k2==0)
{
delay(1000); //消抖
if(k2==0)
{ n--;
if(n<=0)
n=0;}
while(!k2);
}
}
void main()
{
while(1)
{ P2=a[n]; //调用数组,点亮流水灯
keypros(); //调用按键函数,改变n值
}
}