51单片机用四个按键控制8个单独的led点亮、熄灭、变亮、变暗的代码
时间: 2024-05-01 17:20:15 浏览: 17
以下是基于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的亮度,但是并没有使用定时器,因此亮度调节的精度可能不太高。如果需要更高的精度,可以考虑使用定时器来实现。