Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<msp430x14x.h>
- #include "lcd.h"
- #include "portyLcd.h"
- //---------------- zmienne globalne -------------
- unsigned int i=0;
- unsigned int sekundy=0;
- unsigned int licznik=0;
- int tablica[2][16];
- char polozenie = 'R';
- int wynik = 0;
- int tablicaWynikowa[4] = {0,0,0,0};
- int tablicaBEST[4] = {0,0,0,0};
- int FlagaPozycji = 1;
- int best = 0;
- int trudnosc = 4;
- #define POS 0x00
- void defineChars() {
- //statek
- SEND_CMD(0x40); SEND_CHAR(0x01); SEND_CMD(0x41); SEND_CHAR(0x03); SEND_CMD(0x42); SEND_CHAR(0x07);
- SEND_CMD(0x43); SEND_CHAR(0x1C); SEND_CMD(0x44); SEND_CHAR(0x1C); SEND_CMD(0x45); SEND_CHAR(0x07);
- SEND_CMD(0x46); SEND_CHAR(0x03); SEND_CMD(0x47); SEND_CHAR(0x01);
- // przeszkoda
- SEND_CMD(0x48); SEND_CHAR(0x00); SEND_CMD(0x49); SEND_CHAR(0x04); SEND_CMD(0x4A); SEND_CHAR(0x0E);
- SEND_CMD(0x4B); SEND_CHAR(0x1F); SEND_CMD(0x4C); SEND_CHAR(0x1F); SEND_CMD(0x4D); SEND_CHAR(0x0E);
- SEND_CMD(0x4E); SEND_CHAR(0x04); SEND_CMD(0x4F); SEND_CHAR(0x00);
- }
- int _random(void){
- ADC12CTL0 |= ADC12SC; //starting single ADC conversion
- while(ADC12CTL1 & ADC12BUSY); //wait unill conversion ends
- return ADC12MEM0 % 256;
- }
- void RuszLewo(){
- polozenie = 'L';
- }
- void RuszPrawo(){
- polozenie = 'R';
- }
- void Generuj(){
- static int zmienna, ile;
- zmienna=!zmienna;
- if(zmienna){
- int los = _random()%2;
- int los2 = ile++ % 4 == 3 ? 0 : _random()%10;
- tablica[los][0] = los2 && los2 > 3 ? 1 : 0;
- tablica[!los][0] = 0;
- }
- else{
- tablica[0][0] = tablica[1][0] = 0;
- }
- }
- void PrzesunTor(){
- for(int i=15; i>=0; i--){
- if(tablica[0][i]==1){
- if(i == 15)
- tablica[0][i] = 0;
- else{
- tablica[0][i+1]=1;
- tablica[0][i]=0;
- }
- }
- if(tablica[1][i]==1){
- if(i == 15)
- tablica[1][i] = 0;
- else{
- tablica[1][i+1]=1;
- tablica[1][i]=0;
- }
- }
- }
- }
- void WyswietlStatek(){
- if(polozenie == 'L'){
- SEND_CMD(DD_RAM_ADDR2);
- int i = 15;
- while(i--)
- SEND_CMD(CUR_SHIFT_RIGHT);
- SEND_CHAR(0x00);
- }
- if(polozenie == 'R'){
- SEND_CMD(DD_RAM_ADDR);
- int i = 15;
- while(i--)
- SEND_CMD(CUR_SHIFT_RIGHT);
- SEND_CHAR(0x00);
- }
- }
- void Bestuj(){
- if(wynik > best){
- best = wynik;
- tablicaBEST[3]=tablicaWynikowa[3];
- tablicaBEST[2]=tablicaWynikowa[2];
- tablicaBEST[1]=tablicaWynikowa[1];
- tablicaBEST[0]=tablicaWynikowa[0];
- }
- }
- void WyrzucTorNaEkran(){
- SEND_CMD(DD_RAM_ADDR);
- for (int i = 0; i <= 16; i++)
- SEND_CHAR(tablica[0][i] ? 0x01 : ' ');
- SEND_CMD(DD_RAM_ADDR2);
- for (int i = 0; i <= 16; i++)
- SEND_CHAR(tablica[1][i] ? 0x01 : ' ');
- WyswietlStatek();
- }
- void LiczWynik(){
- if(tablica[0][15] == 1 || tablica[1][15])
- wynik++;
- }
- int CzyGameOver(){
- if(tablica[0][15] == 1 && polozenie == 'R')
- return 1;
- if(tablica[1][15] == 1 && polozenie == 'L')
- return 1;
- return 0;
- }
- void MenuStart(){
- SEND_CMD(DD_RAM_ADDR);
- SEND_CHAR(' ');
- SEND_CHAR(' ');
- SEND_CHAR('S');
- SEND_CHAR('A');
- SEND_CHAR('M');
- SEND_CHAR('O');
- SEND_CHAR('C');
- SEND_CHAR('H');
- SEND_CHAR('O');
- SEND_CHAR('D');
- SEND_CHAR('Z');
- SEND_CHAR('I');
- SEND_CHAR('K');
- SEND_CHAR('I');
- SEND_CMD(DD_RAM_ADDR2);
- SEND_CHAR('P');
- SEND_CHAR('R');
- SEND_CHAR('E');
- SEND_CHAR('S');
- SEND_CHAR('S');
- SEND_CHAR(' ');
- SEND_CHAR('3');
- SEND_CHAR(' ');
- SEND_CHAR('T');
- SEND_CHAR('O');
- SEND_CHAR(' ');
- SEND_CHAR('S');
- SEND_CHAR('T');
- SEND_CHAR('A');
- SEND_CHAR('R');
- SEND_CHAR('T');
- for( ;; ){
- if((BIT6&P4IN)==0)
- break;
- }
- }
- void GameOver(){
- Bestuj();
- SEND_CMD(DD_RAM_ADDR);
- SEND_CHAR('R');
- SEND_CHAR('E');
- SEND_CHAR('S');
- SEND_CHAR('U');
- SEND_CHAR('L');
- SEND_CHAR('T');
- SEND_CHAR('=');
- printDecDigit(tablicaWynikowa[0]);
- printDecDigit(tablicaWynikowa[1]);
- printDecDigit(tablicaWynikowa[2]);
- printDecDigit(tablicaWynikowa[3]);
- SEND_CHAR(' ');
- SEND_CHAR(' ');
- SEND_CHAR(' ');
- SEND_CHAR('4');
- SEND_CHAR(' ');
- SEND_CMD(DD_RAM_ADDR2);
- SEND_CHAR('R');
- SEND_CHAR('E');
- SEND_CHAR('C');
- SEND_CHAR('O');
- SEND_CHAR('R');
- SEND_CHAR('D');
- SEND_CHAR('=');
- printDecDigit(tablicaBEST[0]);
- printDecDigit(tablicaBEST[1]);
- printDecDigit(tablicaBEST[2]);
- printDecDigit(tablicaBEST[3]);
- SEND_CHAR(' ');
- SEND_CHAR(' ');
- SEND_CHAR('R');
- SEND_CHAR('E');
- SEND_CHAR('S');
- for(;;){
- if((BIT7&P4IN)==0){
- for(int i = 16; i > 0; i--){
- tablica[0][i] = 0;
- tablica[1][i] = 0;
- }wynik = 0; trudnosc = 4; break;
- }
- }
- }
- void PrzepiszWynikNaTablica(){
- wynik -= 1;
- tablicaWynikowa[3]=wynik%10;
- tablicaWynikowa[2]=wynik%100/10;
- tablicaWynikowa[1]=wynik%1000/100;
- tablicaWynikowa[0]=wynik%10000/1000;
- }
- void ZmienPozycja(){
- if((BIT4&P4IN)==0) polozenie = 'L';
- if((BIT5&P4IN)==0) polozenie = 'R';
- }
- void ZainicjalizujADC(){
- ADC12CTL0 = ADC12ON | REFON | SHT0_15; //Enabling ADC12 & reverence 1.5V generator & seleting ref. voltage
- ADC12CTL1 = SHP | CSTARTADD_0; // Single conversion; result in ADC12MEM0
- ADC12MCTL0 = INCH_0 | SREF_1; //ADC channel 0; internal 1.5V ref. voltage
- ADC12CTL0 |= ENC; // Enable conversions
- }
- void ZainicjalizujZegar(){
- // Basic Clock Module ustawiamy na ACLK(zegar 8 MHz ) i dzielimy czestotliwooa przez 2 (4 MHz)
- BCSCTL1 |= XTS; // ACLK = LFXT1 = HF XTAL 8MHz
- BCSCTL1 |= DIVA_1; // ACLK=8 MHz/2=4 MHz
- BCSCTL2 |= SELM0 | SELM1; // MCLK= LFTX1 =ACLK
- TACTL = TASSEL_1 + MC_1 +ID_3; // Wybieram ACLK, ACLK/8=500kHz,tryb Up
- CCTL0 = CCIE; // w31czenie przerwan od CCR0
- CCR0=50000; // podzielnik 50000: przerwanie co 100 ms
- }
- void ZainicjalizujEkran(){
- InitPortsLcd(); // inicjalizacja portów LCD
- InitLCD(); // inicjalizacja LCD
- clearDisplay(); // czyszczenie wyowietlacza
- }
- void CzyscFlage(){
- do{
- IFG1 &= ~OFIFG; // Czyszczenie flgi OSCFault
- for (i = 0xFF; i > 0; i--); // odczekanie
- }
- while ((IFG1 & OFIFG) == OFIFG); // dopóki OSCFault jest ci1gle ustawiona
- }
- void Clock(void){
- ZmienPozycja();
- if(CzyGameOver()){
- PrzepiszWynikNaTablica();
- GameOver();
- }
- WyrzucTorNaEkran();
- if(licznik%trudnosc == 0){
- PrzesunTor();
- LiczWynik();
- Generuj();
- licznik = 0;
- if(wynik == 10){
- trudnosc = trudnosc - 1; wynik++; }
- if(wynik == 20){
- trudnosc = trudnosc - 1; wynik++; }
- if(wynik == 40){
- trudnosc = trudnosc - 1; wynik++; }
- }
- }
- //void Clock(void);
- //----------------- main program -------------------
- void main( void )
- {
- WDTCTL=WDTPW + WDTHOLD;
- ZainicjalizujEkran();
- defineChars();
- ZainicjalizujZegar();
- ZainicjalizujADC();
- CzyscFlage();
- _EINT(); // w31czenie przerwan
- MenuStart();
- for (;;){
- _BIS_SR(LPM3_bits);// przejscie do trybu LPM3
- Clock();
- }
- }
- // procedura obs3ugi przerwania od TimerA
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A (void)
- {
- ++licznik;
- _BIC_SR_IRQ(LPM3_bits); // wyjocie z trybu LPM3
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement