Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <targets\AT91SAM7.h>
- #include "pcf8833u8_lcd.h"//podłączenie biblioteki od lcd
- void czas(int ms){ //funkcja opóźniająca
- volatile int i, j;
- for(i=0; i<=ms; i++){
- for(j=0; j<=3000; j++){
- __asm__("NOP");
- }
- }
- }
- void numery(){ //funkcja z umieszczeniem liczb na wyświetlaczu
- LCDPutStr("1",23,23,LARGE,WHITE,BLACK);
- LCDPutStr("2",23,56,LARGE,WHITE,BLACK);
- LCDPutStr("3",23,89,LARGE,WHITE,BLACK);
- LCDPutStr("4",53,23,LARGE,WHITE,BLACK);
- LCDPutStr("5",53,56,LARGE,WHITE,BLACK);
- LCDPutStr("6",53,89,LARGE,WHITE,BLACK);
- LCDPutStr("7",83,23,LARGE,WHITE,BLACK);
- LCDPutStr("8",83,56,LARGE,WHITE,BLACK);
- LCDPutStr("9",83,89,LARGE,WHITE,BLACK);
- }
- int main(void){
- /*PMC_PCER=1<<3;//włączony port B i podłączamy do zegara
- PIOB_PER=1<<20|1<<24;//linia 20 portu B, 24 linia portu - przycisk
- PIOB_OER=1<<20;//linia 20 to wyjście
- PIOB_SODR=1<<20;//1 na wyjście, 1 na CODR da 0 na wyjściu
- //^ wystarczyło by zaświecił się wyświetlacz
- PIOB_ODR=1<<24;//Output disable register, 24 linia jako wejście
- PIOB_OWER=1<<20;
- //PIOB_ODSR=;*/
- /*while(1)
- {
- if((PIOB_PDSR&(1<<24))==0)//Pin date state register i sprawdzenie wciskania przycisku na 24 linii
- {
- PIOB_CODR=1<<20;//Clear output data register - gaśnie lcd
- }
- if((PIOB_PDSR & (1<<25))==0){
- PIOB_SODR=1<<20;//Set output data register - świeci lcd
- }
- }*/
- PMC_PCER = 1 << 2; //wlaczamy zegar systemowty do peryferium
- PIOA_PER = 1 << 7 | 1 << 8 | 1 << 9 | 1 << 14 | 1 << 15; //obsługa joysticku - włączenie
- PIOA_ODR = 1 << 7 | 1 << 8 | 1 << 9 | 1 << 14 | 1 << 15; //przyciski joysticku jako wejście
- char test[1];//najniższa wartość na ekranie
- volatile int x0 = 60, y0 = 60, pozycja = 10, numer = 5; //zmienne odpowiedzialne za rozmiar kółka do wyboru cyfr, zmienną wykorzystywaną do oczytu
- //i wartość startową wyboru
- InitLCD(); //inicjalizacja LCD
- SetContrast(5); //ustawienie kontrastu
- Backlight(BL_ON);
- LCDClearScreen(); //wyczyszczenie ekranu ze śmieci
- LCDSetCircle(x0, y0, 10, WHITE); //pokazanie kółka na akranie
- while(1){
- numery();
- if((PIOA_PDSR &(1<<7))==0){ //lewo
- LCDSetCircle(x0, y0, 10, BLACK);
- 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)
- y0 -= 33;
- numer -= 1; //numery w lewo zmniejszają się o jeden
- }
- LCDSetCircle(x0, y0, 10, WHITE);
- while((PIOA_PDSR &(1<<7))==0){};
- }
- if((PIOA_PDSR &(1<<8))==0){ //dol
- LCDSetCircle(x0, y0, 10, BLACK);
- 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)
- x0 += 30;
- numer += 3; //numery w lewo zmniejszają się o trzy
- }
- LCDSetCircle(x0, y0, 10, WHITE);
- while((PIOA_PDSR &(1<<8))==0){};
- }
- if((PIOA_PDSR &(1<<9))==0){ //gora
- LCDSetCircle(x0, y0, 10, BLACK);
- if(x0 > 33){
- x0 -= 30;
- numer -= 3;
- }
- LCDSetCircle(x0, y0, 10, WHITE);
- while((PIOA_PDSR &(1<<9))==0){};
- }
- if((PIOA_PDSR &(1<<14))==0){ //prawo
- LCDSetCircle(x0, y0, 10, BLACK);
- if(y0 < 90){
- y0 += 33;
- numer += 1;
- }
- LCDSetCircle(x0, y0, 10, WHITE);
- while((PIOA_PDSR &(1<<14))==0){};
- }
- if((PIOA_PDSR &(1<<15))==0){ //srodek
- if(pozycja<120){//zapełnia aż do wyczerpania miejsca na liczby
- itoa (numer,test,10);//funkcja c++ do zamiany numeru na text(test) w notacji dziesiętnej: 10
- LCDPutStr(test,110,pozycja,LARGE,WHITE,BLACK);//wstawienie tesktu na ekran
- pozycja += 10;
- }else{
- LCDSetRect(110,10,130,130,FILL,BLACK);//szybkie zastąpienie miejsca na wyświetlanie na czarny prostokąt by móc wpisywac liczby dalej
- pozycja = 10;
- itoa (numer,test,10);
- LCDPutStr(test,110,pozycja,LARGE,WHITE,BLACK);
- pozycja += 10;
- }
- while((PIOA_PDSR &(1<<15))==0){}
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement