|
|
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 2025 01 01, 19:53. 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
|
|
|
|
|
|
LCD indikatoriaus meniu valdymas mygtukais |
Parašytas: 2011 02 20, 03:24 |
|
|
|
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 |
Parašytas: 2011 02 20, 10:46 |
|
|
|
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 |
Parašytas: 2011 02 20, 15:47 |
|
|
|
Naudoju PIC16F887 mikrovaldikli. Pabandziau programa, sukompiliuoja be klaidu, bet visvien neveikia - i LCD nieko neisveda, nors ir spaudinejant mygtukus.. |
|
|
|
|
|
|
LCD indikatoriaus meniu valdymas mygtukais |
Parašytas: 2011 02 20, 17:12 |
|
|
|
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 |
Parašytas: 2011 02 20, 19:24 |
|
|
|
Aciu labai! Veikia dabar kaip turetu
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 |
Parašytas: 2011 02 20, 19:59 |
|
|
|
Electric-Blue rašo: |
Aciu labai! Veikia dabar kaip turetu
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 |
Parašytas: 2011 02 24, 02:16 |
|
|
|
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? |
|
|
|
|
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
ATS Trailers
American Truck Simulator Mods,
ATS Trucks,
ATS Maps |
|
|
|