diff --git a/ES/Lab/Lab11/PWM_Keyboard.c b/ES/Lab/Lab11/PWM_Keyboard.c index 7e87fd4..f56277d 100644 --- a/ES/Lab/Lab11/PWM_Keyboard.c +++ b/ES/Lab/Lab11/PWM_Keyboard.c @@ -1,7 +1,9 @@ #include "LPC17xx.h" volatile unsigned long int duty_cycle = 300; -unsigned int last_key = 0xFF; +volatile unsigned long int pwm_counter = 0; + +#define LED_MASK (0xFF << 4) #define COL0 (1<<0) #define COL1 (1<<1) @@ -40,8 +42,15 @@ void PWM1_IRQHandler(void) { if (LPC_PWM1->IR & (1 << 0)) { - LPC_PWM1->MR4 = duty_cycle; - LPC_PWM1->LER = (1 << 4); + if(pwm_counter < duty_cycle) + LPC_GPIO0->FIOSET = LED_MASK; + else + LPC_GPIO0->FIOCLR = LED_MASK; + + pwm_counter++; + if(pwm_counter >= 3000) + pwm_counter = 0; + LPC_PWM1->IR = (1 << 0); } } @@ -50,16 +59,18 @@ int main(void) { unsigned int col_idx; unsigned int read_key; + unsigned int last_key = 0xFF; LPC_PINCON->PINSEL0 &= ~(0xFFFF << 8); LPC_PINCON->PINSEL1 &= ~(0xFFFF << 14); LPC_PINCON->PINSEL4 &= ~(0xF << 0); - LPC_PINCON->PINSEL3 |= (2 << 14); + LPC_GPIO0->FIODIR |= LED_MASK; LPC_GPIO0->FIODIR |= COL_MASK_P0; LPC_GPIO2->FIODIR |= COL_MASK_P2; LPC_GPIO0->FIODIR &= ~ROW0; + LPC_GPIO0->FIOCLR = LED_MASK; LPC_GPIO2->FIOSET = COL_MASK_P2; LPC_GPIO0->FIOSET = COL_MASK_P0; @@ -68,14 +79,11 @@ int main(void) LPC_PWM1->PR = 0; LPC_PWM1->MR0 = 3000; - LPC_PWM1->MR4 = duty_cycle; - LPC_PWM1->MCR = (1 << 1) | (1 << 0); - LPC_PWM1->PCR = (1 << 12); - - LPC_PWM1->LER = (1 << 0) | (1 << 4); + LPC_PWM1->LER = (1 << 0); NVIC_EnableIRQ(PWM1_IRQn); + NVIC_SetPriority(PWM1_IRQn, 0); LPC_PWM1->TCR = (1 << 0) | (1 << 3);