Advertisement
Guest User

sa

a guest
Nov 27th, 2014
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. #include<msp430x14x.h>
  2. #include "lcd.h"
  3. #include "portyLcd.h"
  4. //---------------- zmienne globalne -------------
  5. unsigned int i=0;
  6. unsigned int sekundy=0;
  7. unsigned int minuty=30;
  8. unsigned int godziny=12;
  9. //zmienna zmieniania przez przerwanie
  10. unsigned int licznik=0;
  11. void zegar(void);
  12. //----------------- main program -------------------
  13. void main( void )
  14. {
  15. P4DIR &= ~0x10;
  16. P4DIR &=~0x20;
  17. P4DIR &=~0x40;
  18. WDTCTL=WDTPW + WDTHOLD;
  19. InitPortsLcd();
  20. InitLCD();
  21. clearDisplay();
  22. BCSCTL1 |= XTS; //High frequency mode 8MHz LFXT1
  23. do{
  24. IFG1 &= ~OFIFG; //czyszczenie flagi OSCfault
  25. for (i = 0xFF; i > 0; i--); //odczekanie więcej niz 50us
  26. > 3 <
  27. }
  28. while ((IFG1 & OFIFG) == OFIFG); //dopóki OSCFault jest ustawiona
  29. BCSCTL1 |= DIVA_2; //ACLK 8Mhz /4=2MHz
  30. BCSCTL2 |= SELM0 | SELM1; //zegar główny MCLK=ACLK z rezonatorem LFTX1//wg in-strukcji DCO
  31. 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;
  32. CCTL0 = CCIE; //włączenie przerwań od CCR0; umżliwia zapytania do CCIFG flag
  33. CCR0 = 25000; //250000 przerwan to 1s, 25000 to 1/10s=100ms
  34. _EINT(); //rozpoczęcie przerwań
  35. while(1){
  36. SEND_CMD(DD_RAM_ADDR);
  37. _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
  38. zegar();
  39. }
  40. }
  41. void zegar(void){
  42. if ((P4IN & 0x10)==0){
  43. while ((P4IN & 0x10)==0);
  44. godziny++;
  45. if (godziny == 24)
  46. godziny = 0;
  47. }
  48. if ((P4IN & 0x20)==0){
  49. while ((P4IN & 0x20)==0);
  50. minuty++;
  51. if(minuty == 60)
  52. minuty = 0;
  53. }
  54. if ((P4IN & 0x40)==0){
  55. while ((P4IN & 0x40)==0);
  56. sekundy++;
  57. if(sekundy == 59)
  58. sekundy = 0;
  59. }
  60. SEND_CHAR((godziny/10) + '0');
  61. SEND_CHAR(godziny%10 + '0');
  62. > 4 <
  63. SEND_CHAR(':');
  64. SEND_CHAR((minuty/10) + '0');
  65. SEND_CHAR(minuty%10 + '0');
  66. SEND_CHAR(':');
  67. SEND_CHAR((sekundy/10) + '0');
  68. SEND_CHAR(sekundy%10 + '0');
  69. int i;
  70. for (i=0; i<8; i++) SEND_CMD(CUR_SHIFT_LEFT);
  71. if (licznik % 10 == 0){
  72. licznik = 0;
  73. if (sekundy == 59){
  74. sekundy = 0;
  75. ++minuty;
  76. if (minuty == 60){
  77. minuty = 0;
  78. ++godziny;
  79. if (godziny == 24)
  80. godziny = 0;
  81. }
  82. }
  83. else
  84. ++sekundy;
  85. }
  86. }
  87. #pragma vector=TIMERA0_VECTOR
  88. __interrupt void Timer_A (void){
  89. ++licznik;
  90. _BIC_SR_IRQ(LPM3_bits);//wyjscie z trybu Lower Power Mode
  91. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement