一个按键控制8个led灯_51单片机实现4个按键控制8个LED灯四种状态

这个C语言程序展示了如何通过开关状态控制P1口的LED显示,包括不同二进制值对应的LED亮灭组合。程序中定义了P3口的各个位,并通过switch-case结构来处理不同情况,同时包含了一个简单的延时函数实现时间间隔。
摘要由CSDN通过智能技术生成
  • 电路原理图

3d2fbc128eb2f85ae539f74f920a66d6.png
  • 元件清单

99e77fb725e11d4abd323ee91880089b.png
  • 程序(C语言)
#include<reg51.h>
sbit p3_0=P3^0;
sbit p3_1=P3^1;
sbit p3_2=P3^2;
sbit p3_3=P3^3;
void delay(unsigned char i);
void main()
{ 
  unsigned char ledctr;
  P3=0xff;
  while(1)
  {
    ledctr=P3;
	switch(ledctr)
	{
	  case 0xff:P1=0x00;break;				
	  case 0xfe:P1=0xff;break;				
	  case 0xfd:P1=0x55;delay(200);P1=0xaa;delay(200);break;	   
	  case 0xfb:P1=0xf0;break;									
	  case 0xf7:P1=0x0f;break;										 
	  
	  default:;
	 }
	}
} 
void delay(unsigned char i)
{
  unsigned char j,k;
  for(k=0;k<i;k++)
  for(j=0;j<255;j++);
}
  • 仿真视频
知乎视频​www.zhihu.com
zhihu-card-default.svg
当然可以,以下是一个可以实现四种不同功能的 51 单片机程序,可以通过独立按键控制八个 LED 的不同显示模式: ```c #include <reg52.h> #define LED P0 // 定义 LED 控制端口 #define KEY P1 // 定义独立按键输入端口 void delay(unsigned int time) // 延函数 { unsigned int i, j; for (i = time; i > 0; i--) for (j = 110; j > 0; j--); } void mode_1() // 功能1:所有 LED 亮起 { LED = 0xff; } void mode_2() // 功能2:所有 LED 依次亮起 { unsigned char i; for (i = 0; i < 8; i++) { LED = ~(1 << i); // 按位取反,依次点亮一个 LED delay(500); // 延500ms,控制 LED 显示速度 } } void mode_3() // 功能3:LED 以流水模式循环显示 { unsigned char i, j; while (1) // 循环显示 { for (i = 0; i < 8; i++) { LED = ~(1 << i); // 点亮一个 LED delay(100); // 延100ms } for (j = 6; j > 0; j--) { LED = ~(1 << j); // 点亮一个 LED delay(100); // 延100ms } } } void mode_4() // 功能4:LED 以呼吸模式显示 { unsigned char i, j; while (1) // 循环显示 { for (i = 0; i < 255; i++) // LED 逐渐变亮 { LED = i; delay(10); // 延10ms } for (j = 255; j > 0; j--) // LED 逐渐变暗 { LED = j; delay(10); // 延10ms } } } void main() { unsigned char key_value = 0; // 独立按键状态 unsigned char mode = 1; // LED 显示模式 while (1) // 循环检测按键状态 { key_value = KEY & 0xff; // 读取独立按键状态 if (key_value != 0xff) // 如果按键被按下 { delay(10); // 延去抖动 key_value = KEY & 0xff; // 再次读取按键状态 if (key_value != 0xff) // 如果按键仍然被按下 { mode++; // 切换 LED 显示模式 if (mode > 4) // 如果模式超过4种,重新从1开始 mode = 1; } } switch (mode) // 根据不同模式调用不同的函数 { case 1: mode_1(); // 调用功能1 break; case 2: mode_2(); // 调用功能2 break; case 3: mode_3(); // 调用功能3 break; case 4: mode_4(); // 调用功能4 break; default: break; } } } ``` 以上程序中,使用 `P0` 端口控制八个 LED 的开关状态,使用 `P1` 端口读取独立按键状态。程序中使用一个 `delay()` 函数来实现简单的延去抖动功能。 程序中定义了四个不同的 LED 显示模式,分别对应不同的 `mode_x()` 函数,其中 `mode_1()` 函数将所有 LED 亮起,`mode_2()` 函数将所有 LED 依次亮起,`mode_3()` 函数将 LED 以流水模式循环显示,`mode_4()` 函数将 LED 以呼吸模式显示。 当独立按键被按下,程序会检测按键状态是否稳定,如果稳定,则切换 LED 显示模式。程序会根据不同的模式调用不同的 `mode_x()` 函数来显示 LED ,直到程序结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值