Subversion Repositories Code-Repo

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
107 Kevin 1
#include "maindefs.h"
2
#include "led_driver.h"
3
#include "delays.h"
4
 
5
/* Output Pins:
6
 * RA0 - LED Display Latch Enable (PPS)
7
 * RA1 - LED Display CLK (PPS)
8
 * RA2 - LED Display DIN (PPS)
9
 * RA3 - LED Display Output Enable (PPS)
10
 */
11
 
12
void led_driver_init() {
13
    TRISAbits.TRISA0 = 0;   // LE
14
    TRISAbits.TRISA1 = 0;   // CLK
15
    TRISAbits.TRISA2 = 0;   // DAT
16
    TRISAbits.TRISA3 = 0;   // OE
17
 
18
    LATAbits.LATA0 = 0; // LE
19
    LATAbits.LATA1 = 0; // CLK
20
    LATAbits.LATA2 = 0; // DAT
21
    LATAbits.LATA3 = 0; // OE
22
 
23
    led_driver_data(0,0);
24
}
25
 
26
void led_driver_clock() {
27
    LATAbits.LATA1 = 0x1; // Simple clock output toggle
28
    Nop();
29
    LATAbits.LATA1 = 0x0;
30
    Nop();
31
}
32
 
33
void led_driver_data(char left, char right) {
34
    int i;
35
    LATAbits.LATA0 = 0x0; // Set latch low to pause display
36
    for (i = 0; i < 8; i++) {   
37
        LATAbits.LATA2 = right & 0x1;   // Shift out right character first
38
        led_driver_clock();
39
        right >>= 1;
40
    }
41
    for (i = 0; i < 8; i++) {
42
        LATAbits.LATA2 = left & 0x1;   // Then shift out left character
43
        led_driver_clock();
44
        left >>= 1;
45
    }
46
    LATAbits.LATA0 = 0x1; // Set latch high to resume display
47
}
48
 
49
void led_driver_num(unsigned char data) {
50
    unsigned char left = 0;
51
    unsigned char right = 0;
52
    unsigned char tmp = 0;
53
 
54
//    if (data > 99) {
55
//        led_driver_data(0,0);
56
//        return;
57
//    }
58
 
59
    // Determine right character (1s digit)
60
    tmp = data % 10;
61
    switch (tmp) {
62
        case 0:
63
            right = LED_CHAR_0;
64
            break;
65
        case 1:
66
            right = LED_CHAR_1;
67
            break;
68
        case 2:
69
            right = LED_CHAR_2;
70
            break;
71
        case 3:
72
            right = LED_CHAR_3;
73
            break;
74
        case 4:
75
            right = LED_CHAR_4;
76
            break;
77
        case 5:
78
            right = LED_CHAR_5;
79
            break;
80
        case 6:
81
            right = LED_CHAR_6;
82
            break;
83
        case 7:
84
            right = LED_CHAR_7;
85
            break;
86
        case 8:
87
            right = LED_CHAR_8;
88
            break;
89
        case 9:
90
            right = LED_CHAR_9;
91
            break;
92
    }
93
 
94
    // Determine left character (10s digit)
95
    tmp = data / 10;
96
    switch (tmp) {
97
        case 0:
98
            left = LED_CHAR_0;
99
            break;
100
        case 1:
101
            left = LED_CHAR_1;
102
            break;
103
        case 2:
104
            left = LED_CHAR_2;
105
            break;
106
        case 3:
107
            left = LED_CHAR_3;
108
            break;
109
        case 4:
110
            left = LED_CHAR_4;
111
            break;
112
        case 5:
113
            left = LED_CHAR_5;
114
            break;
115
        case 6:
116
            left = LED_CHAR_6;
117
            break;
118
        case 7:
119
            left = LED_CHAR_7;
120
            break;
121
        case 8:
122
            left = LED_CHAR_8;
123
            break;
124
        case 9:
125
            left = LED_CHAR_9;
126
            break;
127
    }
128
 
129
    led_driver_data(left, right);
130
 
131
//    if (data <= 25) {
132
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_0);
133
//    } else if (data > 25 && data <= 50) {
134
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_1);
135
//    } else if (data > 50 && data <= 75) {
136
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_2);
137
//    } else if (data > 75 && data <= 100) {
138
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_3);
139
//    } else if (data > 100 && data <= 125) {
140
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_4);
141
//    } else if (data > 125 && data <= 150) {
142
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_5);
143
//    } else if (data > 150 && data <= 175) {
144
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_6);
145
//    } else if (data > 175 && data <= 200) {
146
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_7);
147
//    } else if (data > 200 && data <= 225) {
148
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_8);
149
//    } else {
150
//        led_driver_data(LED_CHAR_BLANK,LED_CHAR_9);
151
//    }
152
}