Facebook
From Innocent Kangaroo, 6 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 255
  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 pom=0;
  9. unsigned int sekundy=0;
  10. unsigned int licznik=0;
  11. unsigned int minuty=0;
  12. unsigned int godzina=0;
  13. unsigned int sekund_D,sekund_J;
  14. unsigned int minuty_D,minuty_J;
  15. unsigned int godzina_D,godzina_J;
  16. unsigned char *znak1="Ustaw godzine ";//14
  17. unsigned char *znak2="Ustaw minute ";//13
  18. unsigned char *znak3="Ustaw sekunde ";//14
  19. void Clock(void);
  20. void myDelay(){
  21. int i,j;
  22. for(i=0;i<255;i++){for(j=0;j<1000;j++){}}
  23. }
  24. void ZmianaG()
  25. {
  26.   if((P4IN&BIT4)==0)
  27.   {godzina++;}
  28.   else{godzina--;}
  29.  
  30.   if(godzina==-1){godzina=23;}
  31.   if(godzina>=24){
  32.     godzina=0;
  33.   }
  34.   godzina_D=godzina/10;
  35.   godzina_J=godzina%10;
  36.   SEND_CMD(DD_RAM_ADDR2);
  37.   SEND_CHAR(godzina_D+48);
  38.   SEND_CHAR(godzina_J+48);
  39.  
  40. }
  41. void ZmianaM()
  42. {
  43.   if((P4IN&BIT4)==0)
  44.   {minuty++;}
  45.   else{minuty--;}
  46.  
  47.   if(minuty==-1){minuty=59;}
  48.   if(minuty>=60){
  49.     minuty=0;
  50.   }
  51.   minuty_D=minuty/10;
  52.   minuty_J=minuty%10;
  53.   SEND_CMD(DD_RAM_ADDR2);
  54.   SEND_CHAR(minuty_D+48);
  55.   SEND_CHAR(minuty_J+48);
  56.  
  57. }
  58. void ZmianaS()
  59. {
  60.   if((P4IN&BIT4)==0)
  61.   {sekundy++;}
  62.   else{sekundy--;}
  63.  
  64.   if(sekundy==-1){sekundy=59;}
  65.   if(sekundy>=60){
  66.     sekundy=0;
  67.   }
  68.   sekund_D=sekundy/10;
  69.   sekund_J=sekundy%10;
  70.   SEND_CMD(DD_RAM_ADDR2);
  71.   SEND_CHAR(sekund_D+48);
  72.   SEND_CHAR(sekund_J+48);
  73.  
  74. }
  75.  
  76. //----------------- main program -------------------
  77. void main( void )
  78. {
  79. P2DIR |= BIT1 ;                   // STATUS LED
  80. P4DIR &=~BIT4+BIT5+BIT6+BIT7;
  81. WDTCTL=WDTPW + WDTHOLD;           // Wy31czenie WDT
  82.  
  83. InitPortsLcd();                   // inicjalizacja portów LCD
  84. InitLCD();                        // inicjalizacja LCD
  85. clearDisplay();                   // czyszczenie wyowietlacza      
  86.  
  87. // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy czestotliwooa przez 2 (4 MHz)
  88. BCSCTL1 |= XTS;                       // ACLK = LFXT1 = HF XTAL 8MHz
  89.  
  90. do
  91.   {
  92.   IFG1 &= ~OFIFG;                     // Czyszczenie flgi OSCFault
  93.   for (i = 0xFF; i > 0; i--);         // odczekanie
  94.   }
  95.   while ((IFG1 & OFIFG) == OFIFG);    // dopóki OSCFault jest ci1gle ustawiona  
  96.  
  97. BCSCTL1 |= DIVA_3;                    // ACLK=8 MHz/8=1 MHz
  98. BCSCTL2 |= SELM0 | SELM1;             // MCLK= LFTX1 =ACLK
  99.  
  100. // Timer_A  ustawiamy na 500 kHz
  101. // a przerwanie generujemy co 100 ms
  102. TACTL = TASSEL_1 + MC_1 +ID_2;        // Wybieram ACLK, ACLK/8=500kHz,tryb Up
  103. CCTL0 = CCIE;                         // w31czenie przerwan od CCR0
  104. CCR0=25000;                           // podzielnik 50000: przerwanie co 100 ms
  105.  
  106. _EINT();                              // w31czenie przerwan
  107.  
  108. while((P4IN&BIT7)!=0)
  109. {
  110.  
  111.    
  112.   if(pom==0){
  113.   SEND_CMD(DD_RAM_ADDR);
  114.   for(i=0;i<14;i++)
  115.   {
  116.     SEND_CHAR(znak1[i]);
  117.   }
  118.   myDelay();
  119.   }
  120.   if((P4IN&BIT6)==0 && (pom==0)){
  121.   clearDisplay();
  122.    SEND_CMD(DD_RAM_ADDR);
  123.   for(i=0;i<13;i++)
  124.   {
  125.     SEND_CHAR(znak2[i]);
  126.   }
  127.    myDelay();
  128.   }
  129.   if((P4IN&BIT6)==0 &&( pom==1)){
  130.   clearDisplay();
  131.    SEND_CMD(DD_RAM_ADDR);
  132.   for(i=0;i<14;i++)
  133.   {
  134.     SEND_CHAR(znak3[i]);
  135.   }
  136.    myDelay();
  137.   }
  138.  
  139.     if(((P4IN&BIT4)==0 || (P4IN&BIT5)==0) &&( pom==0))
  140.   {
  141.   ZmianaG();
  142.   myDelay();
  143.   }
  144.  
  145.   if(((P4IN&BIT4)==0 || (P4IN&BIT5)==0) &&( pom==1))
  146.   {
  147.   ZmianaM();
  148.   myDelay();
  149.   }
  150.    
  151.   if(((P4IN&BIT4)==0 || (P4IN&BIT5)==0 )&& (pom==2))
  152.   {
  153.   ZmianaS();
  154.   myDelay();
  155.   }
  156.  
  157.   if((P4IN&BIT6)==0){pom++; for(i=0;i<10000;i++){}}
  158.   }
  159. clearDisplay();
  160.  
  161.  
  162.  
  163. for (;;)                              
  164.  {
  165.  _BIS_SR(LPM3_bits);                  // przejscie do trybu LPM3
  166.  Clock();
  167.   }
  168. }
  169.  
  170. void Clock(void)
  171. {
  172.  
  173.  
  174. if (licznik %10 ==0)                    // gdy mine3a sekunda (10 * 100 milisekund)
  175. {
  176.   if(godzina==23 && minuty==59 && sekundy==59)
  177.   { godzina=0;
  178.  
  179.   }
  180.   if(minuty==59 && sekundy==59){
  181.   minuty=0;
  182.   godzina++;
  183.   }
  184.   if(sekundy==59){
  185.   sekundy=0;
  186.   minuty++;
  187.   }
  188. licznik=0;
  189. P2OUT ^=BIT1;                           //zapal diode
  190.    ++sekundy;                           // licz sekundy
  191.    
  192.    sekund_D= sekundy/10;
  193.    sekund_J= sekundy%10;
  194.    minuty_D= minuty/10;
  195.    minuty_J=minuty%10;
  196.    godzina_D=godzina/10;
  197.    godzina_J=godzina%10;
  198.    SEND_CMD(DD_RAM_ADDR);
  199.    SEND_CHAR(godzina_D+48);
  200.    SEND_CHAR(godzina_J+48);
  201.         SEND_CHAR(':');
  202.    SEND_CHAR(minuty_D+48);
  203.    SEND_CHAR(minuty_J+48);
  204.    SEND_CHAR(':');
  205.    SEND_CHAR(sekund_D+48);
  206.    SEND_CHAR(sekund_J+48);
  207.    
  208.    
  209.    SEND_CMD(CUR_SHIFT_LEFT );           // wróa kursorem na pocz1tek
  210. }
  211. }
  212.  
  213. // procedura obs3ugi przerwania od TimerA
  214.  
  215. #pragma vector=TIMERA0_VECTOR
  216. __interrupt void Timer_A (void)
  217. {
  218. ++licznik;
  219.  _BIC_SR_IRQ(LPM3_bits);             // wyjocie z trybu LPM3
  220. }
  221.