daily pastebin goal
3%
SHARE
TWEET

kodzik

a guest Dec 13th, 2018 60 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<msp430x14x.h>
  2.  
  3. #include "lcd.h"
  4. #include "wire.h"
  5. #include "LCD_.h"
  6. #define     SKIP_ROM            0xCC
  7. #define     CONVERT_T           0x44
  8. #define     READ_SCRATCHPAD             0xBE
  9. #define         klawisz                         BIT4&P4IN
  10. #define  INTERVAL  50000  //okres licznika 0,5s
  11. #define  _5s       10     //okres pomiarów
  12.  
  13. int temp;
  14.  
  15. void show(void)
  16. {
  17.  int cyfra, waga=10;
  18.  if(temp<0)
  19.   {
  20.     SEND_CHAR('-');
  21.     temp*=-1;
  22.    }
  23.  if(temp<10)
  24.     SEND_CHAR('0');  
  25.  
  26.  if (temp >= 1000)
  27.  {
  28.   SEND_CHAR('?');
  29.   return;
  30.   }
  31.  while (waga <= temp)
  32.  {
  33.   waga*=10;
  34.   }
  35.  while ((waga/=10)>1)
  36.  {
  37.   cyfra = temp / waga;
  38.   SEND_CHAR((int)('0'+cyfra));
  39.   temp-=cyfra*waga;
  40.   }
  41.  SEND_CHAR('.');
  42.  SEND_CHAR((int)('0'+temp));
  43. }
  44.  
  45. int main()
  46. {
  47.   unsigned int k;
  48.     int spec[8] = {7, 5, 7, 0, 0, 0, 0, 0};
  49.     WDTCTL = WDTPW | WDTHOLD;
  50.     IE1 |= WDTIE;       // aktywuje przerwania NMI
  51.     _EINT();            // odblokowanie przerwaĹ„
  52.     BCSCTL1 |= XTS;  // oscylator LFXT1 w trybie wysokiej czÄ™stotliwoĹ›ci (8MHz)
  53.     _BIC_SR(OSCOFF); // wĹ‚Ä…czenie oscylatora LFXT1
  54.     unsigned char i;
  55.     do
  56.     {
  57.         IFG1 &= ~OFIFG;             // wyczyszczenie flagi OFIFG rejestru IFG1
  58.         for (i = 0xFF; i != 0; i--);// odczekanie
  59.     }
  60.     while (IFG1 & OFIFG);
  61.     BCSCTL1 |= DIVA0;       // ACLK = LFXT1/8 = 1MHz
  62.     BCSCTL1 |= DIVA1;
  63.     BCSCTL2 &= ~DIVM0;      // MCLK = LFXT1/1 = 8MHz
  64.     BCSCTL2 &= ~DIVM1;
  65.     BCSCTL2 |= SELM0 | SELM1;       // MCLK taktowany z LFXT1
  66.     for (i = 0xFF; i != 0; i--);    // odczekanie
  67.     _BIS_SR(SCG0);                  // wyĹ‚Ä…czenie oscylatora DCO
  68.     _BIS_SR(SCG1);
  69.     InitLCD();
  70.     initPort();
  71.     SEND_CMD(0x40);
  72.     for(int i=0 ; i<8; i++)
  73.     {
  74.         SEND_CHAR(spec[i]);
  75.     }
  76.     int temp_jednosc=0;
  77.     int temp_dzies=0, calk;
  78.     int temperatura;
  79.      ADC12CTL0=ADC12ON|REFON|SHT0_15; //wł. rdzenia, wł.gen. nap. odniesienia, wybór nap. odniesienia
  80.  ADC12CTL1=SHP|CSTARTADD_0;       //próbkowanie impulsowe, wynik składany w ADC12MEM0
  81.  ADC12MCTL0=INCH_10|SREF_1;       //kanał 10, źródło nap. odniesienia - wew. generator (1,5V)
  82.  for(k=0;k<0x3600;k++);           //czas na ustabilizowanie generatora nap. odniesienia
  83.  
  84.  CCR0=INTERVAL;                   //ustala nowy okres licznika
  85.  TACTL=TASSEL_2|ID_3|MC_1;        //źródło taktowania SMCLK, dzielone przez 8,tryb UP
  86.  CCTL0=CCIE;                      //uaktywnienie przerwania od TACCR0 CCIFG
  87.  _BIS_SR(GIE);                    //właczenie przerwań
  88.    
  89.  ADC12CTL0 |= ENC;                //uaktywnienie konwersji
  90.     while (1)
  91.     {
  92.         reset();       // make initialization of DS18B20
  93.         write_byte(SKIP_ROM);   // send SKIP ROM command
  94.         write_byte(CONVERT_T);  // send CONVERT TEMPERATURE command
  95.         P1DIR |= BIT7;        // magistrala w trybie wyjĹ›ciowym
  96.         P1OUT |= BIT7;        // jedynka na wyjĹ›cie
  97.         __Delayx1ms(500);      // wait (passive) 750 ms (exactly 768ms)
  98.         __Delayx1ms(250);      //
  99.         reset();       // make initialization of DS18B20
  100.         write_byte(SKIP_ROM);   // send SKIP ROM command
  101.         write_byte(READ_SCRATCHPAD);
  102.         temp_dzies = read_byte();
  103.         temp_jednosc = read_byte();
  104.  
  105.         if((klawisz) == 0)
  106.         {
  107.             P2OUT |= BIT1;
  108.             clearDisplay();
  109.             __Delayx1ms(500);
  110.             P2OUT &= ~BIT1;
  111.             calk =  temp_dzies >> 4;
  112.             calk += (temp_jednosc & 0x07) << 4;
  113.             if (temp_dzies < 0 )   // ujemna temperatura, zamiana części caĹ‚kowitej temperatury z kodu U2 na NKB
  114.             {
  115.                 calk ^= 0x7F;
  116.                 temperatura =  (temp_dzies & 0x08) ? 0 : 5000; // temperatura ujemna, jedynki części uĹ‚amkowej
  117.                 temperatura += (temp_dzies & 0x04) ? 0 : 2500; // interpretuj jak zera
  118.             }
  119.             else
  120.             {
  121.                 temperatura =  (temp_dzies & 0x08) ? 5000 : 0; // temperatura dodatnia, jedynki części uĹ‚akmkowej
  122.                 temperatura += (temp_dzies & 0x04) ? 2500 : 0; // interpretuj jako jedynki
  123.  
  124.             }
  125.             if (calk < 10)
  126.             {
  127.                 SEND_CHAR((temp_jednosc & 0x80) && (calk || temperatura) ? '-' : ' '); // w zaleĹĽnoĹ›ci czy ujemna/dodatnia temp
  128.                 SEND_CHAR(calk+'0');
  129.             }
  130.             else
  131.             {
  132.                 CHAR_DD(((temp_jednosc & 0x80) ? '-' : ' '), 0x00); // w zaleĹĽnoĹ›ci czy ujemna/dodatnia temp
  133.                 SEND_CHAR(calk/10+'0');
  134.                 SEND_CHAR(calk%10+'0');
  135.             }
  136.             SEND_CHAR(',');
  137.             SEND_CHAR(temperatura / 1000+'0');
  138.             SEND_CHAR(0);
  139.             SEND_CHAR('C');
  140.             gotoSecondLine();
  141.             ADC12CTL0 |= ADC12SC;             //start konwersji
  142.             while((ADC12CTL1&ADC12BUSY)==1);  //czekanie na koniec konwersji
  143.             temp=ADC12MEM0*1.0318-2777.4647;  //wartość temperatury z dok. 1-miejsce po przecinku
  144.             SEND_CHAR('C');
  145.              SEND_CHAR('P');
  146.                SEND_CHAR('U');
  147.                  SEND_CHAR(':');
  148.             show();                           //wyświetla na LCD
  149.             SEND_CHAR(0);
  150.             SEND_CHAR('C');
  151.         }
  152.  
  153.         else
  154.             P2OUT &= ~BIT1;
  155.     }
  156.  
  157. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand