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);
}
}