bascom LCD init - LCD teszt
pyxys1
pyxys1 at westel900.net
Mon Mar 8 21:59:29 CET 2004
Szia,
2004. március 8., 16:35:05, írtad:
>>Most keszulok egy tesztprogit elkovetni Pcre, mert az LCD modulokbol van 3 otthon es nem tudom mukodnek-e (1 biztos, az uj, de 2 >kitermelt innenonnnan. Es ne a kesz aramkorben szivjak vele. Meg a
>>parancskeszletet is van hol gyakorolni:) Amugy ez is basic lesz >igaz, Qbasic-ban megirva:)
>>Robi
hf> No akkor otletadonak.....printer portra QB7-ben
hf> csupan dos+qb7, semmi assembler betet.
hf> Egy amugy mukodo projectbol ollozva, tehat nem futokepesen.
hf> Lenyeges a delay ido, ha tul gyors akkor semmi nem latszik az LCD-n....
hf> (A delaycalculate most eppen directben van a kodba irva, de van ott automatikus
hf> kalkulalo resz is a rutinban.)
hf> KJ
hf> DECLARE SUB DelayCalculate ()
hf> DECLARE SUB delayms (Value AS INTEGER)
hf> DECLARE SUB Delayus (Value AS INTEGER)
hf> DECLARE SUB LCDInit ()
hf> DECLARE SUB LCDENToggle ()
hf> DECLARE SUB LCDTickIr ()
hf> DECLARE SUB lcdwcomm (LCDByte%)
hf> DECLARE SUB lcdwdata (LCDByte%)
hf> DECLARE SUB lcdwstring (LCDString$)
hf> DECLARE SUB lcdxy (sor AS INTEGER, Oszl AS INTEGER)
hf> DECLARE SUB LCDkep000 ()
hf> DECLARE SUB LCDListaIr ()
hf> DECLARE SUB LCDCursorFel ()
hf> DECLARE SUB LCDCursorLe ()
hf> DECLARE SUB LCDFrissit ()
hf> DECLARE SUB LCDMeresIr ()
hf> DECLARE SUB LCDKepfrissit ()
hf> Const lcdcurkar% = 246
hf> Const lcdport% = 888
hf> Const EN% = 1
hf> Const RW% = 2
hf> Const RS% = 4
hf> Const DB0% = 1, DB1% = 2, DB2% = 4, DB3% = 8
hf> Const DB4% = 16, DB5% = 32, DB6% = 64, DB7% = 128
hf> Const LCDHome% = &H2
hf> Const LCDClear% = &H1
hf> Const LCDCursorON% = &H8 + &H4 + &H2
hf> Const LCDCursorOFF% = &H8 + &H4
hf> Const LCDBlinkON% = &H8 + &H4 + &H1
hf> Const LCDBlinkOFF% = &H8 + &H4
hf> Const LCDDisplayON% = &H8 + &H4
hf> Const LCDDisplayOFF% = &H8
hf> Dim lcd(0 To 20) As String * 19
hf> Dim lcdsor As Integer
hf> Dim lcdsormax As Integer
hf> Dim lcdcurpos As Integer
hf> Dim getmode As Integer
hf> Dim getsor As Integer
hf> Dim getoszl As Integer
hf> Dim getvar As String
hf> Dim getdata As String
hf> Dim getesc As String
hf> Dim getmask As String
hf> Cls
hf> Print "Control Started"
hf> DelayCalculate
hf> Print "Delay Calculated D= "; Int(secfor#)
hf> Print "LCD Init starting ... ";
hf> Call LCDInit
hf> LOCATE 3, 25: Print "LCD Init OK"
hf> Call LCDkep000
hf> delayms (1000)
hf> LOCATE 4, 1: Print "Main program Started"
hf> LOCATE 23, 1: Print "Leallitas <Esc> utana <Enter/Ok>"
hf> lcdkepir = 1
hf> ..............
hf> Sub LCDInit()
hf> OUT lcdport%, 0
hf> delayms 16
hf> OUT lcdport%, DB5% Or DB4%
hf> LCDENToggle
hf> delayms 5
hf> LCDENToggle
hf> Delayus 100
hf> LCDENToggle
hf> Delayus 100
hf> OUT lcdport%, DB5%
hf> LCDENToggle
hf> Delayus 100
hf> '/* LCD pre-init Ok, innen 4 bit interface !! */
hf> lcdwcomm DB5% Or DB3% ' Function Set 4 bit 2 sor
hf> lcdwcomm DB3% 'Display OFF
hf> lcdwcomm DB0% 'Display Clear
hf> lcdwcomm DB2% Or DB1% 'Entry Mode Set Increment NoScroll
hf> lcdwcomm DB3% Or DB2% 'Or DB1 Or DB0 'Display ON
hf> '/* LCD mar hasznalhato !! */
hf> End Sub
hf> ----------------------
hf> Sub LCDkep000()
hf> lcdwcomm LCDClear%
hf> lcdxy 1, 2: lcdwstring "Csibe Control 2003"
hf> lcdxy 2, 4: lcdwstring "Famulus Sofware"
hf> lcdxy 3, 6: lcdwstring "20/439-1219"
hf> lcdxy 4, 6: lcdwstring Date$
hf> End Sub
hf> ---------------------
hf> Sub LCDENToggle()
hf> Dim LCDPortByte%
hf> LCDPortByte% = INP(lcdport%)
hf> OUT lcdport%, LCDPortByte% Or EN%
hf> Delayus 1
hf> LCDPortByte% = INP(lcdport%)
hf> OUT lcdport%, LCDPortByte% Xor EN%
hf> Delayus 1
hf> End Sub
hf> ---------------------
hf> Sub lcdwcomm(LCDByte%)
hf> Dim HB$
hf> Dim FB%
hf> Dim AB%
hf> Dim I&
hf> HB$ = Right$("00" + Hex$(LCDByte%), 2)
hf> FB% = Val("&H" + Left$(HB$, 1) + "0")
hf> OUT lcdport%, FB%
hf> LCDENToggle
hf> AB% = Val("&H" + Right$(HB$, 1) + "0")
hf> OUT lcdport%, AB%
hf> LCDENToggle
hf> If LCDByte% = LCDHome% Or LCDByte% = LCDClear% Then
hf> delayms 2
hf> Else
hf> Delayus 50
hf> End If
hf> End Sub
hf> ---------------------
hf> Sub lcdwdata(LCDByte%)
hf> Dim HB$
hf> Dim FB%
hf> Dim AB%
hf> Dim I&
hf> HB$ = Right$("00" + Hex$(LCDByte%), 2)
hf> FB% = Val("&H" + Left$(HB$, 1) + "0") Or RS%
hf> OUT lcdport%, FB%
hf> LCDENToggle
hf> AB% = Val("&H" + Right$(HB$, 1) + "0") Or RS%
hf> OUT lcdport%, AB%
hf> LCDENToggle
hf> Delayus 40
hf> End Sub
hf> ----------------------
hf> Sub lcdwstring(LCDString$)
hf> Dim I%
hf> Dim l%
hf> l% = Len(LCDString$)
hf> If l% = 0 Then Exit Sub
hf> For I% = 1 To l%
hf> lcdwdata Asc(Mid$(LCDString$, I%, 1))
hf> Next I%
hf> End Sub
hf> Sub lcdxy(sor As Integer, Oszl As Integer)
hf> Dim Addr As Integer
hf> Dim lcds As Integer
hf> Dim lcdo As Integer
hf> lcds = sor - 1
hf> lcdo = Oszl - 1
hf> Select Case lcds
hf> Case 0
hf> Addr = &H0
hf> Case 1
hf> Addr = &H40
hf> Case 2
hf> Addr = &H14
hf> Case 3
hf> Addr = &H54
hf> End Select
hf> lcdwcomm (Addr + lcdo) Or &H80
hf> End Sub
hf> ----------------------
hf> Sub LCDkarset()
hf> lcdwcomm LCDClear%
hf> lcdxy 1, 1
hf> For I% = 129 To 255
hf> lcdwdata I%
hf> zzzz = 0
hf> Next I%
hf> End Sub
hf> -----------------
hf> -----------------------
hf> Sub Calc1Sec()
hf> starttimer# = Timer
hf> For I& = 1 To 1000000: Next I&
hf> StopTimer# = Timer
hf> Difference# = StopTimer# - starttimer#
hf> secfor# = 1000000 / Difference#
hf> msecFOR# = secfor# / 1000
hf> usecFOR# = secfor# / 1000000
hf> End Sub
hf> ----------------------
hf> Sub DelayCalculate()
hf> secfor# = 750000
hf> msecFOR# = 750000 / 1000
hf> usecFOR# = 750000 / 1000000
hf> Exit Sub
hf> ' secfor# = 2019723
hf> ' msecFOR# = 2019723 / 1000
hf> ' usecFOR# = 2019723 / 1000000
hf> 'EXIT SUB
hf> Dim I&
hf> Dim starttimer#
hf> Dim StopTimer#
hf> Dim Difference#
hf> Dim MeroCiklus&
hf> MeroCiklus& = 6000000
hf> starttimer# = Timer
hf> Do While Timer <> starttimer#: Loop
hf> For I& = 1 To MeroCiklus&: Next I&
hf> StopTimer# = Timer
hf> Difference# = (StopTimer# - starttimer#) * 5
hf> secfor# = MeroCiklus& / Difference#
hf> msecFOR# = secfor# / 1000
hf> usecFOR# = secfor# / 1000000
hf> End Sub
hf> --------------------------
hf> Sub delayms(Value As Integer)
hf> Dim I As Long
hf> Dim VC As Long
hf> VC = Value * msecFOR#
hf> For I = 1 To VC: Next I
hf> End Sub
hf> --------------------------
hf> Sub Delayus(Value As Integer)
hf> Dim I As Long
hf> Dim VC As Long
hf> VC = Value * usecFOR
hf> For I = 1 To VC: Next I
hf> End Sub
hf> -------------------
figyi má! de most komolyan.
ezt 8-10 soros bascommal meg lehet oldani, ami futóképes. (tehát benne
van a $regfilétől kezdve az end programm kommentig minden.
nem gyorsabb, eccerűbb, és hatékonyabb így kivizsgálni, hogy működik-e
az az lcd?
ha kell küldök mintát is.
amúgy, ha feltétlenül pc-hez akarod dugni, akkor meg ajánlom az
LCDStudiót. csak kanócot kell drótozni hozzá és ki lehet íratni
mindenféle okosságokat az lcd-re.
(pl, rendszeróra, hdd foglaltság, emilek száma, ilyesmi)
www.lcdstudio.com
--
"Aki másnak vermet ás, .. nem magának ássa!"
(c) Besenyő Pista bácsi.
--
Üdvözlettel,
pyxys1 mailto:pyxys1 at westel900.net
More information about the Elektro
mailing list