Você está na página 1de 6

Cdigoparasemforocomcharlieplexing,semutilizarmquinadeestados.

1. #include<msp430g2553.h>
2.
3. #defineREINICIAP1DIR&=~(BIT0+BIT1+BIT2);P1OUT&=~(BIT0+BIT1+BIT2);
4.
5. void
main
(
void
)
6. {
7.
volatile

unsigned

int
i
;
8. WDTCTL
=
WDTPW
+
WDTHOLD
;
9.

10.
while
(
1
)
11.
{
12.
for
(
i
=
0
;
i
<
40000
;
i
++
)
13.
{
14.
//Acendevermelho1
15.REINICIA
16.P1DIR
|=
BIT0
+
BIT1
;
17.P1OUT
|=
BIT0
;
18.
//Acendeverde2
19.REINICIA
20.P1DIR
|=
BIT1
+
BIT2
;
21.P1OUT
|=
BIT2
;
22.
}
23.
for
(
i
=
0
;
i
<
20000
;
i
++
)
24.
{
25.
//Acendevermelho1
26.REINICIA
27.P1DIR
|=
BIT0
+
BIT1
;
28.P1OUT
|=
BIT0
;
29.
//Acendeverde2
30.REINICIA
31.P1DIR
|=
BIT1
+
BIT2
;
32.P1OUT
|=
BIT2
;

33.
//Acendeamarelo2
34.REINICIA
35.P1DIR
|=
BIT0
+
BIT2
;
36.P1OUT
|=
BIT2
;
37.
}
38.
for
(
i
=
0
;
i
<
40000
;
i
++
)
39.
{
40.
//Acendeverde1
41.REINICIA
42.P1DIR
|=
BIT1
+
BIT2
;
43.P1OUT
|=
BIT1
;
44.
//Acendevermelho2
45.REINICIA
46.P1DIR
|=
BIT0
+
BIT1
;
47.P1OUT
|=
BIT1
;
48.
}
49.
for
(
i
=
0
;
i
<
20000
;
i
++
)
50.
{
51.
//Acendeverde1
52.REINICIA
53.P1DIR
|=
BIT1
+
BIT2
;
54.P1OUT
|=
BIT1
;
55.
//Acendeamarelo1
56.REINICIA
57.P1DIR
|=
BIT0
+
BIT2
;
58.P1OUT
|=
BIT0
;
59.
//Acendevermelho2
60.REINICIA
61.P1DIR
|=
BIT0
+
BIT1
;
62.P1OUT
|=
BIT1
;
63.
}
64.
}
65.}

Cdigoparasemforocomcharlieplexing,commquinadeestados.

1. #include<msp430g2553.h>
2.
3. #defineVM1BIT0
4. #defineVM2BIT1
5. #defineVD1BIT2
6. #defineVD2BIT3
7. #defineAM1BIT4
8. #defineAM2BIT5
9.
10.void
Charlieplex
(
volatile

unsigned

int
tempo
,

volatile

char
LEDs
)
11.{
12.
//VM1,VM2,VD1,VD2,AM1,AM2
13.
volatile

char
catodo
[

{
BIT1
,
BIT0
,
BIT2
,
BIT1
,
BIT2
,
BIT0
}
;
14.
volatile

char
anodo
[

{
BIT0
,
BIT1
,
BIT1
,
BIT2
,
BIT0
,
BIT2
}
;
15.
volatile

char
dirs
[

{
0
,
0
,
0
,
0
,
0
,
0
}
;
16.
volatile

char
outs
[

{
0
,
0
,
0
,
0
,
0
,
0
}
;
17.
volatile

int
i
;
18.

19.
for
(
i
=
0
;
i
<
6
;
i
++
)
20.
{
21.
if
(
LEDs
&

(
BIT0
<<
i
))
22.
{
23.dirs
[
i
]

|=
catodo
[
i
]

+
anodo
[
i
]
;
24.outs
[
i
]

|=
anodo
[
i
]
;
25.
}
26.
}
27.

28.
while
(
tempo

29.
{
30.
for
(
i
=
0
;
i
<
6
;
i
++
)
31.
{
32.P1DIR
&=
~
(
BIT0
+
BIT1
+
BIT2
)
;
33.P1OUT
&=
~
(
BIT0
+
BIT1
+
BIT2
)
;
34.P1DIR
|=
dirs
[
i
]
;
35.P1OUT
|=
outs
[
i
]
;
36.
}
37.
}
38.}
39.
40.void
main
(
void
)
41.{
42.WDTCTL
=
WDTPW
+
WDTHOLD
;
43.

44.
while
(
1
)
45.
{
46.Charlieplex
(
10000
,
VM1
+
VD2
)
;
47.Charlieplex
(
5000
,
VM1
+
VD2
+
AM2
)
;
48.Charlieplex
(
10000
,
VM2
+
VD1
)
;
49.Charlieplex
(
5000
,
VM2
+
VD1
+
AM1
)
;
50.
}
51.}

Outrocdigoparasemforocomcharlieplexing,commquinadeestados.

#include<msp430g2553.h>
//D1=Verm1,D2=Verde2,D3=Am1,D4=Am2,D5=Verde1,D6=Verm2

#defineR11
#defineR22
#defineY13
#defineY24
#defineG15
#defineG26

void
Charlieplex(
volatile

char
num_led)
{
P1DIR&=~(BIT0+BIT1+BIT2)
P1OUT&=~(BIT0+BIT1+BIT2)
switch
(num_led)
{
case
R1:
//Verm1D1
P1DIR|=BIT1+BIT2
P1OUT|=BIT1
break

case
R2:
//Verm2D6
P1DIR|=BIT0+BIT2
P1OUT|=BIT2
break

case
Y1:
//Am1D3
P1DIR|=BIT0+BIT1
P1OUT|=BIT0
break

case
Y2:
//Am2D4
P1DIR|=BIT0+BIT1
P1OUT|=BIT1
break

case
G1:
//Verde1D5
P1DIR|=BIT0+BIT2
P1OUT|=BIT0
break

case
G2:
//Verde2D2
P1DIR|=BIT1+BIT2
P1OUT|=BIT1
break

}
}

void
main(
void
)
{
volatile

unsigned

int
i,est
volatile

char
ch1[]={R1,R1,G1,Y1}
volatile

char
ch2[]={G2,Y2,R2,R2}
volatile

unsigned

int
t[]={50000,25000,50000,25000}
WDTCTL=WDTPW+WDTHOLD

for
()
{
for
(est=0est<4est++)
{
5

for
(i=0i<t[est]i++)
{
Charlieplex(ch1[est])
Charlieplex(ch2[est])
}
}
}
}

Você também pode gostar