 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Sre Dec 28, 2005 9:20 pm Naslov sporočila: Tipkovnica + LCD |
|
|
Pozdravljeni!
Želim uporabiti tipkovnico 4x4 za vnos konstante na LCD, to konstanto pa bi kasneje uporabil za primerjavo s spremenljivko. Ima kdo kakšno idejo? _________________ California |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Sre Dec 28, 2005 10:01 pm Naslov sporočila: |
|
|
Kupi tipkovnico ali jo naredi, jo poveži na PIC-a, napiši program, sprogramiraj, priključi LCD in je!
Malce se razjasni, kateri PIC uporabljaš, v čem programiraš, že znaš kaj programirat!?? |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Sre Dec 28, 2005 10:57 pm Naslov sporočila: |
|
|
Torej sem začetnik, programiram na 16F877A, tipkovnico sem naredil, vse skupaj z LCD-jem imam na EasyPIC3 plošči. Programiram z mikroBasic, ker ima veliko v knjižnici in je vsaj za mene bolj preprosto programiranje. Nekaj osnovnih stvari mi je uspelo spravit skupaj, pri tipkovnici se mi je pa zataknilo. Namreč na LCD-ju dobim pravo informacijo o pritisnjeni tipki (v stringu), vendar je ne znam uporabiti naprej (rabim DEC ali HEX). _________________ California |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Čet Dec 29, 2005 9:23 am Naslov sporočila: |
|
|
Dodatno pojasnilo s primerom izpisa na LCD:
Naprimer zgornja vrstica na začetku: Setp.1 (string), v sredini: 90,5 (float) in nekje proti koncu vrstice še: °C (zopet string). Vrednost 90,5 bi bilo najbolj elegantno vnesti preko tipkovnice, po vnosu (spremembi) pa bi jo morali zapisati v EEPROM, od koder jo lahko program prebere. In še dodatna stvar, setpointov je več in vsi bi morali biti na enak način dosegljivi. Upam, da nisem preveč zakompliciral ideje.
Vse skupaj je mišljeno kot večkanalni temperaturni ON/OFF regulator. _________________ California |
|
Nazaj na vrh |
|
 |
NeoTO Član


Pridružen-a: Pon 28 Mar 2005 19:19 Prispevkov: 2752 Aktiv.: 11.62 Kraj: Trzic
|
Objavljeno: Čet Dec 29, 2005 10:42 am Naslov sporočila: |
|
|
Daj prilimaj tvojo kodo, kar je imaš za tale problem. Sam sicer ne poznam microBasica, zagotovo pa se bo kdo tukaj našel, ki ti bo pomagal. |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Čet Dec 29, 2005 4:59 pm Naslov sporočila: |
|
|
Tukaj je koda:
Koda: |
program keypad_test
'vrne ASCII kodo pritisnjene številke
dim kp as byte
dim i as byte
dim LCDPos as byte
dim myNumber as word
dim myNumberString as char[5]
'first number will be put into mynum[0], next into mynum[1] and so on...
'next display digits on LCD
'and so on
main:
Keypad_Init(PORTD)
Lcd_Init(PORTB) ' Initialize LCD on PORTB
Lcd_Cmd(LCD_CLEAR) ' Clear display
Lcd_Cmd(LCD_CURSOR_OFF) ' Cursor off
while TRUE
kp = 0
'--- Wait for key to be pressed
while kp = 0
'--- un-comment one of the keypad reading functions
kp = Keypad_Released
wend
'--- prepare value for output
if kp > 10 then
kp = kp + 54
else
kp = kp + 47 '47
end if
LCD_CHR(2, 1, kp)
LCDPos = 1
myNumber = kp
WordToStr(myNumber, myNumberString)
for i = 0 to 4
if myNumberString[i] <> " " then
Lcd_Chr(1, LCDPos, myNumberString[i])
LCDPos = LCDPos + 1
Delay_ms(10)
end if
next i
wend
end. |
_________________ California |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Čet Dec 29, 2005 5:06 pm Naslov sporočila: |
|
|
Basic ni moja najmocnejsa stran zato me popravi ce se motim: ti ze imas decimalno/hex vrednost "kp", za katero si napisal, da jo rabis ?! Kaj ti pa ni vsec pri njej ? |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Čet Dec 29, 2005 6:36 pm Naslov sporočila: |
|
|
Tudi jaz ne vem ali se motim, ko mislim da je to string, ker mi ni do sedaj s to cifro ničesar ni uspelo narediti (izpis večmestnega števila, preproste matematične operacije, ...) _________________ California |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.57
|
Objavljeno: Pet Dec 30, 2005 1:56 am Naslov sporočila: |
|
|
Ali govoriva o isti stvari ? Ena funkcija ti vrne vrednost, ki jo zapises v spremenljivko "kp". To je najbrz koda tipke, ki je pritisnjena, saj glede nanjo ukrepas dalje (recimo pripises stringu se en znak, glede na to, kaksna je vrednost je v kp - torej katera tipka je bila pritisnjena). Zakaj ne bi mogel te vrednosti (kp) uporabiti v izracunih, ce je temu tako ?
(z Basicom sem se srecal prvic in zadnjic na PCjih ~15 let nazaj) |
|
Nazaj na vrh |
|
 |
California Član

Pridružen-a: Pet 26 Avg 2005 19:48 Prispevkov: 236 Aktiv.: 1.00 Kraj: Hrastnik
|
Objavljeno: Sob Dec 31, 2005 1:27 pm Naslov sporočila: |
|
|
Problem rešen z malo znoja.
Koda: |
program keypad_test
dim kp,kp1,cnt as byte
dim kp2 as word
dim txt,txt1 as string[5]
main:
cnt = 0
Keypad_Init(PORTD)
Lcd_Init(PORTB) ' Initialize LCD on PORTB
Lcd_Cmd(LCD_CLEAR) ' Clear display
Lcd_Cmd(LCD_CURSOR_OFF) ' Cursor off
while TRUE
kp = 0
'--- Wait for key to be pressed
while kp = 0
'--- un-comment one of the keypad reading functions
kp = Keypad_Released
'kp = Keypad_Read
wend
Inc(cnt)
delay_us(120)
'--- prepare value for output
if kp > 10 then
kp = kp + 54
else
kp = kp + 47
end if
kp1 = kp - 48
select case cnt
case 1 kp2 = kp1
case 2 kp2 = (kp2 * 10) + kp1
case 3 kp2 = (kp2 * 10) + kp1
case 4 kp2 = (kp2 * 10) + kp1
case 5 kp2 = (kp2 * 10) + kp1
case else cnt = 0
end select
'--- print it on LCD
WordToStr(kp2, txt1)
Lcd_out(1, 3, txt1)
WordToStr(cnt, txt)
Lcd_Out(2, 3, txt)
wend
end. |
_________________ California |
|
Nazaj na vrh |
|
 |
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|