51蛋骗鸡单按键控制4LED顺序点亮与顺序熄灭,按住自动递增,释放自动递减。

缘由http://www.51hei.com/bbs/dpj-194115-1.html

#include "reg52.h"
unsigned char code DuLiAnJian[]={255,254,252,248,240};
sbit k1=P1^7;
bit k = 0;
void main()
{
	unsigned char wei=0,Xd=0;
	P2=255;
	while(1)
	{
		if(!k1&&!++Xd)
		{
			k?--wei:++wei;
			if(wei>=4||!wei)k=~k;
			P2=DuLiAnJian[wei];
			while(!k1);
		}
	}
}

 按住自动递增,释放自动递减。

#include "reg52.h"
unsigned char code DuLiAnJian[]={255,254,252,248,240};
sbit k1=P1^7;
bit k = 0;
void main()
{
	unsigned char wei=0,Xd=0;
	unsigned int YS=47474;
	P2=255;
	while(1)
	{
		if(!k1)k=0;else k=1;
		if(!++YS)
		{
			if(wei<4&&!k)++wei;
			if(wei>0&&k)--wei;
			P2=DuLiAnJian[wei];
			YS=k?7474:47474;
		}
	}
}
#include "reg52.h"
unsigned char code DuLiAnJian[]={255,254,252,248,240};
sbit k1=P1^7;
bit k = 0;
void main()
{
	unsigned char wei=0,Xd=0;
	unsigned int YS=47474;
	P2=255;
	while(1)
	{
		if(!++YS)
		{
			if(wei<4&&!k1)++wei;
			else if(wei>0&&k1)--wei;
			P2=DuLiAnJian[wei];
			YS=k1?27474:47474;
		}
	}
}
#include "reg52.h"
unsigned char code DuLiAnJian[]={255,254,252,248,240};
sbit k1=P1^7;
bit k = 0;
void main()
{
	unsigned char wei=0,Xd=0;
	unsigned int YS=4747;
	P2=255;
	while(1)
	{
		if(!--YS)
		{
			if(!k1&&wei<4)++wei;
			else if(k1&&wei>0)--wei;
			P2=DuLiAnJian[wei];
			YS=k1?7474:4747;
		}
	}
}
#include "reg52.h"
unsigned char code DuLiAnJian[]={255,254,252,248,240};
sbit k1=P1^7;
bit k = 0;
void main()
{
	unsigned char wei=0,Xd=250;
	unsigned int YS=4;
	P2=255;
	while(1)
	{
		if(!--YS)
		{
			if(!++Xd)
			{
				if(!k1&&wei<4)++wei;
				else if(k1&&wei>0)--wei;
				P2=DuLiAnJian[wei];
				Xd=250;
			}
			YS=k1?4747:7474;
		}
	}
}

以下是基于51单片机的四个按键控制8个单独的LED点亮熄灭、变亮、变暗的代码: ```c #include <reg52.h> #define uchar unsigned char #define uint unsigned int sbit LED1 = P1^0; sbit LED2 = P1^1; sbit LED3 = P1^2; sbit LED4 = P1^3; sbit LED5 = P1^4; sbit LED6 = P1^5; sbit LED7 = P1^6; sbit LED8 = P1^7; sbit KEY1 = P3^2; sbit KEY2 = P3^3; sbit KEY3 = P3^4; sbit KEY4 = P3^5; uchar LED1_brightness = 0x80; uchar LED2_brightness = 0x80; uchar LED3_brightness = 0x80; uchar LED4_brightness = 0x80; uchar LED5_brightness = 0x80; uchar LED6_brightness = 0x80; uchar LED7_brightness = 0x80; uchar LED8_brightness = 0x80; void delay(uint xms) { uint i, j; for(i = xms; i > 0; i--) for(j = 112; j > 0; j--); } void main() { while(1) { if(KEY1 == 0) { delay(10); if(KEY1 == 0) { LED1_brightness = 0x00; LED2_brightness = 0x00; LED3_brightness = 0x00; LED4_brightness = 0x00; LED5_brightness = 0x00; LED6_brightness = 0x00; LED7_brightness = 0x00; LED8_brightness = 0x00; } while(!KEY1); } if(KEY2 == 0) { delay(10); if(KEY2 == 0) { LED1_brightness = 0xFF; LED2_brightness = 0xFF; LED3_brightness = 0xFF; LED4_brightness = 0xFF; LED5_brightness = 0xFF; LED6_brightness = 0xFF; LED7_brightness = 0xFF; LED8_brightness = 0xFF; } while(!KEY2); } if(KEY3 == 0) { delay(10); if(KEY3 == 0) { LED1_brightness += 0x10; LED2_brightness += 0x10; LED3_brightness += 0x10; LED4_brightness += 0x10; LED5_brightness += 0x10; LED6_brightness += 0x10; LED7_brightness += 0x10; LED8_brightness += 0x10; } while(!KEY3); } if(KEY4 == 0) { delay(10); if(KEY4 == 0) { LED1_brightness -= 0x10; LED2_brightness -= 0x10; LED3_brightness -= 0x10; LED4_brightness -= 0x10; LED5_brightness -= 0x10; LED6_brightness -= 0x10; LED7_brightness -= 0x10; LED8_brightness -= 0x10; } while(!KEY4); } LED1 = (LED1_brightness & 0x80) ? 1 : 0; LED2 = (LED2_brightness & 0x80) ? 1 : 0; LED3 = (LED3_brightness & 0x80) ? 1 : 0; LED4 = (LED4_brightness & 0x80) ? 1 : 0; LED5 = (LED5_brightness & 0x80) ? 1 : 0; LED6 = (LED6_brightness & 0x80) ? 1 : 0; LED7 = (LED7_brightness & 0x80) ? 1 : 0; LED8 = (LED8_brightness & 0x80) ? 1 : 0; } } ``` 在此代码中,我们将8个LED分别连接到P1口的8个引脚上,并将4个按键分别连接到P3口的4个引脚上。我们使用了一个delay函数来实现简单的延时功能,以保证按键输入的正确检测。 在主函数中,我们使用了一个while(1)的无限循环,以便不断地检测按键输入并控制LED的亮度。当KEY1按下时,我们将8个LED的亮度全部置为0,即全部熄灭。当KEY2按下时,我们将8个LED的亮度全部置为0xFF,即全部点亮。当KEY3按下时,我们将8个LED的亮度增加0x10。当KEY4按下时,我们将8个LED的亮度减少0x10。最后,我们根据每个LED的亮度值来控制其对应的引脚的电平,以达到控制LED的亮度的目的。 需要注意的是,本代码使用了PWM技术来控制LED的亮度,但是并没有使用定时器,因此亮度调节的精度可能不太高。如果需要更高的精度,可以考虑使用定时器来实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值