Advertisement
Guest User

Untitled

a guest
Mar 24th, 2019
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.04 KB | None | 0 0
  1. #include <targets\AT91SAM7.h>
  2. #include "pcf8833u8_lcd.h"//podłączenie biblioteki od lcd
  3.  
  4. void czas(int ms){ //funkcja opóźniająca
  5.   volatile int i, j;
  6.   for(i=0; i<=ms; i++){
  7.     for(j=0; j<=3000; j++){
  8.        __asm__("NOP");
  9.     }
  10.   }
  11. }
  12. void numery(){ //funkcja z umieszczeniem liczb na wyświetlaczu
  13.   LCDPutStr("1",23,23,LARGE,WHITE,BLACK);
  14.   LCDPutStr("2",23,56,LARGE,WHITE,BLACK);
  15.   LCDPutStr("3",23,89,LARGE,WHITE,BLACK);
  16.   LCDPutStr("4",53,23,LARGE,WHITE,BLACK);
  17.   LCDPutStr("5",53,56,LARGE,WHITE,BLACK);
  18.   LCDPutStr("6",53,89,LARGE,WHITE,BLACK);
  19.   LCDPutStr("7",83,23,LARGE,WHITE,BLACK);
  20.   LCDPutStr("8",83,56,LARGE,WHITE,BLACK);
  21.   LCDPutStr("9",83,89,LARGE,WHITE,BLACK);
  22. }
  23.  
  24. int main(void){
  25. /*PMC_PCER=1<<3;//włączony port B i podłączamy do zegara
  26. PIOB_PER=1<<20|1<<24;//linia 20 portu B, 24 linia portu - przycisk
  27. PIOB_OER=1<<20;//linia 20 to wyjście
  28. PIOB_SODR=1<<20;//1 na wyjście, 1 na CODR da 0 na wyjściu
  29. //^ wystarczyło by zaświecił się wyświetlacz
  30. PIOB_ODR=1<<24;//Output disable register, 24 linia jako wejście
  31. PIOB_OWER=1<<20;
  32. //PIOB_ODSR=;*/
  33.  
  34. /*while(1)
  35. {
  36.   if((PIOB_PDSR&(1<<24))==0)//Pin date state register i sprawdzenie wciskania przycisku na 24 linii
  37.   {
  38.   PIOB_CODR=1<<20;//Clear output data register - gaśnie lcd
  39.   }
  40.   if((PIOB_PDSR & (1<<25))==0){
  41.   PIOB_SODR=1<<20;//Set output data register - świeci lcd
  42. }
  43. }*/
  44. PMC_PCER = 1 << 2;              //wlaczamy zegar systemowty do peryferium
  45.   PIOA_PER = 1 << 7 | 1 << 8 | 1 << 9 | 1 << 14 | 1 << 15; //obsługa joysticku - włączenie
  46.   PIOA_ODR = 1 << 7 | 1 << 8 | 1 << 9 | 1 << 14 | 1 << 15; //przyciski joysticku jako wejście
  47.  
  48.   char test[1];//najniższa wartość na ekranie
  49.   volatile int x0 = 60, y0 = 60, pozycja = 10, numer = 5; //zmienne odpowiedzialne za rozmiar kółka do wyboru cyfr, zmienną wykorzystywaną do oczytu
  50.   //i wartość startową wyboru
  51.   InitLCD(); //inicjalizacja LCD
  52.   SetContrast(5); //ustawienie kontrastu
  53.   Backlight(BL_ON);
  54.   LCDClearScreen(); //wyczyszczenie ekranu ze śmieci
  55.   LCDSetCircle(x0, y0, 10, WHITE); //pokazanie kółka na akranie
  56.  
  57.   while(1){
  58.   numery();
  59.   if((PIOA_PDSR &(1<<7))==0){            //lewo
  60.     LCDSetCircle(x0, y0, 10, BLACK);
  61.     if(y0 > 33){//jeżeli koło jest dalej niż maksymalnie w lewo, to pozycja koła zmniejsza się o 33px(wartość zależna od ustawienia liczb w funkcji numery)
  62.       y0 -= 33;
  63.       numer -= 1; //numery w lewo zmniejszają się o jeden
  64.       }
  65.     LCDSetCircle(x0, y0, 10, WHITE);
  66.     while((PIOA_PDSR &(1<<7))==0){};
  67.   }
  68.   if((PIOA_PDSR &(1<<8))==0){            //dol
  69.     LCDSetCircle(x0, y0, 10, BLACK);
  70.     if(x0 < 90){//jeżeli koło jest dalej niż maksymalnie w dół, to pozycja koła zwiększa się o 30px(wartość zależna od ustawienia liczb w funkcji numery)
  71.       x0 += 30;
  72.       numer += 3; //numery w lewo zmniejszają się o trzy
  73.       }
  74.     LCDSetCircle(x0, y0, 10, WHITE);
  75.     while((PIOA_PDSR &(1<<8))==0){};
  76.   }
  77.   if((PIOA_PDSR &(1<<9))==0){            //gora
  78.     LCDSetCircle(x0, y0, 10, BLACK);
  79.     if(x0 > 33){
  80.       x0 -= 30;
  81.       numer -= 3;
  82.       }
  83.     LCDSetCircle(x0, y0, 10, WHITE);
  84.     while((PIOA_PDSR &(1<<9))==0){};
  85.   }
  86.   if((PIOA_PDSR &(1<<14))==0){            //prawo
  87.     LCDSetCircle(x0, y0, 10, BLACK);
  88.     if(y0 < 90){
  89.       y0 += 33;
  90.       numer += 1;
  91.       }
  92.     LCDSetCircle(x0, y0, 10, WHITE);
  93.     while((PIOA_PDSR &(1<<14))==0){};
  94.   }
  95.   if((PIOA_PDSR &(1<<15))==0){            //srodek
  96.     if(pozycja<120){//zapełnia aż do wyczerpania miejsca na liczby
  97.       itoa (numer,test,10);//funkcja c++ do zamiany numeru na text(test) w notacji dziesiętnej: 10
  98.       LCDPutStr(test,110,pozycja,LARGE,WHITE,BLACK);//wstawienie tesktu na ekran
  99.       pozycja += 10;
  100.     }else{
  101.       LCDSetRect(110,10,130,130,FILL,BLACK);//szybkie zastąpienie miejsca na wyświetlanie na czarny prostokąt by móc wpisywac liczby dalej
  102.       pozycja = 10;
  103.       itoa (numer,test,10);
  104.       LCDPutStr(test,110,pozycja,LARGE,WHITE,BLACK);
  105.       pozycja += 10;
  106.     }
  107.     while((PIOA_PDSR &(1<<15))==0){}
  108.   }
  109.  
  110.   }
  111.  
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement