Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 8.83 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 licznik=0;
  8. int tablica[2][16];
  9. char polozenie = 'R';
  10. int wynik = 0;
  11. int tablicaWynikowa[4] = {0,0,0,0};
  12. int tablicaBEST[4] = {0,0,0,0};
  13. int FlagaPozycji = 1;
  14. int best = 0;
  15. int trudnosc = 5;
  16. int level = 1;
  17.  
  18. #define     POS                 0x00
  19.  
  20. void defineChars() {
  21.     //statek
  22.     SEND_CMD(0x40); SEND_CHAR(0x01); SEND_CMD(0x41); SEND_CHAR(0x03); SEND_CMD(0x42); SEND_CHAR(0x07);
  23.     SEND_CMD(0x43); SEND_CHAR(0x1C); SEND_CMD(0x44); SEND_CHAR(0x1C); SEND_CMD(0x45); SEND_CHAR(0x07);
  24.     SEND_CMD(0x46); SEND_CHAR(0x03); SEND_CMD(0x47); SEND_CHAR(0x01);
  25.        
  26.         // przeszkoda
  27.     SEND_CMD(0x48); SEND_CHAR(0x00); SEND_CMD(0x49); SEND_CHAR(0x04); SEND_CMD(0x4A); SEND_CHAR(0x0E);
  28.     SEND_CMD(0x4B); SEND_CHAR(0x1F); SEND_CMD(0x4C); SEND_CHAR(0x1F); SEND_CMD(0x4D); SEND_CHAR(0x0E);
  29.     SEND_CMD(0x4E); SEND_CHAR(0x04); SEND_CMD(0x4F); SEND_CHAR(0x00);
  30.        
  31.    
  32. }
  33.  
  34. int _random(void){
  35.     ADC12CTL0 |= ADC12SC;           //starting single ADC conversion
  36.  
  37.     while(ADC12CTL1 & ADC12BUSY);   //wait unill conversion ends
  38.     return ADC12MEM0 % 256;
  39. }
  40.  
  41.  
  42.  
  43. void RuszLewo(){
  44.     polozenie = 'L';
  45. }
  46.  
  47. void RuszPrawo(){
  48.     polozenie = 'R';
  49. }
  50.  
  51. void Generuj(){
  52.  
  53.     static int zmienna, ile;
  54.     zmienna=!zmienna;
  55.  
  56.     if(zmienna){
  57.         int los = _random()%2;
  58.         int los2 = ile++ % 4 == 3 ? 0 : _random()%10;
  59.  
  60.         tablica[los][0] = los2 && los2 > 3 ? 1 : 0;
  61.         tablica[!los][0] = 0;
  62.     }
  63.    
  64.     else{
  65.         tablica[0][0] = tablica[1][0] = 0;
  66.     }
  67. }
  68.  
  69. void PrzesunTor(){
  70.  
  71.     for(int i=15; i>=0; i--){
  72.         if(tablica[0][i]==1){
  73.            
  74.             if(i == 15)
  75.                 tablica[0][i] = 0;
  76.            
  77.             else{
  78.                 tablica[0][i+1]=1;
  79.                 tablica[0][i]=0;
  80.             }
  81.         }
  82.  
  83.         if(tablica[1][i]==1){
  84.            
  85.             if(i == 15)
  86.                 tablica[1][i] = 0;
  87.            
  88.             else{
  89.                 tablica[1][i+1]=1;
  90.                 tablica[1][i]=0;
  91.             }
  92.  
  93.         }
  94.     }
  95. }
  96.  
  97.     void WyswietlStatek(){
  98.         if(polozenie == 'L'){
  99.             SEND_CMD(DD_RAM_ADDR2);
  100.             int i = 15;
  101.             while(i--)
  102.                 SEND_CMD(CUR_SHIFT_RIGHT);
  103.         SEND_CHAR(0x00);
  104.         }
  105.        
  106.         if(polozenie == 'R'){
  107.             SEND_CMD(DD_RAM_ADDR);
  108.             int i = 15;
  109.             while(i--)
  110.                 SEND_CMD(CUR_SHIFT_RIGHT);
  111.         SEND_CHAR(0x00);
  112.         }
  113.     }
  114.    
  115.     void Bestuj(){
  116.         if(wynik > best){
  117.             best = wynik;
  118.             tablicaBEST[3]=tablicaWynikowa[3];
  119.             tablicaBEST[2]=tablicaWynikowa[2];
  120.             tablicaBEST[1]=tablicaWynikowa[1];
  121.             tablicaBEST[0]=tablicaWynikowa[0];
  122.         }
  123.     }
  124.        
  125.        
  126.        
  127.        
  128.        
  129.    
  130. void WyrzucTorNaEkran(){
  131.     SEND_CMD(DD_RAM_ADDR);
  132.     for (int i = 0; i <= 16; i++)
  133.         SEND_CHAR(tablica[0][i] ? 0x01 : ' ');
  134.  
  135.     SEND_CMD(DD_RAM_ADDR2);
  136.     for (int i = 0; i <= 16; i++)
  137.         SEND_CHAR(tablica[1][i] ? 0x01 : ' ');
  138.    
  139.     WyswietlStatek();
  140. }
  141.  
  142. void LiczWynik(){
  143.     if(tablica[0][15] == 1 || tablica[1][15])
  144.         wynik++;
  145.  
  146. }
  147.  
  148. int CzyGameOver(){
  149.     if(tablica[0][15] == 1 && polozenie == 'R')
  150.         return 1;
  151.     if(tablica[1][15] == 1 && polozenie == 'L')
  152.         return 1;
  153.     return 0;
  154. }
  155.  
  156.  
  157. void MenuStart(){
  158.    
  159.     SEND_CMD(DD_RAM_ADDR);
  160.     SEND_CHAR(' ');
  161.      SEND_CHAR(' ');
  162.      SEND_CHAR('S');
  163.      SEND_CHAR('A');
  164.      SEND_CHAR('M');
  165.      SEND_CHAR('O');
  166.      SEND_CHAR('C');
  167.      SEND_CHAR('H');
  168.      SEND_CHAR('O');
  169.      SEND_CHAR('D');
  170.      SEND_CHAR('Z');
  171.      SEND_CHAR('I');
  172.      SEND_CHAR('K');
  173.      SEND_CHAR('I');
  174.      
  175.     SEND_CMD(DD_RAM_ADDR2);
  176.     SEND_CHAR('P');
  177.     SEND_CHAR('R');
  178.     SEND_CHAR('E');
  179.     SEND_CHAR('S');
  180.     SEND_CHAR('S');
  181.     SEND_CHAR(' ');
  182.     SEND_CHAR('3');
  183.     SEND_CHAR(' ');
  184.     SEND_CHAR('T');
  185.     SEND_CHAR('O');
  186.     SEND_CHAR(' ');
  187.     SEND_CHAR('S');
  188.     SEND_CHAR('T');
  189.     SEND_CHAR('A');
  190.     SEND_CHAR('R');
  191.     SEND_CHAR('T');
  192.    
  193.     for( ;; ){
  194.         if((BIT6&P4IN)==0)
  195.             break;
  196.     }
  197. }
  198. void CzyscTablica(){
  199.          for(int i = 15; i >= 0; i--){
  200.                  tablica[0][i] = 0;
  201.                  tablica[1][i] = 0;
  202.              }
  203.      }
  204.  
  205. void GameOver(){
  206.     Bestuj();
  207.      SEND_CMD(DD_RAM_ADDR);
  208.      SEND_CHAR('R');
  209.      SEND_CHAR('E');
  210.      SEND_CHAR('S');
  211.      SEND_CHAR('U');
  212.      SEND_CHAR('L');
  213.      SEND_CHAR('T');
  214.      SEND_CHAR('=');
  215.      printDecDigit(tablicaWynikowa[0]);
  216.      printDecDigit(tablicaWynikowa[1]);
  217.      printDecDigit(tablicaWynikowa[2]);
  218.      printDecDigit(tablicaWynikowa[3]);
  219.      SEND_CHAR(' ');
  220.      SEND_CHAR(' ');
  221.      SEND_CHAR(' ');
  222.      SEND_CHAR('4');
  223.      SEND_CHAR(' ');
  224.      
  225.      
  226.      SEND_CMD(DD_RAM_ADDR2);
  227.      SEND_CHAR('R');
  228.      SEND_CHAR('E');
  229.      SEND_CHAR('C');
  230.      SEND_CHAR('O');
  231.      SEND_CHAR('R');
  232.      SEND_CHAR('D');
  233.      SEND_CHAR('=');
  234.      printDecDigit(tablicaBEST[0]);
  235.      printDecDigit(tablicaBEST[1]);
  236.      printDecDigit(tablicaBEST[2]);
  237.      printDecDigit(tablicaBEST[3]);
  238.      SEND_CHAR(' ');
  239.      SEND_CHAR(' ');
  240.      SEND_CHAR('R');
  241.      SEND_CHAR('E');
  242.      SEND_CHAR('S');
  243.      
  244.          for(;;){
  245.          if((BIT7&P4IN)==0){
  246.              CzyscTablica();
  247.              wynik = 0; trudnosc = 5; break;
  248.          }
  249.      }
  250. }
  251.      
  252.      void LevelUP(){
  253.  
  254.      SEND_CMD(DD_RAM_ADDR);
  255.      SEND_CHAR(' ');
  256.      SEND_CHAR(' ');
  257.      SEND_CHAR(' ');
  258.      SEND_CHAR(' ');
  259.      SEND_CHAR(' ');     SEND_CHAR(' ');
  260.      SEND_CHAR('L');
  261.      SEND_CHAR('E');
  262.      SEND_CHAR('v');
  263.      SEND_CHAR('E');
  264.      SEND_CHAR('L');
  265.      SEND_CHAR(' ');
  266.      SEND_CHAR(' ');
  267.      SEND_CHAR(' ');
  268.      SEND_CHAR(' ');
  269.      SEND_CHAR(' ');
  270.      
  271.      
  272.      SEND_CMD(DD_RAM_ADDR2);
  273.      SEND_CHAR(' ');
  274.      SEND_CHAR(' ');
  275.      SEND_CHAR(' ');
  276.      SEND_CHAR(' ');
  277.      SEND_CHAR(' ');
  278.      SEND_CHAR(' ');
  279.      SEND_CHAR(' ');     
  280.      SEND_CHAR(' ');
  281.      printDecDigit(level);
  282.      SEND_CHAR(' ');
  283.      SEND_CHAR(' ');
  284.      SEND_CHAR(' ');
  285.      SEND_CHAR(' ');
  286.      SEND_CHAR(' ');
  287.      SEND_CHAR(' ');
  288.      SEND_CHAR(' ');
  289.      for(int i = 30000; i > 0; i--)
  290.      for(int j = 60; j > 0; j--);
  291.      }
  292.          
  293.          
  294.    
  295.          
  296.  
  297.              
  298.              
  299.          
  300.          
  301.  
  302.      
  303.     void PrzepiszWynikNaTablica(){
  304.         wynik -= 1;
  305.         tablicaWynikowa[3]=wynik%10;
  306.         tablicaWynikowa[2]=wynik%100/10;
  307.         tablicaWynikowa[1]=wynik%1000/100;
  308.         tablicaWynikowa[0]=wynik%10000/1000;
  309.     }
  310.    
  311.  
  312.    
  313.     void ZmienPozycja(){
  314.         if((BIT4&P4IN)==0) polozenie = 'L';
  315.         if((BIT5&P4IN)==0) polozenie = 'R';
  316.  
  317.     }
  318.        
  319.        
  320.        
  321.            
  322.            
  323.        
  324.        
  325.  
  326.  
  327.  
  328. void ZainicjalizujADC(){
  329.     ADC12CTL0 = ADC12ON | REFON | SHT0_15; //Enabling ADC12 & reverence 1.5V generator & seleting ref. voltage
  330.     ADC12CTL1 = SHP | CSTARTADD_0; // Single conversion; result in ADC12MEM0
  331.     ADC12MCTL0 = INCH_0 | SREF_1; //ADC channel 0; internal 1.5V ref. voltage
  332.  
  333.     ADC12CTL0 |= ENC; // Enable conversions
  334.  
  335. }
  336.  
  337. void ZainicjalizujZegar(){
  338.     // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy czestotliwooa przez 2 (4 MHz)
  339.     BCSCTL1 |= XTS;                       // ACLK = LFXT1 = HF XTAL 8MHz
  340.     BCSCTL1 |= DIVA_1;                    // ACLK=8 MHz/2=4 MHz
  341.     BCSCTL2 |= SELM0 | SELM1;             // MCLK= LFTX1 =ACLK
  342.     TACTL = TASSEL_1 + MC_1 +ID_3;        // Wybieram ACLK, ACLK/8=500kHz,tryb Up
  343.     CCTL0 = CCIE;                         // w31czenie przerwan od CCR0
  344.     CCR0=50000;                           // podzielnik 50000: przerwanie co 100 ms
  345. }
  346.  
  347. void ZainicjalizujEkran(){
  348.     InitPortsLcd();                   // inicjalizacja portów LCD
  349.     InitLCD();                        // inicjalizacja LCD
  350.     clearDisplay();                   // czyszczenie wyowietlacza
  351. }
  352.  
  353. void CzyscFlage(){
  354.    
  355.     do{
  356.         IFG1 &= ~OFIFG;                     // Czyszczenie flgi OSCFault
  357.         for (i = 0xFF; i > 0; i--);         // odczekanie
  358.     }
  359.     while ((IFG1 & OFIFG) == OFIFG);    // dopóki OSCFault jest ci1gle ustawiona
  360. }
  361.  
  362. void Clock(void){
  363.  
  364.     ZmienPozycja();
  365.    
  366.     if(CzyGameOver()){
  367.         PrzepiszWynikNaTablica();
  368.         GameOver();
  369.     }
  370.     WyrzucTorNaEkran();
  371.  
  372.     if(licznik%trudnosc == 0){
  373.         PrzesunTor();
  374.         LiczWynik();
  375.         Generuj();
  376.         licznik = 0;   
  377.         if(wynik == 5){
  378.         trudnosc = trudnosc - 1; wynik++; CzyscTablica();
  379.         level = 2;
  380.         LevelUP();
  381.         }
  382.         if(wynik == 15){
  383.         trudnosc = trudnosc - 1; wynik++; CzyscTablica();
  384.         level = 3;
  385.         LevelUP();
  386.         }
  387.         if(wynik == 30){
  388.         trudnosc = trudnosc - 1; wynik++; CzyscTablica();
  389.         level = 4;
  390.         LevelUP();
  391.         }
  392.         if(wynik == 50){
  393.         trudnosc = trudnosc - 1; wynik++; CzyscTablica();
  394.         level = 5;
  395.         LevelUP();
  396.         }
  397.     }
  398.    
  399.  
  400. }
  401.  
  402.  
  403.  
  404.  
  405. //void Clock(void);
  406.  
  407. //----------------- main program -------------------
  408. void main( void )
  409. {
  410.  
  411.     WDTCTL=WDTPW + WDTHOLD;    
  412.     ZainicjalizujEkran();
  413.     defineChars();
  414.     ZainicjalizujZegar();
  415.     ZainicjalizujADC();
  416.     CzyscFlage();
  417.     _EINT();                              // w31czenie przerwan
  418.  
  419. MenuStart();
  420. LevelUP();
  421.     for (;;){
  422.         _BIS_SR(LPM3_bits);// przejscie do trybu LPM3
  423.         Clock();
  424.     }
  425. }
  426.  
  427.  
  428.  
  429. // procedura obs3ugi przerwania od TimerA
  430.  
  431. #pragma vector=TIMERA0_VECTOR
  432. __interrupt void Timer_A (void)
  433. {
  434.     ++licznik;
  435.     _BIC_SR_IRQ(LPM3_bits);             // wyjocie z trybu LPM3
  436. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement