Advertisement
Guest User

Untitled

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