11111
c51吧
全部回复
仅看楼主
level 1
sifbbr 楼主
有人能帮忙看看怎么写吗
2025年10月31日 07点10分 1
level 1
#include <REG51.H>
sbit KEY = P1^0; // 按键S连接到P1.0
sbit LED_PORT = P2; // 8个LED连接到P2口
unsigned char mode = 0; // 0:熄灭 1:低亮度 2:高亮度
bit key_pressed = 0; // 按键状态标志
// 软件延时函数,用于消抖和PWM控制
void delay_ms(unsigned int ms) {
unsigned int i, j;
for(i = 0; i < ms; i++)
for(j = 0; j < 120; j++);
}
void main(void) {
LED_PORT = 0xFF; // 初始状态:所有LED熄灭(共阳极接法)
while(1) {
// 检测按键并切换模式
if(KEY == 0 && !key_pressed) {
delay_ms(20); // 消抖
if(KEY == 0) {
key_pressed = 1;
mode++;
if(mode > 2) mode = 0; // 模式循环:0->1->2->0
}
}
if(KEY == 1 && key_pressed) {
key_pressed = 0; // 释放按键,重置标志
}
// 根据模式控制LED亮度
switch(mode) {
case 0: // 熄灭
LED_PORT = 0xFF;
break;
case 1: // 低亮度(PWM占空比低)
LED_PORT = 0x00;
delay_ms(1);
LED_PORT = 0xFF;
delay_ms(4);
break;
case 2: // 高亮度(PWM占空比高)
LED_PORT = 0x00;
delay_ms(4);
LED_PORT = 0xFF;
delay_ms(1);
break;
}
}
}
2026年02月24日 01点02分 2
1