C:n aloittelu

Aloittelin tuossa launchpadilla ohjelmoimisen parin tutoriaalin ja datasheetin jälkeen ja ensimmäisenä projektina on numeroiden 1-9 näyttäminen 7-segmentillä. 7-segmentti on common anode ja olen siinä saanut näkymään jo osan numeroista. Vaatii aika paljon kikkailua nykyisellä koodilla uuden numeron näyttäminen, jokin segmentti jää uupumaan aina jostain syystä. numerot näkyvät nyt 1-3. Kolmosen kanssa sai hakea vähän aikaa miksi ei c näy. nyt 4 puuttuu f vaikka mielestäni sen pitäisi olla. Uskon että on paljon parempiakin tapoja hoitaa tämä mutta se ei ole nyt pääpointti. Miksi 4 puuttuu f sakara? Käytän tuossa nyt tuota togglea. En löytänyt että onko olemassa komentoa jolla saisi vain HIGH tai LOW.Tyyliin P1OUT = BIT1HIGH + BIT1LOW

[code]/*P1
*BIT0=E
*BIT1=D
*BIT2=C
*BIT3=DP
*BIT4=A
*BIT5=B
*P2BIT1=G
*P2BIT2=F
*/

#include <msp430g2553.h>

#define clear (P1OUT = 0xFF) + (P2OUT = 0xFF)
#define nro1 (P1OUT ^= BIT5 + BIT2)
#define nro2 (P1OUT ^= BIT0 + BIT1 + BIT5 + BIT4) + (P2OUT ^= BIT1)
#define nro3 (P1OUT ^= BIT1 + BIT2 + BIT4 + BIT5) + (P2OUT ^= BIT1)
#define nro4 (P1OUT ^= BIT5 + BIT2) + (P2OUT ^= BIT2 + BIT1)

void delay_ms(unsigned int ms )
{
unsigned int i;
for (i = 0; i<= ms; i++)
__delay_cycles(2000);
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5;
P2DIR |= BIT1 + BIT2 + BIT0;

while(1)
{
	clear;
	nro1;
	delay_ms(1000);
	clear;
	nro2;
	delay_ms(1000);
	clear;
	nro3;
	delay_ms(1000);
	clear;
	nro4;
	delay_ms(1000);



}

}
[/code]

edit: otetaanpa takaisin. huono liitos vikana :blush:
silti nuo HIGH ja LOW komennot kiinnostais ja muutenki vinkit koodiin ja yleensä c opiskeluun

Launcpadille löytyy jotain kirjastoja jolla saa ohjelmoitua kuin arduinoa… Googleen vaan program launchpad like arduino. tjsp.

Mietin tuossa että menisikös se ihan vaan niin että määritetään tonn ohjelman alkuun muuttuja HIGH joka olisi sama kuin pinnin tilan muutoss… ?

Ei tuo launcpadinkaan systeemi oo vaikeaa kun sen oppii.

Tuohon vois ottaa taulukon käyttöön.

//        bit 0 = b ... bit 5 = g, bit 6 = a
//        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09
char seg7[10] = {0x3f, 0x03, 0x7f, 0x67, 0x53, 0x76, 0x7e, 0x23, 0x7f, 0x77};

P1OUT &= 0x80; // Clear 7seg IOs
P1OUT |= seg7[i]; // i = displayed value

Edit:
Muokkasin tota koodia, missä tuo olis käytössä

[code]/*P1
*BIT0=E
*BIT1=D
*BIT2=C
*BIT3=DP
*BIT4=A
*BIT5=B
*P2BIT1=G
*P2BIT2=F
*/

#include <msp430g2553.h>

#define clear (P1OUT = 0xFF) + (P2OUT = 0xFF)

// bit 0 = b … bit 5 = g, bit 6 = a
// 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09
char seg7P1[10] = {0x3f, 0x03, 0x7f, 0x67, 0x53, 0x76, 0x7e, 0x23, 0x7f, 0x77}; // TO DO: Calculate right values
char seg7P2[10] = {0x3f, 0x03, 0x7f, 0x67, 0x53, 0x76, 0x7e, 0x23, 0x7f, 0x77}; // TO DO: Calculate right values
//seg7[10] = {0x3f, 0x03, 0x7f, 0x67, 0x53, 0x76, 0x7e, 0x23, 0x7f, 0x77};

void delay_ms(unsigned int ms )
{
unsigned int i;
for (i = 0; i<= ms; i++)
__delay_cycles(2000);
}

void main(void)
{
char i;
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= 0x3f; //BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5;
P2DIR |= 0x07; //BIT1 + BIT2 + BIT0;

while(1)
{

   for(i = 0; i < 10; i++)
   {
	  clear;
	  P1OUT |= seg7P1[i];
	  P2OUT |= seg7P2[i];
	  delay_ms(1000);
   }

}
}

[/code]

Pitää vielä tuota taulukkohommaa katella ja lukea enemmän sen käytöstä.

Tässä nyt toimiva koodi joka näyttää numerot 0-9 ja seuraavaksi ois tarkotus laajentaa toiseen segmentti näyttöön samalla pinoutilla ja trankuilla.

[code]/*
*P1BIT0=E
*P1BIT1=D
*P1BIT2=C
*P1BIT3=DP
*P1BIT4=A
*P1BIT5=B
*P2BIT1=G
*P2BIT2=F
*/

#include <msp430g2553.h>

#define clear (P1OUT = 0xFF) + (P2OUT = 0xFF)
#define nro0 (P1OUT ^= BIT4 + BIT5 + BIT2 + BIT1 + BIT0) + (P2OUT ^= BIT2)
#define nro1 (P1OUT ^= BIT5 + BIT2)
#define nro2 (P1OUT ^= BIT0 + BIT1 + BIT5 + BIT4) + (P2OUT ^= BIT1)
#define nro3 (P1OUT ^= BIT1 + BIT2 + BIT4 + BIT5) + (P2OUT ^= BIT1)
#define nro4 (P1OUT ^= BIT5 + BIT2) + (P2OUT ^= BIT2 + BIT1)
#define nro5 (P1OUT ^= BIT4 + BIT2 + BIT1) + (P2OUT ^= BIT1 + BIT2)
#define nro6 (P1OUT ^= BIT4 + BIT2 + BIT1 + BIT0) + (P2OUT ^= BIT1 + BIT2)
#define nro7 (P1OUT ^= BIT4 + BIT5 + BIT2)
#define nro8 (P1OUT ^= BIT0 + BIT1 + BIT2 + BIT4 + BIT5) + (P2OUT ^= BIT1 + BIT2)
#define nro9 (P1OUT ^= BIT1 + BIT2 + BIT4 + BIT5) + (P2OUT ^= BIT1 + BIT2)

void delay_ms(unsigned int ms )
{
unsigned int i;
for (i = 0; i<= ms; i++)
__delay_cycles(2000);
}

void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5;
P2DIR |= BIT1 + BIT2 + BIT0;

while(1)
{

	clear;
	nro0;
	delay_ms(1000);
	clear;
	nro1;
	delay_ms(1000);
	clear;
	nro2;
	delay_ms(1000);
	clear;
	nro3;
	delay_ms(1000);
	clear;
	nro4;
	delay_ms(1000);
	clear;
	nro5;
	delay_ms(1000);
	clear;
	nro6;
	delay_ms(1000);
	clear;
	nro7;
	delay_ms(1000);
	clear;
	nro8;
	delay_ms(1000);
	clear;
	nro9;
	delay_ms(1000);






}

}

[/code]