From 5ba5925433ac84f1d9b6122bfd377fcf2e26a589 Mon Sep 17 00:00:00 2001 From: sherlock Date: Thu, 23 Oct 2025 13:00:53 +0530 Subject: [PATCH] PWM Disp --- ES/Lab/Lab11/PWM_Keyboard.c | 45 +++++++++++++------------------------ 1 file changed, 16 insertions(+), 29 deletions(-) diff --git a/ES/Lab/Lab11/PWM_Keyboard.c b/ES/Lab/Lab11/PWM_Keyboard.c index da6c61a..7e87fd4 100644 --- a/ES/Lab/Lab11/PWM_Keyboard.c +++ b/ES/Lab/Lab11/PWM_Keyboard.c @@ -1,10 +1,7 @@ #include "LPC17xx.h" -volatile unsigned long int duty_cycle = 10; -volatile unsigned long int pwm_counter = 0; - -#define LED_SHIFT 4 -#define LED_MASK (0xFF << LED_SHIFT) +volatile unsigned long int duty_cycle = 300; +unsigned int last_key = 0xFF; #define COL0 (1<<0) #define COL1 (1<<1) @@ -15,8 +12,6 @@ volatile unsigned long int pwm_counter = 0; #define COL_MASK_P0 (COL2 | COL3) #define COL_MASK_P2 (COL0 | COL1) -#define PWM_PERIOD 100 - static void delay_ms(unsigned int ms) { unsigned int i, j; for(i = 0; i < ms; i++) @@ -45,15 +40,8 @@ void PWM1_IRQHandler(void) { if (LPC_PWM1->IR & (1 << 0)) { - if(pwm_counter < duty_cycle) - LPC_GPIO0->FIOSET = LED_MASK; - else - LPC_GPIO0->FIOCLR = LED_MASK; - - pwm_counter++; - if(pwm_counter >= PWM_PERIOD) - pwm_counter = 0; - + LPC_PWM1->MR4 = duty_cycle; + LPC_PWM1->LER = (1 << 4); LPC_PWM1->IR = (1 << 0); } } @@ -62,33 +50,32 @@ 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; - LPC_SC->PCONP |= (1 << 6); - LPC_PWM1->TCR = (1 << 1); LPC_PWM1->CTCR = 0; - LPC_PWM1->PR = 9; + LPC_PWM1->PR = 0; + + LPC_PWM1->MR0 = 3000; + LPC_PWM1->MR4 = duty_cycle; - LPC_PWM1->MR0 = 100; LPC_PWM1->MCR = (1 << 1) | (1 << 0); - LPC_PWM1->LER = (1 << 0); + LPC_PWM1->PCR = (1 << 12); + + LPC_PWM1->LER = (1 << 0) | (1 << 4); NVIC_EnableIRQ(PWM1_IRQn); - NVIC_SetPriority(PWM1_IRQn, 0); LPC_PWM1->TCR = (1 << 0) | (1 << 3); @@ -118,10 +105,10 @@ int main(void) last_key = read_key; switch(read_key) { - case 0: duty_cycle = 10; break; - case 1: duty_cycle = 25; break; - case 2: duty_cycle = 50; break; - case 3: duty_cycle = 75; break; + case 0: duty_cycle = 300; break; + case 1: duty_cycle = 750; break; + case 2: duty_cycle = 1500; break; + case 3: duty_cycle = 2250; break; } }