#include <reg52.h>

sbit button = P3^2; // 定义按键接口 sbit led1 = P1^0; // 定义LED1接口 sbit led2 = P1^1; // 定义LED2接口 sbit led3 = P1^2; // 定义LED3接口 sbit led4 = P1^3; // 定义LED4接口 sbit led5 = P1^4; // 定义LED5接口 sbit led6 = P1^5; // 定义LED6接口 sbit led7 = P1^6; // 定义LED7接口 sbit led8 = P1^7; // 定义LED8接口

unsigned char led_state = 0x01; // 初始化LED状态

void delay(unsigned int t) // 延时函数 { unsigned int i, j; for(i=0; i<t; i++) for(j=0; j<120; j++); }

void ISR_button() interrupt 0 // 中断服务函数 { delay(10); // 延时去抖动 if(button == 0) // 判断按键是否按下 { led_state <<= 1; // 改变LED状态 if(led_state == 0x00) // 如果LED状态变为0,重新开始 led_state = 0x01; } }

void main() { EA = 1; // 全局中断使能 EX0 = 1; // 外部中断0使能 IT0 = 1; // 边沿触发 while(1) { led1 = (led_state & 0x01) ? 0 : 1; // 控制LED1亮灭 led2 = (led_state & 0x02) ? 0 : 1; // 控制LED2亮灭 led3 = (led_state & 0x04) ? 0 : 1; // 控制LED3亮灭 led4 = (led_state & 0x08) ? 0 : 1; // 控制LED4亮灭 led5 = (led_state & 0x10) ? 0 : 1; // 控制LED5亮灭 led6 = (led_state & 0x20) ? 0 : 1; // 控制LED6亮灭 led7 = (led_state & 0x40) ? 0 : 1; // 控制LED7亮灭 led8 = (led_state & 0x80) ? 0 : 1; // 控制LED8亮灭 delay(500); // 延时0.5秒 } }

该程序利用 8051 单片机实现 LED 流水灯轮流发光,通过 P1 口控制 8 个 LED 灯,并使用外部中断来改变流水灯的状态。当按键按下时,程序会改变 LED 状态,实现流水灯的循环效果。程序中使用外部中断 0,并设置为边沿触发。代码中定义了按键接口和 LED 接口,并使用 led_state 变量来记录 LED 状态。程序还包含一个延时函数,用于控制 LED 闪烁速度。

8051 单片机实现 LED 流水灯轮流发光 - 按键控制

原文地址: https://www.cveoy.top/t/topic/n6wf 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录