Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <msp430x14x.h>
- #include "lcd.h"
- #include "portyLcd.h"
- unsigned int i=0;
- unsigned int sekundy=0;
- unsigned int licznik=0;
- int mies[12][11]={{115, 116, 121, 99, 122, 101, 0,32,32,32,32},//styczeń
- {32,32,108, 117, 116, 121,32,32,32,32,32}, //luty
- {32,32,109, 97, 114, 122, 101, 99,32,32,32}, //marzec
- {32,32,107, 119, 105, 101, 99, 105, 101, 0,32}, //kwiecień
- {32,32,109, 97, 106,32,32,32,32,32,32}, //maj
- {32,32,99, 122, 101, 114, 119, 105, 101, 99,32}, //czerwiec
- {32,32,108,105,112,105,101,99,32,32,32}, //lipiec
- {32,32,115,105,101,114,112,105,101,0,32}, //sierpień
- {32,32,119,114,122,101,115,105,101,0,32}, //wrzesień
- {32,32,112,97,1,100,122,105,101,114,110}, //październik
- {32,32,108,105,115,116,111,112,97,100,32}, //listopad
- {32,32,103,114,117,100,122,105,101,0,32}}; //grudzień
- void Clock(int min,int godz,int dzien,int m)
- {
- while(1==1)
- {
- _BIS_SR(LPM3_bits);
- if (licznik %10 ==0) // gdy mine3a sekunda (10 * 100 milisekund)
- {
- licznik=0;
- ++sekundy;
- if(((sekundy-sekundy%10)/10)==6)// licz minuty
- {
- ++min;
- }
- if(((min-min%10)/10)==6&&(((sekundy-sekundy%10)/10)==6))
- {
- ++godz;
- min=0;
- sekundy=0;
- }
- if(((godz-godz%10)/10)==2 && godz%10==4)
- {
- godz=0;
- ++dzien;
- }
- SEND_CMD(DD_RAM_ADDR);
- printDecDigit((dzien-dzien%10)/10);
- printDecDigit(dzien%10);
- for(int i=0;i<11;i++)
- {
- SEND_CHAR(mies[m][i]);
- }
- SEND_CMD(DD_RAM_ADDR2);
- printDecDigit((godz-godz%10)/10);
- printDecDigit(godz%10);
- SEND_CHAR(':');
- printDecDigit((min-min%10)/10);
- printDecDigit(min%10);
- SEND_CHAR(':');
- printDecDigit((sekundy-sekundy%10)/10);
- printDecDigit(sekundy%10);
- for(int i=0; i<4; i++)
- {
- SEND_CMD(CUR_SHIFT_LEFT);
- }
- if(godz>23)
- {
- ++dzien;
- min=0;
- godz=0;
- }
- }
- }
- }
- void main( void )
- {
- int godzina=23;
- int minuta=59;
- int dzien=12;
- int miesiac = 2;
- int spec[2][8]={{2, 4, 22, 25, 17, 17, 17, 0}, //n
- {2, 4, 31, 2, 4, 8, 31, 0}};
- int mies[12][11]={{115, 116, 121, 99, 122, 101, 0,32,32,32,32},//styczeń
- {108, 117, 116, 121,32,32,32,32,32,32,32}, //luty
- {109, 97, 114, 122, 101, 99,32,32,32,32,32}, //marzec
- {107, 119, 105, 101, 99, 105, 101, 0,32,32,32}, //kwiecień
- {109, 97, 106,32,32,32,32,32,32,32,32}, //maj
- {99, 122, 101, 114, 119, 105, 101, 99,32,32,32}, //czerwiec
- {108,105,112,105,101,99,32,32,32,32,32}, //lipiec
- {115,105,101,114,112,105,101,0,32,32,32}, //sierpień
- {119,114,122,101,115,105,101,0,32,32,32}, //wrzesień
- {112,97,1,100,122,105,101,114,110,105,107}, //październik
- {108,105,115,116,111,112,97,100,32,32,32}, //listopad
- {103,114,117,100,122,105,101,0,32,32,32}}; //grudzień
- P2DIR |= BIT1 ; // STATUS LED
- P4DIR &= ~0x10;
- WDTCTL=WDTPW + WDTHOLD; // Wy31czenie WDT
- InitPortsLcd(); // inicjalizacja portów LCD
- InitLCD(); // inicjalizacja LCD
- clearDisplay(); // czyszczenie wyowietlacza
- SEND_CMD(CG_RAM_ADDR);
- for(int i=0;i<2;i++)
- {
- for(int j=0;j<8;j++)
- {
- SEND_CHAR(spec[i][j]);
- }
- }
- // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy czestotliwooa 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 ci1gle 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; // w31czenie przerwan od CCR0
- CCR0=50000; // podzielnik 50000: przerwanie co 100 ms
- _EINT(); // w31czenie przerwan
- // przejscie do trybu LPM3
- Clock(minuta,godzina,dzien,miesiac);
- }
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- {
- ++licznik;
- _BIC_SR_IRQ(LPM3_bits); // wyjocie z trybu LPM3
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement