独立按键控制LED移位

独立按键控制LED移位
所用到的电路图

一,独立按键模块,
JP1连接到单片机的P1口,接口一一对应的
独立按键控制LED移位
二,LED模块,
J19连接到单片机的P2口,接口一一对应的
独立按键控制LED移位

按键的小问题
独立按键控制LED移位
解决方法: 在按下前面加个延时函数,渡过这时间段

代码一

#include <REGX51.h>

void Delay_ms(Xms)  //延时函数
{
	unsigned char i, j;
	while(Xms>0)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		Xms--;
	}
}

void main()
{
	unsigned char LEDNum = 0;
	P2 = 0xFE;  //让D1点亮,其他灭
	
	while(1)
	{
		if (P1_0 == 0)    //前进按键
		{
			Delay_ms(20);
			while(P1_0 == 0);
			Delay_ms(20);

			if (LEDNum == 7) //满了,重新置零
				LEDNum = 0;
			else
				LEDNum++;			
			P2 = ~(0x01<<LEDNum);

		}

		if (P1_1 == 0) //后退按键
		{
			Delay_ms(20);
			while(P1_1 == 0);
			Delay_ms(20);

			if(LEDNum == 0) //满了,重新置7
				LEDNum = 7;
			else
				LEDNum--;
			P2 = ~(0x01<<LEDNum);
		}
	}
}
  分析代码:

<<代表左移一位,低位由0补全
是以LEDNum的大小为点亮的关键,一开始就是D1亮,通过LEDNum的大小,来决定移的大小

  实验现象:

刚通上电的时候,D1点亮,
然后有两个选项,
①按K1,并且松开,D1灭,D2亮,以此类推,小的灭掉,大的亮起来,到最后D8灭,D1亮
②按K2,并且松开,D1灭,D8亮,以此类推,大的灭掉,小的亮起来

代码二:

#include <REGX51.h>

void Delay_ms(Xms);//延时函数


void main()
{
	unsigned int Num = 0x01;
	P2 = 0xFE;  //让D1点亮,其他灭
	while(1)
	{
		if (P1_0 == 0) //按下前进按键
		{
			Delay_ms(20);
			while(P1_0 == 0);
			Delay_ms(20);
			
			if (Num == 0x00)
				Num = 0x01;
			
			if (Num > 0x80)
				Num = 0x01;
			else
				Num = (Num << 1);

			P2 = ~Num;
		}
		
		if (P1_1 == 0) //按下后退按键
		{
			Delay_ms(20);
			while(P1_1 == 0);
			Delay_ms(20);
			
			
			if (Num < 0x01)
				Num = 0x80;
			else
				Num = (Num >> 1);

			P2 = ~Num;
		}
	}
}

void Delay_ms(Xms)	
{
	unsigned char i, j;
	while(Xms>0)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
		Xms--;
	}
}
  分析代码:

1,<<代表左移一位,低位由0补全
2.>>代表右移一位,高位由0补全
是通过Num的具体大小,进行取反,直接点亮LED

  实验现象:

刚通上电的时候,D1点亮,
然后有两个选项,
①按K1,并且松开,D1灭,D2亮,以此类推,小的灭掉,大的亮起来,到最后D8灭,再按一下K1,并且松掉,D1才会亮
②按K2,并且松开,D1灭,再按一下K2,并且松掉,D8才会亮,以此类推,大的灭掉,小的亮起来

上一篇:ios移动端 |关于时间对象的兼容问题


下一篇:JavaScript小汇(8)—— 操作DOM对象