void led_on(unsigned char x){
GPIOC->ODR &= ~(1<<x) << 8;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void led_off(unsigned char x){
GPIOC->ODR |= (1<<x)<<8;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void led_tole(unsigned char x){
GPIOC->ODR ^= (1<<x)<<8;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
第一段 是直接写入寄存器 不影响其他位 但是使用lcd屏后 PC8-15 寄存器已经改变
所以使用一个中间值 来报存led的状态
void led_on(unsigned char x){
led_sta &= ~(1 << x);
GPIOC->ODR = led_sta << 8;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void led_off(unsigned char x){
led_sta |= 1 << x;
GPIOC->ODR = led_sta << 8;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}
void led_toggle(unsigned char x) {
led_sta ^= (1 << x); // 使用异或运算符对指定的LED状态进行翻转
GPIOC->ODR = led_sta << 8;
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_SET);
HAL_GPIO_WritePin(GPIOD, GPIO_PIN_2, GPIO_PIN_RESET);
}