int main(void) { delay_init(); //延时函数初始化 NVIC_Configuration();//设置NVIC中断分组2:2位抢占优先级,2位响应优先级 LED_Init(); //初始化与LED连接的硬件接xBF uart_init(9600); TIM3_Int_Init(499,7199);//10Khz的计数频率,计数到500为50ms i=50; while(i--) delay_ms(100); printf("AT+CIPMUX=1\r\n"); //允许链接 i=10; while(i--) delay_ms(100); printf("AT+CIPSERVR=1,8080\r\n"); //创建端口号8080 while(1) { if(ReadFlag== 1) //读取串口数据标志 { Count=0; //传授接收变量清零 UartBusy=0; ReadFlag=0; //读取标识清零 if((strstr((const char *)BufTab,"OPEN1")!=NULL)||(strstr((const char * )BufTab,"LED1-3")!=NULL)) //接收到LPEN1 LED1-3 { PWML_LED1=10;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char * )BufTab,(const char * )"CLOSE1")!=NULL) //接收到CLOSE1 { PWML_LED1=0;rebackFalg=1;//设置pwm 发送标志置位 } else if((strstr((const char *)BufTab,"OPEN2")!=NULL)||(strstr((const char *)BufTab,"LED2-3")!=NULL)) //接收到 OPEN2 { PWML_LED2=10;rebackFalg=1;//设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"LLOSE2")!=NULL) //接收到LLOSE2 { PWML_LED2=0;rebackFalg=1;//设置pwm 发送标志置位 } } else if(strstr((const char *)BufTab,"OPENALL")!=NULL) //接收OENALL { PWML_LED1=10;PWML_LED2=10;rebackFalg=1; //设置pwm 发送标志置位 } else if(strstr((const char *)BufTab,"CLOSEALL")!=NULL) //接收到CLOSEALL { PWML_LED1=0;PWML_LED2=0; rebackFalg=1; } for(i=0;i<10;i++) //清空wifi数据数组 { BufTab[i]='0'; } if((sendDataFlag == 1)&&(rebackFalg != 0))//接收到数后返回ok { if(MesCount == 0) //发送信息计数 { MesCount =1; printf("AT+CIPSEND=0,2\r\n"); //发送固定字节数据的at命令 } else { if(rebackFalg ==1) //返回标志置位 {printf("OK");} //发送ok MesCount = 0; //发送信息计数 rebackFalg = 0; } sendDataFlag = 0; //定时发送数据清空 } led1Count++; //led 对比pwm值计数 led2Count++; //led 对比pwm值计数 if(led1Count<PWML_LED1) //led1 PWM对比 { LED1=1; //开灯 } else if((led1Count>=PWML_LED1)&&(led1Count<=10)) //led1 PWM对比 { LED1=0; //关灯 } else { led1Count=0; //一个周期结束 } if(led2Count<PWML_LED2) //led2 PWM对比 { LED2=1; //开灯 } else if((led2Count>=PWML_LED2)&&(led2Count<=10)) //led2 PWM对比 { LED2=0; //关灯 } else { led2Count=0; //一个周期结束 } } } 请在此代码上,添加代码,使得LED1和LED2的闪烁频率能够实现三个等级的亮度变化,
时间: 2024-03-24 19:38:45 浏览: 63
可以在代码中添加一个变量来控制 LED 的亮度等级,然后根据不同的亮度等级设置不同的 PWM 值来实现 LED 的亮度变化。
具体代码实现如下:
```c
int main(void) {
int brightness_level = 1; // 亮度等级,初始值为1
delay_init();
NVIC_Configuration();
LED_Init();
uart_init(9600);
TIM3_Int_Init(499,7199);
i = 50;
while(i--) delay_ms(100);
printf("AT+CIPMUX=1\r\n");
i = 10;
while(i--) delay_ms(100);
printf("AT+CIPSERVR=1,8080\r\n");
while(1) {
if(ReadFlag == 1) {
Count = 0;
UartBusy = 0;
ReadFlag = 0;
if((strstr((const char *)BufTab,"OPEN1")!=NULL)||(strstr((const char * )BufTab,"LED1-3")!=NULL)) {
brightness_level = 1; // 设置亮度等级为1
rebackFalg=1;
} else if(strstr((const char * )BufTab,(const char * )"CLOSE1")!=NULL) {
brightness_level = 0; // 设置亮度等级为0
rebackFalg=1;
} else if((strstr((const char *)BufTab,"OPEN2")!=NULL)||(strstr((const char *)BufTab,"LED2-3")!=NULL)) {
brightness_level = 2; // 设置亮度等级为2
rebackFalg=1;
} else if(strstr((const char *)BufTab,"LLOSE2")!=NULL) {
brightness_level = 0; // 设置亮度等级为0
rebackFalg=1;
}
} else if(strstr((const char *)BufTab,"OPENALL")!=NULL) {
brightness_level = 3; // 设置亮度等级为3
rebackFalg=1;
} else if(strstr((const char *)BufTab,"CLOSEALL")!=NULL) {
brightness_level = 0; // 设置亮度等级为0
rebackFalg=1;
}
for(i = 0; i < 10; i++) {
BufTab[i] = '0';
}
if((sendDataFlag == 1)&&(rebackFalg != 0)) {
if(MesCount == 0) {
MesCount = 1;
printf("AT+CIPSEND=0,2\r\n");
} else {
if(rebackFalg == 1) {
printf("OK");
}
MesCount = 0;
rebackFalg = 0;
}
sendDataFlag = 0;
}
led1Count++;
led2Count++;
if(led1Count < (10 * brightness_level / 3)) { // 根据亮度等级设置 PWM 值
LED1 = 1;
} else if((led1Count >= (10 * brightness_level / 3)) && (led1Count <= 10)) {
LED1 = 0;
} else {
led1Count = 0;
}
if(led2Count < (10 * brightness_level / 3)) {
LED2 = 1;
} else if((led2Count >= (10 * brightness_level / 3)) && (led2Count <= 10)) {
LED2 = 0;
} else {
led2Count = 0;
}
}
}
```
阅读全文