-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathLED_WALL_2k16.c
159 lines (136 loc) · 3.81 KB
/
LED_WALL_2k16.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
#include <msp430G2553.h>
/*-------------------------------------------------
TECHNITES 2k16
MSP430G2553
-----------------
3.3 V -->|Vcc Gnd |<-- Ground
| |
Unused -->|P1.0 P2.7|--> unused
| |
Rx -->|P1.1 P2.6|--> unused
| |
Tx <--|P1.2 TST |--> Open
| |
<--|P1.3 RST |<-- Pulled high
| |
SCLK_5916 <--|P1.4 P1.7|--> SIN_5916
| |
LTCH_5916 <--|P1.5 P1.6|--> unused
| |
<--|P2.0 P2.5|<-- unused
| |
<--|P2.1 P2.4|<--
| |
<--|P2.2 P2.3|<--
-----------------
-------------------------------------------------*/
//PIN 5916 PORT1
#define SIN5916 BIT7
#define SCLK5916 BIT4
#define LTCH5916 BIT5
#define N_channel 48
#define arr_size (N_channel/8)
void serial_println_8(char val)
{
while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = val;
}
char rx_count=0,strobe;
unsigned char disp_arr[arr_size]={0xFF,0x00,0xFF,0x00,0xFF,0x00};
void InitializeClocks(void);
void SendData(void);
void main(void)
{
char temp_disp,i;
WDTCTL = WDTPW + WDTHOLD;
//TLC initialization
P1DIR = 0;
P1DIR |= (SIN5916 + SCLK5916 + LTCH5916);
P1OUT=0;
P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD
P1SEL2 = BIT1 + BIT2;
UCA0CTL1 |= UCSSEL_2; // SMCLK
UCA0BR0 = 104; // 1MHz 9600
UCA0BR1 = 0; // 1MHz 9600
UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
InitializeClocks(); // Setup clock
IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt
_bis_SR_register(GIE);
while (1)
{
SendData();
P1OUT|=LTCH5916;
P1OUT&=~(LTCH5916);
if(strobe=='S')
{
rx_count=0;
serial_println_8('K');
strobe=0;
}
}
}
void SendData(void)
{
char i,temp;
P1OUT &= ~(SIN5916 + LTCH5916 + SCLK5916);
for (i = 0; i < arr_size; i++)
{
temp=disp_arr[i];
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
P1OUT&=~(SIN5916);
P1OUT|=SIN5916&temp;
P1OUT|=SCLK5916;
P1OUT&=~SCLK5916;
temp=temp<<1;
}
}
void InitializeClocks(void)
{
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
strobe= UCA0RXBUF; // TX -> RXed character
if(!(strobe=='S'))
{
if(rx_count<arr_size)
disp_arr[rx_count++]=strobe;
}
}