Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.44 KB | None | 0 0
  1. #include<msp430x14x.h>
  2. #include "lcd.h"
  3. #include "portyLcd.h"
  4.  
  5.  
  6. //---------------- zmienne globalne -------------
  7. unsigned int i=0;
  8. unsigned int sekundy=0; //drugie
  9. unsigned int licznik=0;
  10. unsigned int sek2=5; //pierwsze
  11. unsigned int min1=9; //drugie
  12. unsigned int min2=5; //pierwsze
  13. unsigned char znak=':';
  14. unsigned int godz1=2; //pierwsze
  15. unsigned int godz2=3; //drugie
  16. unsigned int dzien=1;
  17.  
  18. void Clock(void);
  19. void wyswietlRok(unsigned int a)
  20. {
  21.  
  22.   unsigned int czwarta= a/1000;
  23.   unsigned int trzecia=(a-(czwarta*1000))/100;
  24.   unsigned int druga=(a - (czwarta*1000) - (trzecia*100))/10;
  25.   unsigned int pierwsza=(a-(czwarta*1000) - (trzecia*100) - (druga*10));
  26.     printDecDigit(pierwsza);  
  27.   printDecDigit(druga);
  28.     printDecDigit(trzecia);  
  29.   printDecDigit(czwarta);
  30.    
  31. }
  32. void wyswietlMiesiace(unsigned int a)
  33. {
  34.   switch(a)
  35.   {
  36.   case 1:
  37. SEND_CHAR('S');
  38. SEND_CHAR('t');
  39. SEND_CHAR('y');
  40. SEND_CHAR('c');
  41. SEND_CHAR('z');
  42. SEND_CHAR('e');
  43. SEND_CHAR('n');
  44. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  45. break;
  46.   case 2:
  47. SEND_CHAR('L');
  48. SEND_CHAR('U');
  49. SEND_CHAR('T');
  50. SEND_CHAR('Y');
  51. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  52. break;
  53.   case 3:
  54. SEND_CHAR('M');
  55. SEND_CHAR('A');
  56. SEND_CHAR('R');
  57. SEND_CHAR('Z');
  58. SEND_CHAR('E');
  59. SEND_CHAR('C');
  60. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  61. break;
  62.   case 4:
  63. SEND_CHAR('K');
  64. SEND_CHAR('W');
  65. SEND_CHAR('I');
  66. SEND_CHAR('C');
  67. SEND_CHAR('I');
  68. SEND_CHAR('E');
  69. SEND_CHAR('N');
  70. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  71. break;
  72.   case 5:
  73. SEND_CHAR('M');
  74. SEND_CHAR('A');
  75. SEND_CHAR('J');
  76. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  77. break;
  78.   case 6:
  79. SEND_CHAR('C');
  80. SEND_CHAR('Z');
  81. SEND_CHAR('E');
  82. SEND_CHAR('R');
  83. SEND_CHAR('W');
  84. SEND_CHAR('I');
  85. SEND_CHAR('E');
  86. SEND_CHAR('C');
  87. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  88. break;
  89.   case 7:
  90. SEND_CHAR('L');
  91. SEND_CHAR('I');
  92. SEND_CHAR('P');
  93. SEND_CHAR('I');
  94. SEND_CHAR('E');
  95. SEND_CHAR('C');
  96. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  97. break;
  98.   case 8:
  99. SEND_CHAR('S');
  100. SEND_CHAR('I');
  101. SEND_CHAR('E');
  102. SEND_CHAR('R');
  103. SEND_CHAR('P');
  104. SEND_CHAR('I');
  105. SEND_CHAR('E');
  106. SEND_CHAR('N');
  107. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  108. break;
  109.   case 9:
  110. SEND_CHAR('W');
  111. SEND_CHAR('R');
  112. SEND_CHAR('Z');
  113. SEND_CHAR('E');
  114. SEND_CHAR('S');
  115. SEND_CHAR('I');
  116. SEND_CHAR('E');
  117. SEND_CHAR('N');
  118. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  119. break;
  120.   case 10;
  121. SEND_CHAR('P');
  122. SEND_CHAR('A');
  123. SEND_CHAR('Z');
  124. SEND_CHAR('D');
  125. SEND_CHAR('Z');
  126. SEND_CHAR('E');
  127. SEND_CHAR('R');
  128. SEND_CHAR('N');
  129. SEND_CHAR('I');
  130. SEND_CHAR('K');
  131. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  132. break;  case 11;
  133. SEND_CHAR('L');
  134. SEND_CHAR('I');
  135. SEND_CHAR('S');
  136. SEND_CHAR('T');
  137. SEND_CHAR('O');
  138. SEND_CHAR('P');
  139. SEND_CHAR('A');
  140. SEND_CHAR('D');
  141. SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl miesiac
  142. break;
  143.  
  144.  
  145.   }
  146. }
  147. void wyswietl(unsigned int a)
  148. {
  149.  
  150.   unsigned int y=a/10;
  151.   unsigned int x =a-(y*10) ;
  152.  
  153.   printDecDigit(y);  
  154.   printDecDigit(x);
  155. }
  156. unsigned int ileDni(unsigned int a)
  157. {
  158.   switch(a)
  159.   {
  160.   case 1:
  161.     return 31;
  162.   case 2:
  163.     return 28;
  164.     break;
  165.   case 3:
  166.     return 31;
  167.     break;
  168.   case 4:
  169.     return 30;
  170.     break;
  171.   case 5:
  172.     return 31;
  173.     break;
  174.   case 6:
  175.     return 30;
  176.     break;
  177.   case 7:
  178.     return 31;
  179.     break;
  180.   case 8:
  181.     return 31;
  182.     break;
  183.   case 9:
  184.     return 30;
  185.     break;
  186.   case 10:
  187.     return 31;
  188.     break;
  189.   case 11:
  190.     return 30;
  191.     break;
  192.   case 12:
  193.     return 31;
  194.     break;
  195.   default:
  196.     return 0;
  197.   }
  198. }
  199.  
  200. //----------------- main program -------------------
  201. void main( void )
  202. {
  203.             P2DIR |= BIT1 ;                   // STATUS LED
  204.  
  205. WDTCTL=WDTPW + WDTHOLD;           // Wyłączenie WDT
  206.  
  207. InitPortsLcd();                   // inicjalizacja portów LCD
  208. InitLCD();                        // inicjalizacja LCD
  209. clearDisplay();                   // czyszczenie wyświetlacza      
  210.  
  211. // Basic Clock Module ustawiamy na ACLK(zegar 8+ MHz ) i dzielimy częstotliwość przez 2 (4 MHz)
  212. BCSCTL1 |= XTS;                       // ACLK = LFXT1 = HF XTAL 8MHz
  213.  
  214. do
  215.   {
  216.   IFG1 &= ~OFIFG;                     // Czyszczenie flgi OSCFault
  217.   for (i = 0xFF; i > 0; i--);         // odczekanie
  218.   }
  219.   while ((IFG1 & OFIFG) == OFIFG);    // dopóki OSCFault jest ciągle ustawiona  
  220.  
  221. BCSCTL1 |= DIVA_1;                    // ACLK=8 MHz/2=4 MHz
  222. BCSCTL2 |= SELM0 | SELM1;             // MCLK= LFTX1 =ACLK
  223.  
  224. // Timer_A  ustawiamy na 500 kHz
  225. // a przerwanie generujemy co 100 ms
  226. TACTL = TASSEL_1 + MC_1 +ID_3;        // Wybieram ACLK, ACLK/8=500kHz,tryb Up
  227. CCTL0 = CCIE;                         // włączenie przerwań od CCR0
  228. CCR0=500000000;                           // podzielnik 50000: przerwanie co 100 ms
  229.  
  230. _EINT();                              // włączenie przerwań
  231.  
  232. for (;;)                              
  233.  {
  234.  _BIS_SR(LPM3_bits);                  // przejscie do trybu LPM3
  235.  Clock();
  236.   }
  237. }
  238.  
  239. void Clock(void)
  240. {
  241.  
  242. if (licznik %10 ==0)                    // gdy mineła sekunda (10 * 100 milisekund)
  243. {
  244. licznik=0;
  245. P2OUT ^=BIT1;                           //zapal diodę
  246.    ++sekundy;                           // licz sekundy
  247.    sekundy = sekundy%10;
  248. if((godz2 == 4) &&( godz1 == 2) && (min2 == 0)&&(min1==0))
  249. {
  250.   dzien++;
  251.   godz2=0;
  252.   godz1=0;
  253.  
  254. }
  255.    if(min2==6 && min1==0)
  256.   {
  257.    godz1++;
  258.    min2=0;
  259.    min1=0;
  260.    sek2=0;
  261.    sekundy=0;
  262.   }
  263.    if(sekundy==0)
  264.    {
  265.     sek2++;
  266.    }
  267.  //min1=min1%10;
  268.     if((min1==9)&&(sek2==6))
  269.     {
  270.    
  271.     min2++;
  272.    
  273.    }
  274.    if(sek2==6)
  275.    {
  276.      min1++;
  277.      sek2=0;
  278.      sekundy=0;
  279.    }
  280.       min1=min1%10;
  281.  
  282.    if(min2==6)
  283.    {
  284.      godz2++;
  285.      min1=0;
  286.      min2=0;
  287.      sek2=0;
  288.      sekundy=0;
  289.      
  290.    }
  291.       SEND_CMD(DD_RAM_ADDR);// linia
  292.   // printDecDigit(dzien);
  293.    wyswietl(dzien);
  294.    putc(' ');
  295.       wyswietlMiesiace(1);
  296.    SEND_CMD(CUR_SHIFT_LEFT);
  297.  
  298.        SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl liczbe sekund
  299.    SEND_CMD(DD_RAM_ADDR2);//dolna linia
  300.    
  301.    printDecDigit(godz1);
  302.    printDecDigit(godz2);
  303.    putc(znak);
  304.    printDecDigit(min2);
  305.    printDecDigit(min1);
  306.  
  307.    
  308.    putc(znak);
  309.    printDecDigit(sek2);
  310.    printDecDigit(sekundy);
  311.    for(int i =1;i<8;i++){
  312.     SEND_CMD(CUR_SHIFT_LEFT );    //wyswietl liczbe sekund
  313.    }
  314. }
  315. }
  316.  
  317. // procedura obsługi przerwania od TimerA
  318.  
  319. #pragma vector=TIMERA0_VECTOR
  320. __interrupt void Timer_A (void)
  321. {
  322. ++licznik;
  323.  _BIC_SR_IRQ(LPM3_bits);             // wyjście z trybu LPM3
  324. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement