|
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
jarc240 Član
Pridružen-a: Pon 12 Apr 2010 16:41 Prispevkov: 23 Aktiv.: 0.13 Kraj: Lj
|
Objavljeno: Sob Apr 16, 2011 10:51 am Naslov sporočila: Mikro Basic (Števec kovancev) |
|
|
Zanima me par stvari v tem programu, ki sem ga napisal.
Rabil bi nasvet glede ukazov
LCD_init(PortB) "Odvzem informacij iz porta b"
LCD_Cmd(LCD_CURSOR_OF) "Izsklop kurzorjev"
LCD_Out(1,1,Text) "Izspis Texta"
Ti ukazi obstajajo v navodilih saj sem jih dobesedno prepisal iz navodil za
BasicB 2011.Kakor koli, ko debugam mi označi napako na vseh ukazih ki sem jih napisal zgoraj.Najverjetneje je napaka zelo simpl, ker pa nisem vešč programiranja bi lepo prosil za pomoč.
Rad bi še to uprašal kako naj naredim, da se bo prištevala decimalka.
Imel sem namen narediti tako.
1 cent=1 ...
10 centov=10...
1 eu=100...
Pred tem pa že ustvariti piko na zaslonu.
Potem pa z ukazom LCD_Out(n,n,Euro) izspisati Evro dve mesti pred piko.
PRI: 1 cent=(izpis na LCD)... (. 1)
10 centov= (.10)
Rad bi izvedel kako bi vi naredili program za števec kovancev, tudi komentarji, nasveti bi mi zelo pomagali.
PROGRAM
Koda: |
program Stetje_kovancev
dim Text as char
dim Evro as char
main:
TrisB=0
TrisA=1
LCD_init(PortB)
LCD_Cmd(LCD_CURSOR_OF)
Text = "EU"
LCD_Out(1,1,Text)
if PortA=1
then Evro = Evro + 1
Delay_ms(1000)
end if
if PortA=2
then Evro = Evro + 2
Delay_ms(1000)
end if
if PortA=4
then Evro = Evro + 5
Delay_ms(1000)
end if
next Evro
LCD_Out(5,1,Evro)
goto main
end. |
|
|
Nazaj na vrh |
|
|
Branez Moderator
Pridružen-a: Pon 14 Apr 2003 7:21 Prispevkov: 7770 Aktiv.: 34.88 Kraj: Koprivnica HR
|
Objavljeno: Sob Apr 16, 2011 12:10 pm Naslov sporočila: |
|
|
Koda: |
LCD_init(PortB) 'Odvzem informacij iz porta b
LCD_Cmd(LCD_CURSOR_OF) 'Izklop kurzorjev
LCD_Out(1,1,Text) 'Izpis Texta" |
Micro Basic Help je napisal/a: |
Comments
Comments are pieces of text used to annotate a program, and are technically another form of whitespace. Comments are for the programmer’s use only; they are stripped from the source text before parsing.
Use the apostrophe to create a comment:
' Any text between an apostrophe and the end of the
' line constitutes a comment. May span one line only.There are no multi-line comments in BASIC.
|
Če želiš kakšen komentar na tvoj program, pa boš že malo več napisal.
Napisal si v stilu: "Moj avto je pokvarjen, kako ga naj popravim?"
Nimamo kristalne krogle! _________________ The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!
Albert Einstein |
|
Nazaj na vrh |
|
|
igo Član
Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3638 Aktiv.: 17.06
|
Objavljeno: Sob Apr 16, 2011 1:06 pm Naslov sporočila: Re: Mikro Basic (Števec kovancev) |
|
|
main vsebuje inicializacijo portov, lcdja, ... zato naj se izvede samo enkrat.
Glavna Zanka pa potem kroži.
Ne poznam sintakse od [if, else if, else, end if], ampak uporabiti moraš tak else if, da bo delalo tako:
if (prvi pogoj izpolnjen), then
napravi 1
ostalih else if sploh ne preverja več in gre ven iz if stavka
else if (drugi pogoj izpolnjen), then
napravi 2
ostalih else if sploh ne preverja več in gre ven iz if stavka
...
Se pravi, da ob zaznanem izpolnjenem pogoju neha pregledovati ostale pogoje.
Koda: |
program Stetje_kovancev
dim Text as char
dim Evro as char
Zastave ' tole je 8 bitna spremenljivka
NovKov ' je pa en bit od Zastave
main:
TrisB=0
TrisA=1
LCD_init(PortB)
LCD_Cmd(LCD_CURSOR_OF)
Text = "EU"
LCD_Out(1,1,Text)
LCD_Out(5,1,Evro) ' Prvič izpiše
GLAVNAz ' Glavna Zanka
if PortA=1 then
Evro = Evro + 1
NovKov = 1
else if PortA=2 then
Evro = Evro + 2
NovKov = 1
else if PortA=3 then
Evro = Evro + 5
NovKov = 1
else if PortA=4 then
Evro = Evro + 10
NovKov = 1
end if
...
else
Evro = Evro
NovKov = 0
end if
if NovKov=1 then
LCD_Out(5,1,Evro) ' Izpise samo, ce je bil Nov Kovanec, sicer hitro preverja vhode
Delay_ms(1000) ' Delay samo, ce je bil Nov Kovanec, sicer sam hitro preverja vhode
NovKov = 0
end if
goto GLAVNAz
end. |
NovKov je en bit od spremenljivke Zastave. Naprimer bit Zastave,0 . _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
|
Azrael Član
Pridružen-a: Čet 29 Jan 2009 19:46 Prispevkov: 4432 Aktiv.: 23.92 Kraj: Gorje
|
Objavljeno: Sob Apr 16, 2011 6:37 pm Naslov sporočila: |
|
|
Očitna stvar.
Manjka definicija pinov mikrokrmilnika na katere je priklopljen LCD.
Samo navesti PortB, nikakor ni dovolj, saj prevajalnik ne ve niti katerih 6 pinov tega porta si uporabil in tudi tega ne, na katere pine LCDja so spojeni.
Piše v lepo help-u in v pdf dokumentaciji za MikroBasic.
Glede spremenjivk, poglej katere tipe vse imaš na voljo in uporabi tisto vrsto, ki ti odgovarja. |
|
Nazaj na vrh |
|
|
jarc240 Član
Pridružen-a: Pon 12 Apr 2010 16:41 Prispevkov: 23 Aktiv.: 0.13 Kraj: Lj
|
Objavljeno: Sob Apr 16, 2011 7:55 pm Naslov sporočila: |
|
|
Sam program je še v razvoju hehehe
Če bi nekdo ki se vsaj malo ukvarja z programiranjem
bo sigurno videl veliko možnih popravkov za program ki sem ga napisal.
Vendar le nekje je treba začeti.
Najbolje bo bilo če bom sam vse skupaj še malo poštudiral tako se bom največ naučil.
ZELO BI MI POMAGAL kakšen link s kakšnimi forami za programiranje.
Tako da če ima kdorkoli kakšne poznane zadeve na spletu naj mi jih pripne v odgovoru.
LP |
|
Nazaj na vrh |
|
|
Branez Moderator
Pridružen-a: Pon 14 Apr 2003 7:21 Prispevkov: 7770 Aktiv.: 34.88 Kraj: Koprivnica HR
|
Objavljeno: Sob Apr 16, 2011 8:13 pm Naslov sporočila: |
|
|
jarc240 je napisal/a: |
Sam program je še v razvoju hehehe
Če bi nekdo ki se vsaj malo ukvarja z programiranjem
bo sigurno videl veliko možnih popravkov za program ki sem ga napisal.
Vendar le nekje je treba začeti.
Najbolje bo bilo če bom sam vse skupaj še malo poštudiral tako se bom največ naučil.
ZELO BI MI POMAGAL kakšen link s kakšnimi forami za programiranje.
Tako da če ima kdorkoli kakšne poznane zadeve na spletu naj mi jih pripne v odgovoru.
LP |
Se malo norčuješ?
Mikroelektonika forum _________________ The true sign of intelligence is not knowledge but imagination.
Creativity is intelligence having fun!
Albert Einstein |
|
Nazaj na vrh |
|
|
Azrael Član
Pridružen-a: Čet 29 Jan 2009 19:46 Prispevkov: 4432 Aktiv.: 23.92 Kraj: Gorje
|
Objavljeno: Sob Apr 16, 2011 8:57 pm Naslov sporočila: |
|
|
Takole bom rekel: Tvoj "program" je slab, milo rečeno. Že algoritem nisi dobro zastavil. Poglej si primer št. 10 in boš videl kako je tvoj pristop neroden (ko spariš char in byte spremenjivke (in bo rezultat zelo drugačen kot misliš, da bo)):
http://www.mikroe.com/eng/chapters/view/77/pic-basic-book-chapter-4-examples/
Prvič sem se z MikroBasic srečal pred enim tednom, ko sem iskal rešitev malenkost bolj zakompliciranega problema, kot je ta tvoj, o zbirniku pa priznam, pojma nimam (tudi ta tema je v napačnem oddelku, saj je Basic višjenivojski jezik in se pri njem z zbirnikom ne srečuješ kaj omembe veliko).
Kakorkoli že, samo s pomočjo, ki je v programu samem (help datoteka) in dokumentacijo na proizvajalčevi spletni strani, sem problem uspešno rešil prej kot v 24 urah. Pravzaprav bi ga še mnogo prej, če ne bi spregledal ene malenkosti, ki seveda ni bila ravno malenkost, saj je poskrbela, da se je program izvajal 256x počasneje kot sem želel.
Lahko samo rečem, ta programski paket je odlično dokumentiran. Izkoristi ponujeno dokumentacijo, zato je!
Skratka, beri, išči, preizkušaj in se boš veliko naučil. Brez muje se še čevelj ne obuje. |
|
Nazaj na vrh |
|
|
Highlag Član
Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 18.11 Kraj: Črnuče
|
Objavljeno: Sob Apr 16, 2011 9:13 pm Naslov sporočila: |
|
|
Uporabljaš mikrobasic pro ali starejšo različico?
Sintaksa se med n jima rahlo razlikuje.
V Microbasic pro:
Koda: |
' Lcd module connections 16F887
dim LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections
|
Tole poveže ustrezne pine iz mikrokontrolerja na lcd. Seveda moraš uporabiti pine, ki jih imaš povezane.
Potem v main() zanki LCD še inicializiraš:
Koda: |
Lcd_Init() ' Initialize Lcd
Lcd_Cmd(_LCD_CLEAR) ' clear display
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off
|
Nato lahko pišeš na LCD.
Z ukazom
Koda: |
Izpis="Moje besedilo "
Lcd_out (1,1,Izpis)
|
Pa seveda moraš PIC-a prej ustrezno nastaviti, da so pini na katerih imaš LCD lepo Digitalni.
Sam v main() zanki kličem initmain() kjer imam potem vpisano odvisno od pica nekaj podobnega temu:
Koda: |
sub procedure InitMain
' 76543210
ANSEL = %00000010 ' AN1 (PortA.1 = A/D input)
ANSELH = %00000000 ' rest I/O
PORTA = %11111111 ' 1=input
TRISA = %11111111 ' PORTA = input
PORTB = %00000000 ' PORTB = Output0
TRISB = %00000000 '
PORTC = %00000000 ' PORTC = output
TRISC = %00000000 '
PORTD = %00001111 ' PORTD =output
TRISD = %00001111 '
PORTE = %00000000 ' PORTE =output
TRISE = %00000100 '
ADCON1 = %00000000 '
ADCON0 = %10000100 ' PORTA.1=AN1
end sub
|
No o odlični dokumentaciji, ki jo je omenil moj predhodnik se nebi popolnoma strinjal... _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
|
Highlag Član
Pridružen-a: Pet 23 Jan 2004 20:42 Prispevkov: 4034 Aktiv.: 18.11 Kraj: Črnuče
|
Objavljeno: Sob Apr 16, 2011 9:18 pm Naslov sporočila: |
|
|
Eh sem našel še en kompleten program.
Koda: |
program LCD_test
' Lcd module connections
dim LCD_RS as sbit at RB4_bit
LCD_EN as sbit at RB5_bit
LCD_D4 as sbit at RB0_bit
LCD_D5 as sbit at RB1_bit
LCD_D6 as sbit at RB2_bit
LCD_D7 as sbit at RB3_bit
LCD_RS_Direction as sbit at TRISB4_bit
LCD_EN_Direction as sbit at TRISB5_bit
LCD_D4_Direction as sbit at TRISB0_bit
LCD_D5_Direction as sbit at TRISB1_bit
LCD_D6_Direction as sbit at TRISB2_bit
LCD_D7_Direction as sbit at TRISB3_bit
' End Lcd module connections
dim txt1 as char[16]
txt2 as char[9]
txt3 as char[8]
txt4 as char[7]
i as byte ' Loop variable
sub procedure Move_Delay() ' Function used for text moving
Delay_ms(500) ' You can change the moving speed here
end sub
main:
TRISB = 0
PORTB = 0xFF
TRISB = 0xFF
ANSEL = 0 ' Configure AN pins as digital I/O
ANSELH = 0
txt1 = "mikroElektronika"
txt2 = "EasyPIC6"
txt3 = "Lcd4bit"
txt4 = "example"
Lcd_Init() ' Initialize Lcd
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Cmd(_LCD_CURSOR_OFF) ' Cursor off
Lcd_Out(1,6,txt3) ' Write text in first row
Lcd_Out(2,6,txt4) ' Write text in second row
Delay_ms(2000)
Lcd_Cmd(_LCD_CLEAR) ' Clear display
Lcd_Out(1,1,txt1) ' Write text in first row
Lcd_Out(2,5,txt2) ' Write text in second row
Delay_ms(500)
' Moving text
for i=0 to 3 ' Move text to the right 4 times
Lcd_Cmd(_LCD_SHIFT_RIGHT)
Move_Delay()
next i
while TRUE ' Endless loop
for i=0 to 7 ' Move text to the left 8 times
Lcd_Cmd(_LCD_SHIFT_LEFT)
Move_Delay()
next i
for i=0 to 7 ' Move text to the right 8 times
Lcd_Cmd(_LCD_SHIFT_RIGHT)
Move_Delay()
next i
wend
end.
|
Bo lažje, ker je cela struktura programa.
Pomemben je tudi vrstni red nizanja podatkovnih tipov.
Na vrhu moraš imeti naziv programa, nato sledijo spremenljivke, konstante, podprogrami in nato glavna zanka. _________________ If at first you don't succeed, destroy all evidence that you tried. |
|
Nazaj na vrh |
|
|
PZUFIC Vseved
Pridružen-a: Sob 17 Nov 2007 19:06 Prispevkov: 6987 Aktiv.: 34.95 Kraj: Rakek
|
Objavljeno: Sob Apr 16, 2011 9:25 pm Naslov sporočila: |
|
|
Mislim, da za kaj veliko učenja in eksperimentiranja nima časa, saj mora izdelek v četrtek delovat. Sam bi napisal tak program v Flowcode v kake pol ure pa bi bilo narejeno in bi delovalo tako kot mora. Sicer ne bi bil tako majhen, ampak vseeno. Dokler nebi znal dobro črkovno in številčno programirati se takega porgrama tik pred zdajci nebi loteval s tem programom, ampak bi ga enostavno izdelal grafično. _________________ Ne čakaj, da se bo nekaj premaknilo pojdi in nekaj premakni.
Lp Primož |
|
Nazaj na vrh |
|
|
Azrael Član
Pridružen-a: Čet 29 Jan 2009 19:46 Prispevkov: 4432 Aktiv.: 23.92 Kraj: Gorje
|
Objavljeno: Sob Apr 16, 2011 10:08 pm Naslov sporočila: |
|
|
Mah ne vem, sem preizkusi brezplačni grafični Great Cow Basic in sem se zaplezal neverjetno hitro. Tudi ta varianta ni čisto enostavna, brez izkušenj. Se pač pozna, da imam z Basicom opravka od nekako leta 1983 (Sinclairjev ZX81).
Če bo avtor teme preučil primer, ki sem ga omenil, ima osnovo za svoj program že narejeno. Ostane mu še, da vkomponira na željeno mesto v izpisu decimalno piko in v program namesto podakov iz ADC vnese svoja števca s pripadajočimi if stavki za vrednost in število kovancev in je na konju.
Tudi za pol ure dela. |
|
Nazaj na vrh |
|
|
jarc240 Član
Pridružen-a: Pon 12 Apr 2010 16:41 Prispevkov: 23 Aktiv.: 0.13 Kraj: Lj
|
Objavljeno: Ned Apr 17, 2011 10:15 am Naslov sporočila: |
|
|
Jao ste pa res agresivni, ta program sem napisal še preden sem se sploh začel ukvarjati kako ga bom izpeljal.
Bil je samo program, da bi mi vsaj malo svetovali, do zdaj sem ga že dovolj nadgradil.
Če nebi nobenega programa napisal in bi samo rekel "Napišite mi program, ki mi bo štel kovance", bi mi pa rekli... no sej dobro veste kaj.
Če mi ne mislite pomagati ali svetovati o kakšnih zvijačah pa res brez veze
da se sploh oglašate...(PZUFIC,Branez)
Vsem ostalim se pa zahvalujem za pomoč. |
|
Nazaj na vrh |
|
|
jarc240 Član
Pridružen-a: Pon 12 Apr 2010 16:41 Prispevkov: 23 Aktiv.: 0.13 Kraj: Lj
|
Objavljeno: Ned Apr 17, 2011 10:26 am Naslov sporočila: |
|
|
HVALA Highlag |
|
Nazaj na vrh |
|
|
PZUFIC Vseved
Pridružen-a: Sob 17 Nov 2007 19:06 Prispevkov: 6987 Aktiv.: 34.95 Kraj: Rakek
|
Objavljeno: Ned Apr 17, 2011 11:18 am Naslov sporočila: |
|
|
Agresiven si ti, ker moraš 3-krat napisati. Že velikokrat smo ti svetovali v šoli vključno s tvojo mentorico, ampak ti ne poslušaš. _________________ Ne čakaj, da se bo nekaj premaknilo pojdi in nekaj premakni.
Lp Primož |
|
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: 69 dni
Powered by phpBB © 2001, 2005 phpBB Group
|