Elektronika.lt
 2024 m. balandžio 18 d. Projektas | Reklama | Žinokite | Klausimai | Prisidėkite | Atsiliepimai | Kontaktai
Paieška portale
EN Facebook RSS

 Kas naujo  Katalogas  Parduotuvės  Forumas  Tinklaraščiai
 Pirmas puslapisSąrašas
 Forumas / + pokalbiai
 - Paieška forume
 - D.U.K. / Forumo taisyklės
 - Narių sąrašas
 - Registruotis
 - Prisijungti

Elektronika.lt portalo forumas

Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo. Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.

Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius, kurie nesilaiko forumo taisyklių. Pastebėjus nusižengimus, prašome pranešti.

Dabar yra 2024 04 18, 16:41. Visos datos yra GMT + 2 valandos.
 Forumas » Programavimas » LCD indikatoriaus meniu valdymas mygtukais
Jūs negalite rašyti naujų pranešimų į šį forumą
Jūs negalite atsakinėti į pranešimus šiame forume
Jūs negalite redaguoti savo pranešimų šiame forume
Jūs negalite ištrinti savo pranešimų šiame forume
Jūs negalite dalyvauti apklausose šiame forume
 
  
Puslapis 11
Pradėti naują temą  Atsakyti į pranešimą Rodyti ankstesnį pranešimą :: Rodyti kitą pranešimą 
 LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 20, 04:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Electric-Blue
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Gal galite kas pažiūrėti, kas galėtų būti blogai programoje. Čia padaryta kaip LCD meniu: yra du mygtukai. Jeigu paspaudžiamas vienas - ekranėlyje užrašomas žodis, jei TAS PATS mygtukas paspaudžiamas antrą kartą - parašomas kitas žodis, o jei paspaudžiamas kitas mygtukas, tai parašomas prieš tai buvęs žodis (na, žodžiu, LCD meniu su dviem mygtukais). Rašyta C kalba su mikroC PRO for PIC kompiliatoriumi. Dėkoju.


Kodas:
#define TXT_CNT  6
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
int SP = 0;
char txt[][16]={"text0", "text1", "text2", "text3", "text4", "text5"};


int buttonPressed()
{
if (Button(&PORTA, 0, 1, 1)) {               // Detect logical one
     return -1;
    }

     if (Button(&PORTA, 1, 1, 1))  {          // Detect logical one
     return 1;
        }

        return 0;
}

int main(){
          ANSEL  = 0;                 // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                    // Disable comparators
  C2ON_bit = 0;
      TRISA0_bit = 1;             // set RB0 pin as input
      TRISA1_bit = 1;            // set RB0 pin as input

  Lcd_Init();                        // Initialize LCD

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off





        while(1){
                if(SP < 0)
                        SP = 0;

                if(SP >= TXT_CNT)
                        SP = TXT_CNT - 1;

                Lcd_Out(1,1,txt[SP]);

                SP += buttonPressed();

        }

}
 Re: LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 20, 11:46 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Ingo
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Electric-Blue rašo:
Gal galite kas pažiūrėti, kas galėtų būti blogai programoje. Čia padaryta kaip LCD meniu: yra du mygtukai. Jeigu paspaudžiamas vienas - ekranėlyje užrašomas žodis, jei TAS PATS mygtukas paspaudžiamas antrą kartą - parašomas kitas žodis, o jei paspaudžiamas kitas mygtukas, tai parašomas prieš tai buvęs žodis (na, žodžiu, LCD meniu su dviem mygtukais). Rašyta C kalba su mikroC PRO for PIC kompiliatoriumi. Dėkoju.


Kodas:
#define TXT_CNT  6
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
int SP = 0;  // int mikroC deklaruojamas kaip dvieju baitu kint. cia reiktu rasyt signed char
//turetum rasyt char txt[6][16]=
char txt[][16]={"text0", "text1", "text2", "text3", "text4", "text5"};


int buttonPressed() // cia vel nurodai int?? ,bet visvien sita funkcija man nepatinka
{
if (Button(&PORTA, 0, 1, 1)) { // Paprastai paspaudus mygtuka paduodamas 0,nes input pinas dazniausiai per rezistoriu jungiamas prie pliuso, o //nuspaudus mygtuka paduodamas nulis.reiktu rasyt if (Button(&PORTA, 0, 1, 0))
     return -1;
    }

     if (Button(&PORTA, 1, 1, 1))  {    //Cia taspats
     return 1;
        }

        return 0;
}

int main(){ // main funkcija mikroC nurodoma taip: void main()

//nenurodei mikrokontrolerio tipo todel ar geri pradiniai nustatymai negaliu pasakyt
          ANSEL  = 0;                 // Configure AN pins as digital I/O
  ANSELH = 0;
  C1ON_bit = 0;                    // Disable comparators
  C2ON_bit = 0;
      TRISA0_bit = 1;             // set RB0 pin as input
      TRISA1_bit = 1;            // set RB0 pin as input

  Lcd_Init();                        // Initialize LCD

  Lcd_Cmd(_LCD_CLEAR);               // Clear display
  Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off





        while(1){
                if(SP < 0)
                        SP = 0;

                if(SP >= TXT_CNT)
                        SP = TXT_CNT - 1;

                Lcd_Out(1,1,txt[SP]);

                SP += buttonPressed();

        }

}


Visa koda as perrasyciau taip:
Kodas:
#define TXT_CNT  6
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
signed char SP = 0;

char txt[6][16]={"text0", "text1", "text2", "text3", "text4", "text5"};

buttonPressed()
{
if (Button(&PORTA, 0, 1, 0)) {

    SP--;
    delay_ms(300);
    }

     if (Button(&PORTA, 1, 1, 0))  {
     SP++;
     delay_ms(300);
        }
}

void main(){             


ANSEL  = 0;                 // Configure AN pins as digital I/O
ANSELH = 0;
C1ON_bit = 0;                    // Disable comparators
C2ON_bit = 0;
TRISA0_bit = 1;             // set RB0 pin as input
TRISA1_bit = 1;            // set RB0 pin as input

Lcd_Init();                        // Initialize LCD
Lcd_Cmd(_LCD_CLEAR);               // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

        while(1){
                if(SP < 0){SP = 0;}
                if(SP >= TXT_CNT){SP = TXT_CNT-1;}
                Lcd_Out(1,1,txt[SP]);
                buttonPressed();
                }

}
 LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 20, 16:47 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Electric-Blue
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Naudoju PIC16F887 mikrovaldikli. Pabandziau programa, sukompiliuoja be klaidu, bet visvien neveikia - i LCD nieko neisveda, nors ir spaudinejant mygtukus..
 LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 20, 18:12 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Ingo
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Electric-Blue rašo:
Naudoju PIC16F887 mikrovaldikli. Pabandziau programa, sukompiliuoja be klaidu, bet visvien neveikia - i LCD nieko neisveda, nors ir spaudinejant mygtukus..


Pabandyk tad mano koda, cia masyva txt[6][13] pakeiciau, nes su 16 elementu ten kazkokia nesamone su adresavimu gaunasi

Kodas:
#define TXT_CNT  6
// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections
signed char SP = 0;

unsigned char txt[6][13]={"text0", "text1", "text2", "text3", "text4", "text5"};

void buttonPressed()
{
if (Button(&PORTA, 0, 1, 0)) {

    SP--;
    delay_ms(300);
    }

     if (Button(&PORTA, 1, 1, 0))  {
     SP++;
     delay_ms(300);
        }
}

void main(){

TRISA = 0b00000011;
TRISB = 0b00000000;
TRISC = 0b00000000;
TRISD = 0b00000000;
TRISE = 0;

CM1CON0 = 0;
CM2CON0 = 0;
ADCON0  = 0;
ADCON1  = 0;
ANSEL  = 0;
ANSELH = 0;

Lcd_Init();                        // Initialize LCD
Lcd_Cmd(_LCD_CLEAR);               // Clear display
Lcd_Cmd(_LCD_CURSOR_OFF);          // Cursor off

        while(1){
                if(SP < 0){SP = 0;}
                if(SP >= TXT_CNT){SP = TXT_CNT-1;}
                Lcd_Out(1,1,txt[SP]);
                buttonPressed();
                }

}
 LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 20, 20:24 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Electric-Blue
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Aciu labai! Veikia dabar kaip turetu Surprised
Tiesa, liko keletas neaiskumu:

Ka reiskia uzrasymas txt[6][13]

Kokia itaka siuo atveju turi velinimas delay_ms(300) ir kas darosi , jei pakeiciama jo reiksme daugiau ar maziau.

Kaip geriausia butu padaryti, jei noreciau kiekvienam uzrasui "text0", "text1", "text2", "text3", "text4", "text5" priskirti tam tikra paprograme (pavyzdziui, paspaudus mygtuka, LCD displejuje pasirodo tekstas "text1" ir is karto isijungia LED sviesos diodas, paspaudus ir pasirinkus kita meniu uzrasa, diodas issijungia ir ijungia, pavyzdziui, kita dioda). Dekoju labai.
 LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 20, 20:59 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Ingo
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą Siųsti el. laišką Apsilankyti vartotojo tinklapyje
Electric-Blue rašo:
Aciu labai! Veikia dabar kaip turetu Surprised
Tiesa, liko keletas neaiskumu:

Ka reiskia uzrasymas txt[6][13]

Kokia itaka siuo atveju turi velinimas delay_ms(300) ir kas darosi , jei pakeiciama jo reiksme daugiau ar maziau.

Kaip geriausia butu padaryti, jei noreciau kiekvienam uzrasui "text0", "text1", "text2", "text3", "text4", "text5" priskirti tam tikra paprograme (pavyzdziui, paspaudus mygtuka, LCD displejuje pasirodo tekstas "text1" ir is karto isijungia LED sviesos diodas, paspaudus ir pasirinkus kita meniu uzrasa, diodas issijungia ir ijungia, pavyzdziui, kita dioda). Dekoju labai.


txt[6][13] reiskia kad tai yra masyvas kuriame yra 6 zodziai(string) ir maksimali to zodzio raidziu skaicius yra 13

delay_ms(300) jeigu jo nebus tai tai tu nespesi atleisti mygtuko ir visas menu prasisuks keleta kartu.

Kad vykdyti kazkokia tai paprograme cia gali buti ivairiu varijantu, ziurint ka tu tame meniu nori daryti. Cia gal meniu reiktu susieti su kintamuoju SP Gali naudoti if swtch arb while
pvz gali iterpt kazka panasaus:

Kodas:
switch (SP){
                 case 1: { Lcd_Out(1,1,txt[0]);PORTB=0; PORTB.F0 = 1; while(SP==1){ paprograme1();};  }
                 case 2: { Lcd_Out(1,1,txt[1]);PORTB=0; PORTB.F1 = 1 ;while(SP==2){paprograme2(); };}
                  }


tik paskui nepamirsk isejimo is tos paprogrames pvz if(PORTA.F0==0) {SP=5; ... };
 LCD indikatoriaus meniu valdymas mygtukais
PranešimasParašytas: 2011 02 24, 03:16 Pranešti apie taisyklių pažeidimą Atsakyti su citata
Electric-Blue
Užkietėjęs dalyvis
Užkietėjęs dalyvis
Peržiūrėti vartotojo aprašymą Siųsti asmeninį pranešimą
Ar mazdaug kazkaip taip reiketu rasyti:

Kodas:
#define TXT_CNT  3
// LCD module connections
sbit LCD_RS at RC7_bit;
sbit LCD_EN at RC6_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;

sbit LCD_RS_Direction at TRISC7_bit;
sbit LCD_EN_Direction at TRISC6_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
// End LCD module connections
signed char SP = 0;

unsigned char txt[3][13]={"AAAAAAAAAAAAA", "BBBBBBBBBBBB", "CCCCCCCCCCC"};    //trys skirtingi meniu uzrasai

void buttonPressed()                                                 
{
if (Button(&PORTB, 2, 1, 1)) {

    SP--;
    Delay_ms(300);
    }

     if (Button(&PORTC, 5, 1, 1))  {
     SP++;
     Delay_ms(300);
        }
}

void main(){

TRISA = 0b00000000;
TRISB = 0b00000100;
TRISC = 0b00111000;
TRISD = 0b00000000;
TRISE = 0;

CM1CON0 = 0;
CM2CON0 = 0;
ADCON0  = 0;
ADCON1  = 0;
ANSEL  = 0;
ANSELH = 0;

Lcd_Init();                      // LCD display initialization
    Lcd_Cmd(_LCD_CURSOR_OFF);        // LCD command (cursor off)
    Lcd_Cmd(_LCD_CLEAR);             // LCD command


   while(1){
                if(SP < 0){SP = 0;}
                if(SP >= TXT_CNT){SP = TXT_CNT-1;}
                Lcd_Out(2,1,txt[SP]);
                buttonPressed();
                }
                               
}


Kaip zinoti, kurioje programos vietoje rasyti sita dali?

Kodas:
switch (SP){
                 case 1: { PORTC.F4=1; while(SP==1){ paprograme1() ;}; }   //Esant AAAAAAAAAAAA uzrasui, paspaudus prie PORTC 4 prijungta mygtuka (paduodamas loginis 1) einama i paprograme1()
                 case 2: {PORTC.F4=1; while(SP==2){ paprograme2() ;};  //Esant BBBBBBBBBBB uzrasui, paspaudus prie PORTC 4 prijungta mygtuka (paduodamas loginis 1) einama i paprograme2()
                  }


Kaip zinoti, kurioje programos vietoje rasyti sitas dalis?

Kodas:
 paprograme1() {            //paprogrames metu mirksi diodas PORTB 3 isvade
                  PORTB.B3 = 1;
                  Delay_ms(1000);
                  PORTB.B3 = 0;
if(PORTC.F3==1) {SP=1; void buttonPressed() };       //paspaudus PORTC 3 turi grizti i pati pagrindini meniu (AAAAAAAAAAA uzrasas)
                  }


Kodas:
paprograme2() {        //paprogrames metu mirksi diodas PORTB 4 isvade
                  PORTB.B4 = 1;
                  Delay_ms(1000);
                  PORTB.B4 = 0;
if(PORTC.F3==1) {SP=2; void buttonPressed() };        //paspaudus PORTB 4 turi grizti i pati pagrindini meniu (BBBBBBBBBB uzrasas)
                  }


Gal yra kokios geros literaturos su pavyzdziais butent tokiam mikrovaldikliu programavimui? Rolling Eyes
Pradėti naują temą  Atsakyti į pranešimą
 
Forumo sistema: phpBB
 „Google“ paieška forume
 Kas naujesnio?
 Naujos temos forume

Global electronic components distributor – Allicdata Electronics

Electronic component supply – „Eurodis Electronics“

LOKMITA – įvairi matavimo, testavimo, analizės ir litavimo produkcija

Full feature custom PCB prototype service

GENERAL FINANCING BANKAS

Mokslo festivalis „Erdvėlaivis Žemė

LTV.LT - lietuviškų tinklalapių vitrina

„Konstanta 42“

Technologijos.lt

Buitinė technika ir elektronika internetu žemos kainos – Zuza.lt

www.esaugumas.lt – apsaugok savo kompiuterį!

PriedaiMobiliems.lt – telefonų priedai ir aksesuarai

„Deinavos baldai“ — šeimos baldai

FS 22 Tractors
Farming Simulator 19 Mods, FS 22 Maps, FS22 Mods
ETS2 Mods
ETS2 Trucks, ETS2 Bus, Euro Truck Simulator 2 Mods
FS22 Tractors
Farming Simulator 22 Mods, FS22 Maps, FS22 Trucks
VAT calculator
VAT number check, What is VAT, How much is VAT
Paskola internetu
Vartojimo paskola, paskola automobiliui, paskola būsto remontui
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope
FS22 Mods
FS22 Harvesters, FS22 Tractors Mods, FS22 Maps Mods
FS22 Mods
FS22 Maps,
FS22 Harvesters,
FS22 Tractors
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija
Sims 4 Mods
Sims 4 CC Clothes,
Sims 4 Hair CC,
Sims 4 Skill Cheat
Optic sight
Binoculars for hunting elk,
Best compact binoculars,
Riflescope hunting
Reklama
‡ 1999– © Elektronika.lt | Autoriaus teisės | Privatumo politika | Atsakomybės ribojimas | Turinys | Reklama | Kontaktai LTV.LT - lietuviškų tinklalapių vitrina
Script hook v, Openiv, Menyoo
gta5mod.net
Farming Simulator 2019 Mods, FS22 Mods, FS22 Maps
farmingsimulator19mods.fr
Optical filters, UV optics, electro optical crystals
www.eksmaoptics.com
Reklamos paslaugos
SEO sprendimai

www.addad.lt
Elektroninių parduotuvių optimizavimas „Google“ paieškos sistemai
www.seospiders.lt
FS22 mods, Farming simulator 22 mods,
FS22 maps

fs22.com
Reklama


Reklama