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;
- unsigned int minuty=30;
- unsigned int godziny=12;
- //zmienna zmieniania przez przerwanie
- unsigned int licznik=0;
- void zegar(void);
- //----------------- main program -------------------
- void main( void )
- {
- P4DIR &= ~0x10;
- P4DIR &=~0x20;
- P4DIR &=~0x40;
- WDTCTL=WDTPW + WDTHOLD;
- InitPortsLcd();
- InitLCD();
- clearDisplay();
- BCSCTL1 |= XTS; //High frequency mode 8MHz LFXT1
- do{
- IFG1 &= ~OFIFG; //czyszczenie flagi OSCfault
- for (i = 0xFF; i > 0; i--); //odczekanie więcej niz 50us
- > 3 <
- }
- while ((IFG1 & OFIFG) == OFIFG); //dopóki OSCFault jest ustawiona
- BCSCTL1 |= DIVA_2; //ACLK 8Mhz /4=2MHz
- BCSCTL2 |= SELM0 | SELM1; //zegar główny MCLK=ACLK z rezonatorem LFTX1//wg in-strukcji DCO
- TACTL = TASSEL_1 + MC_1 + ID_3; // TASSEL_1 - source ACLK; MC_1 - up mode:timer liczy do CCR0 co w efekcie wywoluje przerwanie; ID_3 - 2MHz/8=250000Hz;
- CCTL0 = CCIE; //włączenie przerwań od CCR0; umżliwia zapytania do CCIFG flag
- CCR0 = 25000; //250000 przerwan to 1s, 25000 to 1/10s=100ms
- _EINT(); //rozpoczęcie przerwań
- while(1){
- SEND_CMD(DD_RAM_ADDR);
- _BIS_SR(LPM3_bits); //uruchomienie trybu Low Power Mode 3 (SCG1(wylącza-SMCLK)+SCG0(wyłącza-generator DC)+CPUOFF(wyłącza-MCLK));OSCOFF wyłączyłoby ACLK
- zegar();
- }
- }
- void zegar(void){
- if ((P4IN & 0x10)==0){
- while ((P4IN & 0x10)==0);
- godziny++;
- if (godziny == 24)
- godziny = 0;
- }
- if ((P4IN & 0x20)==0){
- while ((P4IN & 0x20)==0);
- minuty++;
- if(minuty == 60)
- minuty = 0;
- }
- if ((P4IN & 0x40)==0){
- while ((P4IN & 0x40)==0);
- sekundy++;
- if(sekundy == 59)
- sekundy = 0;
- }
- SEND_CHAR((godziny/10) + '0');
- SEND_CHAR(godziny%10 + '0');
- > 4 <
- SEND_CHAR(':');
- SEND_CHAR((minuty/10) + '0');
- SEND_CHAR(minuty%10 + '0');
- SEND_CHAR(':');
- SEND_CHAR((sekundy/10) + '0');
- SEND_CHAR(sekundy%10 + '0');
- int i;
- for (i=0; i<8; i++) SEND_CMD(CUR_SHIFT_LEFT);
- if (licznik % 10 == 0){
- licznik = 0;
- if (sekundy == 59){
- sekundy = 0;
- ++minuty;
- if (minuty == 60){
- minuty = 0;
- ++godziny;
- if (godziny == 24)
- godziny = 0;
- }
- }
- else
- ++sekundy;
- }
- }
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void){
- ++licznik;
- _BIC_SR_IRQ(LPM3_bits);//wyjscie z trybu Lower Power Mode
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement