0,0 → 1,152 |
#include "maindefs.h" |
#include "led_driver.h" |
#include "delays.h" |
|
/* Output Pins: |
* RA0 - LED Display Latch Enable (PPS) |
* RA1 - LED Display CLK (PPS) |
* RA2 - LED Display DIN (PPS) |
* RA3 - LED Display Output Enable (PPS) |
*/ |
|
void led_driver_init() { |
TRISAbits.TRISA0 = 0; // LE |
TRISAbits.TRISA1 = 0; // CLK |
TRISAbits.TRISA2 = 0; // DAT |
TRISAbits.TRISA3 = 0; // OE |
|
LATAbits.LATA0 = 0; // LE |
LATAbits.LATA1 = 0; // CLK |
LATAbits.LATA2 = 0; // DAT |
LATAbits.LATA3 = 0; // OE |
|
led_driver_data(0,0); |
} |
|
void led_driver_clock() { |
LATAbits.LATA1 = 0x1; // Simple clock output toggle |
Nop(); |
LATAbits.LATA1 = 0x0; |
Nop(); |
} |
|
void led_driver_data(char left, char right) { |
int i; |
LATAbits.LATA0 = 0x0; // Set latch low to pause display |
for (i = 0; i < 8; i++) { |
LATAbits.LATA2 = right & 0x1; // Shift out right character first |
led_driver_clock(); |
right >>= 1; |
} |
for (i = 0; i < 8; i++) { |
LATAbits.LATA2 = left & 0x1; // Then shift out left character |
led_driver_clock(); |
left >>= 1; |
} |
LATAbits.LATA0 = 0x1; // Set latch high to resume display |
} |
|
void led_driver_num(unsigned char data) { |
unsigned char left = 0; |
unsigned char right = 0; |
unsigned char tmp = 0; |
|
// if (data > 99) { |
// led_driver_data(0,0); |
// return; |
// } |
|
// Determine right character (1s digit) |
tmp = data % 10; |
switch (tmp) { |
case 0: |
right = LED_CHAR_0; |
break; |
case 1: |
right = LED_CHAR_1; |
break; |
case 2: |
right = LED_CHAR_2; |
break; |
case 3: |
right = LED_CHAR_3; |
break; |
case 4: |
right = LED_CHAR_4; |
break; |
case 5: |
right = LED_CHAR_5; |
break; |
case 6: |
right = LED_CHAR_6; |
break; |
case 7: |
right = LED_CHAR_7; |
break; |
case 8: |
right = LED_CHAR_8; |
break; |
case 9: |
right = LED_CHAR_9; |
break; |
} |
|
// Determine left character (10s digit) |
tmp = data / 10; |
switch (tmp) { |
case 0: |
left = LED_CHAR_0; |
break; |
case 1: |
left = LED_CHAR_1; |
break; |
case 2: |
left = LED_CHAR_2; |
break; |
case 3: |
left = LED_CHAR_3; |
break; |
case 4: |
left = LED_CHAR_4; |
break; |
case 5: |
left = LED_CHAR_5; |
break; |
case 6: |
left = LED_CHAR_6; |
break; |
case 7: |
left = LED_CHAR_7; |
break; |
case 8: |
left = LED_CHAR_8; |
break; |
case 9: |
left = LED_CHAR_9; |
break; |
} |
|
led_driver_data(left, right); |
|
// if (data <= 25) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_0); |
// } else if (data > 25 && data <= 50) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_1); |
// } else if (data > 50 && data <= 75) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_2); |
// } else if (data > 75 && data <= 100) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_3); |
// } else if (data > 100 && data <= 125) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_4); |
// } else if (data > 125 && data <= 150) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_5); |
// } else if (data > 150 && data <= 175) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_6); |
// } else if (data > 175 && data <= 200) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_7); |
// } else if (data > 200 && data <= 225) { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_8); |
// } else { |
// led_driver_data(LED_CHAR_BLANK,LED_CHAR_9); |
// } |
} |