51单片机 使用一个独立按键切换不同LED

  • Post author:
  • Post category:其他



使用51单片机一个独立按键(P3^1口)切换点亮不同LED


初值为所有LED灭,按下按键第一下第一个LED点亮,再按一下第二个LED点亮,然后第三个第四个……按到第九下模式会到0,即全灭。

#include <reg52.h>
typedef unsigned char u8;
typedef unsigned int u16;

u16 mode;

sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;
sbit LED5=P2^4;
sbit LED6=P2^5;
sbit LED7=P2^6;
sbit LED8=P2^7;
sbit key=P3^1;

void delay(u16 i)
{
	while(i--);
}

void LED()
{
	switch(mode)
	{
		case(0):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
		case(1):LED1=0;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
		case(2):LED1=1;LED2=0;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
		case(3):LED1=1;LED2=1;LED3=0;LED4=1;LED5=1;LED6=1;LED7=1;LED8=1;break;
		case(4):LED1=1;LED2=1;LED3=1;LED4=0;LED5=1;LED6=1;LED7=1;LED8=1;break;
		case(5):LED1=1;LED2=1;LED3=1;LED4=1;LED5=0;LED6=1;LED7=1;LED8=1;break;
		case(6):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=0;LED7=1;LED8=1;break;
		case(7):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=0;LED8=1;break;
		case(8):LED1=1;LED2=1;LED3=1;LED4=1;LED5=1;LED6=1;LED7=1;LED8=0;break;
        //LED写的有点多,可以直接用P2口赋值
	}
}


void main()
{
	while(1)
	{
		LED();
		if(key==0)
		{
			delay(1000);
			if(key==0)
			{
				mode++;
				if(mode==9)
				{
					mode=0;
				}
				while(!key);
			}
		}
	}
}



版权声明:本文为qq_56894255原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。