Componentele electronice necesare(hardware-ul):

·         -kitul de dezvoltare MSP430 Launch Pad bazat pe microcontrolerul MSP439 G2553 sau unul compatibil
·         -6 tranzistoare pnp(bc 547);
·         -6 rezitente cu valoarea de 1Kohm
·         -8 rezistente cu valori intre 100 si 200 ohmi;
·         -3 afisaje duble cu segmente;


Pinii portului P1 ai microcontrolerului sunt programati pentru a afisa numere pe un digit al unui afisaj.Tranzistoarele sunt folosite pentru  a aprinde fiecare digit al afisajelor(unul singur la un moment  dat,celelalte fiind stinse).Datorita frecventei de lucru foarte mare a  microprocesorului (8MHz,aceasta frecventa a fost obtinuta configurand modulul generator de tact Basic Clock Module+afisajele sunt percepute de ochiul uman ca fiind toate aprinse .

Schema electronica este prezentata in continuare:



  

Codul sursa(.c) necesar programarii microcontrolerlui este prezentat in continuare:


#include "io430.h"
#include <math.h>

int numere[10][8]={
// a b  c  d  e  f  g  .
{ 1, 1, 1, 1, 1, 1, 0,0}, // 0
{ 0, 1, 1, 0, 0, 0, 0,0}, // 1
{ 1, 1, 0, 1, 1, 0, 1,0}, // 2
{ 1, 1, 1, 1, 0, 0, 1,0}, // 3
{ 0, 1, 1, 0, 0, 1, 1,0}, // 4
{ 1, 0, 1, 1, 0, 1, 1,0}, // 5
{ 1, 0, 1, 1, 1, 1, 1,0}, // 6
{ 1, 1, 1, 0, 0, 0, 0,0}, // 7
{ 1, 1, 1, 1, 1, 1, 1,0}, // 8
{ 1, 1, 1, 1, 0, 1, 1,0}  // 9
};

void genereaza(int n){
for(int i=0;i<8;i++){
int a=pow(2,i);
if (numere[n][i]==1) {
P1OUT=a^255;}
else if (numere[n][i]==0) P1OUT=255;
}
}
void afisare(int val1,int val2,int val3,int val4,int val5,int val6){
P2OUT=0x3f^0X01;
genereaza(val1);
P2OUT=0x3f^0X02;
genereaza(val2);
P2OUT=0x3f^0X04;
genereaza(val3);
P2OUT=0x3f^0x08;
genereaza(val4);
P2OUT=0X3f^0X10;
genereaza(val5);
P2OUT=0x3f^0X20;
genereaza(val6);
}
int main( void )
{
BCSCTL1=0x8D;
DCOCTL=0x86;
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
int valoare1=0,valoare2=0,valoare3=0,valoare4=0,valoare5=0,valoare6=0,k=0;
P1DIR=0XFF;
P2DIR=0X3f;
TACCR0=0XF3F1;
TACTL=0x2D0;
for(;;){
if(TACTL&0X01)k++;
if(k%50==0){valoare1++;k=0;}
if (valoare1>9) {valoare1=0;
valoare2++;
valoare1=0;

}
if(valoare2>5){
valoare1=0;
valoare2=0;
valoare3++;
}
if(valoare3>9){
valoare1=0;
valoare2=0;
valoare3=0;
valoare4++;
}
if(valoare4>5){
valoare1=0;
valoare2=0;
valoare3=0;
valoare4=0;
valoare5++;
}
if(valoare5>9){

valoare1=0;
valoare2=0;
valoare3=0;
valoare4=0;
valoare5=0;
valoare6++;
}
if(valoare6>9){

valoare1=0;
valoare2=0;
valoare3=0;
valoare4=0;
valoare5=0;
valoare6=0;
}

afisare(valoare1,valoare2,valoare3,valoare4,valoare5,valoare6);
}

}