Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<msp430x14x.h>
- #include "lcd.h"
- #include "portyLcd.h"
- //---------------- zmienne globalne -------------
- unsigned int i=0;
- unsigned int sekundy=0; //drugie
- unsigned int licznik=0;
- unsigned int sek2=5; //pierwsze
- unsigned int min1=9; //drugie
- unsigned int min2=5; //pierwsze
- unsigned char znak=':';
- unsigned int godz1=2; //pierwsze
- unsigned int godz2=3; //drugie
- unsigned int dzien=1;
- void Clock(void);
- void wyswietlRok(unsigned int a)
- {
- unsigned int czwarta= a/1000;
- unsigned int trzecia=(a-(czwarta*1000))/100;
- unsigned int druga=(a - (czwarta*1000) - (trzecia*100))/10;
- unsigned int pierwsza=(a-(czwarta*1000) - (trzecia*100) - (druga*10));
- printDecDigit(pierwsza);
- printDecDigit(druga);
- printDecDigit(trzecia);
- printDecDigit(czwarta);
- }
- void wyswietlMiesiace(unsigned int a)
- {
- switch(a)
- {
- case 1:
- SEND_CHAR('S');
- SEND_CHAR('t');
- SEND_CHAR('y');
- SEND_CHAR('c');
- SEND_CHAR('z');
- SEND_CHAR('e');
- SEND_CHAR('n');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 2:
- SEND_CHAR('L');
- SEND_CHAR('U');
- SEND_CHAR('T');
- SEND_CHAR('Y');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 3:
- SEND_CHAR('M');
- SEND_CHAR('A');
- SEND_CHAR('R');
- SEND_CHAR('Z');
- SEND_CHAR('E');
- SEND_CHAR('C');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 4:
- SEND_CHAR('K');
- SEND_CHAR('W');
- SEND_CHAR('I');
- SEND_CHAR('C');
- SEND_CHAR('I');
- SEND_CHAR('E');
- SEND_CHAR('N');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 5:
- SEND_CHAR('M');
- SEND_CHAR('A');
- SEND_CHAR('J');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 6:
- SEND_CHAR('C');
- SEND_CHAR('Z');
- SEND_CHAR('E');
- SEND_CHAR('R');
- SEND_CHAR('W');
- SEND_CHAR('I');
- SEND_CHAR('E');
- SEND_CHAR('C');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 7:
- SEND_CHAR('L');
- SEND_CHAR('I');
- SEND_CHAR('P');
- SEND_CHAR('I');
- SEND_CHAR('E');
- SEND_CHAR('C');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 8:
- SEND_CHAR('S');
- SEND_CHAR('I');
- SEND_CHAR('E');
- SEND_CHAR('R');
- SEND_CHAR('P');
- SEND_CHAR('I');
- SEND_CHAR('E');
- SEND_CHAR('N');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 9:
- SEND_CHAR('W');
- SEND_CHAR('R');
- SEND_CHAR('Z');
- SEND_CHAR('E');
- SEND_CHAR('S');
- SEND_CHAR('I');
- SEND_CHAR('E');
- SEND_CHAR('N');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- case 10;
- SEND_CHAR('P');
- SEND_CHAR('A');
- SEND_CHAR('Z');
- SEND_CHAR('D');
- SEND_CHAR('Z');
- SEND_CHAR('E');
- SEND_CHAR('R');
- SEND_CHAR('N');
- SEND_CHAR('I');
- SEND_CHAR('K');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break; case 11;
- SEND_CHAR('L');
- SEND_CHAR('I');
- SEND_CHAR('S');
- SEND_CHAR('T');
- SEND_CHAR('O');
- SEND_CHAR('P');
- SEND_CHAR('A');
- SEND_CHAR('D');
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl miesiac
- break;
- }
- }
- void wyswietl(unsigned int a)
- {
- unsigned int y=a/10;
- unsigned int x =a-(y*10) ;
- printDecDigit(y);
- printDecDigit(x);
- }
- unsigned int ileDni(unsigned int a)
- {
- switch(a)
- {
- case 1:
- return 31;
- case 2:
- return 28;
- break;
- case 3:
- return 31;
- break;
- case 4:
- return 30;
- break;
- case 5:
- return 31;
- break;
- case 6:
- return 30;
- break;
- case 7:
- return 31;
- break;
- case 8:
- return 31;
- break;
- case 9:
- return 30;
- break;
- case 10:
- return 31;
- break;
- case 11:
- return 30;
- break;
- case 12:
- return 31;
- break;
- default:
- return 0;
- }
- }
- //----------------- main program -------------------
- void main( void )
- {
- P2DIR |= BIT1 ; // STATUS LED
- WDTCTL=WDTPW + WDTHOLD; // Wyłączenie WDT
- InitPortsLcd(); // inicjalizacja portów LCD
- InitLCD(); // inicjalizacja LCD
- clearDisplay(); // czyszczenie wyświetlacza
- // Basic Clock Module ustawiamy na ACLK(zegar 8+ MHz ) i dzielimy częstotliwość przez 2 (4 MHz)
- BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz
- do
- {
- IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
- for (i = 0xFF; i > 0; i--); // odczekanie
- }
- while ((IFG1 & OFIFG) == OFIFG); // dopóki OSCFault jest ciągle ustawiona
- BCSCTL1 |= DIVA_1; // ACLK=8 MHz/2=4 MHz
- BCSCTL2 |= SELM0 | SELM1; // MCLK= LFTX1 =ACLK
- // Timer_A ustawiamy na 500 kHz
- // a przerwanie generujemy co 100 ms
- TACTL = TASSEL_1 + MC_1 +ID_3; // Wybieram ACLK, ACLK/8=500kHz,tryb Up
- CCTL0 = CCIE; // włączenie przerwań od CCR0
- CCR0=500000000; // podzielnik 50000: przerwanie co 100 ms
- _EINT(); // włączenie przerwań
- for (;;)
- {
- _BIS_SR(LPM3_bits); // przejscie do trybu LPM3
- Clock();
- }
- }
- void Clock(void)
- {
- if (licznik %10 ==0) // gdy mineła sekunda (10 * 100 milisekund)
- {
- licznik=0;
- P2OUT ^=BIT1; //zapal diodę
- ++sekundy; // licz sekundy
- sekundy = sekundy%10;
- if((godz2 == 4) &&( godz1 == 2) && (min2 == 0)&&(min1==0))
- {
- dzien++;
- godz2=0;
- godz1=0;
- }
- if(min2==6 && min1==0)
- {
- godz1++;
- min2=0;
- min1=0;
- sek2=0;
- sekundy=0;
- }
- if(sekundy==0)
- {
- sek2++;
- }
- //min1=min1%10;
- if((min1==9)&&(sek2==6))
- {
- min2++;
- }
- if(sek2==6)
- {
- min1++;
- sek2=0;
- sekundy=0;
- }
- min1=min1%10;
- if(min2==6)
- {
- godz2++;
- min1=0;
- min2=0;
- sek2=0;
- sekundy=0;
- }
- SEND_CMD(DD_RAM_ADDR);// linia
- // printDecDigit(dzien);
- wyswietl(dzien);
- putc(' ');
- wyswietlMiesiace(1);
- SEND_CMD(CUR_SHIFT_LEFT);
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl liczbe sekund
- SEND_CMD(DD_RAM_ADDR2);//dolna linia
- printDecDigit(godz1);
- printDecDigit(godz2);
- putc(znak);
- printDecDigit(min2);
- printDecDigit(min1);
- putc(znak);
- printDecDigit(sek2);
- printDecDigit(sekundy);
- for(int i =1;i<8;i++){
- SEND_CMD(CUR_SHIFT_LEFT ); //wyswietl liczbe sekund
- }
- }
- }
- // procedura obsługi przerwania od TimerA
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- {
- ++licznik;
- _BIC_SR_IRQ(LPM3_bits); // wyjście z trybu LPM3
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement