bascom LCD init - LCD teszt
hwsw famulus
hwsw at famulus.hu
Mon Mar 8 16:35:05 CET 2004
>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
No akkor otletadonak.....printer portra QB7-ben
csupan dos+qb7, semmi assembler betet.
Egy amugy mukodo projectbol ollozva, tehat nem futokepesen.
Lenyeges a delay ido, ha tul gyors akkor semmi nem latszik az LCD-n....
(A delaycalculate most eppen directben van a kodba irva, de van ott automatikus
kalkulalo resz is a rutinban.)
KJ
DECLARE SUB DelayCalculate ()
DECLARE SUB delayms (Value AS INTEGER)
DECLARE SUB Delayus (Value AS INTEGER)
DECLARE SUB LCDInit ()
DECLARE SUB LCDENToggle ()
DECLARE SUB LCDTickIr ()
DECLARE SUB lcdwcomm (LCDByte%)
DECLARE SUB lcdwdata (LCDByte%)
DECLARE SUB lcdwstring (LCDString$)
DECLARE SUB lcdxy (sor AS INTEGER, Oszl AS INTEGER)
DECLARE SUB LCDkep000 ()
DECLARE SUB LCDListaIr ()
DECLARE SUB LCDCursorFel ()
DECLARE SUB LCDCursorLe ()
DECLARE SUB LCDFrissit ()
DECLARE SUB LCDMeresIr ()
DECLARE SUB LCDKepfrissit ()
Const lcdcurkar% = 246
Const lcdport% = 888
Const EN% = 1
Const RW% = 2
Const RS% = 4
Const DB0% = 1, DB1% = 2, DB2% = 4, DB3% = 8
Const DB4% = 16, DB5% = 32, DB6% = 64, DB7% = 128
Const LCDHome% = &H2
Const LCDClear% = &H1
Const LCDCursorON% = &H8 + &H4 + &H2
Const LCDCursorOFF% = &H8 + &H4
Const LCDBlinkON% = &H8 + &H4 + &H1
Const LCDBlinkOFF% = &H8 + &H4
Const LCDDisplayON% = &H8 + &H4
Const LCDDisplayOFF% = &H8
Dim lcd(0 To 20) As String * 19
Dim lcdsor As Integer
Dim lcdsormax As Integer
Dim lcdcurpos As Integer
Dim getmode As Integer
Dim getsor As Integer
Dim getoszl As Integer
Dim getvar As String
Dim getdata As String
Dim getesc As String
Dim getmask As String
Cls
Print "Control Started"
DelayCalculate
Print "Delay Calculated D= "; Int(secfor#)
Print "LCD Init starting ... ";
Call LCDInit
LOCATE 3, 25: Print "LCD Init OK"
Call LCDkep000
delayms (1000)
LOCATE 4, 1: Print "Main program Started"
LOCATE 23, 1: Print "Leallitas <Esc> utana <Enter/Ok>"
lcdkepir = 1
..............
Sub LCDInit()
OUT lcdport%, 0
delayms 16
OUT lcdport%, DB5% Or DB4%
LCDENToggle
delayms 5
LCDENToggle
Delayus 100
LCDENToggle
Delayus 100
OUT lcdport%, DB5%
LCDENToggle
Delayus 100
'/* LCD pre-init Ok, innen 4 bit interface !! */
lcdwcomm DB5% Or DB3% ' Function Set 4 bit 2 sor
lcdwcomm DB3% 'Display OFF
lcdwcomm DB0% 'Display Clear
lcdwcomm DB2% Or DB1% 'Entry Mode Set Increment NoScroll
lcdwcomm DB3% Or DB2% 'Or DB1 Or DB0 'Display ON
'/* LCD mar hasznalhato !! */
End Sub
----------------------
Sub LCDkep000()
lcdwcomm LCDClear%
lcdxy 1, 2: lcdwstring "Csibe Control 2003"
lcdxy 2, 4: lcdwstring "Famulus Sofware"
lcdxy 3, 6: lcdwstring "20/439-1219"
lcdxy 4, 6: lcdwstring Date$
End Sub
---------------------
Sub LCDENToggle()
Dim LCDPortByte%
LCDPortByte% = INP(lcdport%)
OUT lcdport%, LCDPortByte% Or EN%
Delayus 1
LCDPortByte% = INP(lcdport%)
OUT lcdport%, LCDPortByte% Xor EN%
Delayus 1
End Sub
---------------------
Sub lcdwcomm(LCDByte%)
Dim HB$
Dim FB%
Dim AB%
Dim I&
HB$ = Right$("00" + Hex$(LCDByte%), 2)
FB% = Val("&H" + Left$(HB$, 1) + "0")
OUT lcdport%, FB%
LCDENToggle
AB% = Val("&H" + Right$(HB$, 1) + "0")
OUT lcdport%, AB%
LCDENToggle
If LCDByte% = LCDHome% Or LCDByte% = LCDClear% Then
delayms 2
Else
Delayus 50
End If
End Sub
---------------------
Sub lcdwdata(LCDByte%)
Dim HB$
Dim FB%
Dim AB%
Dim I&
HB$ = Right$("00" + Hex$(LCDByte%), 2)
FB% = Val("&H" + Left$(HB$, 1) + "0") Or RS%
OUT lcdport%, FB%
LCDENToggle
AB% = Val("&H" + Right$(HB$, 1) + "0") Or RS%
OUT lcdport%, AB%
LCDENToggle
Delayus 40
End Sub
----------------------
Sub lcdwstring(LCDString$)
Dim I%
Dim l%
l% = Len(LCDString$)
If l% = 0 Then Exit Sub
For I% = 1 To l%
lcdwdata Asc(Mid$(LCDString$, I%, 1))
Next I%
End Sub
Sub lcdxy(sor As Integer, Oszl As Integer)
Dim Addr As Integer
Dim lcds As Integer
Dim lcdo As Integer
lcds = sor - 1
lcdo = Oszl - 1
Select Case lcds
Case 0
Addr = &H0
Case 1
Addr = &H40
Case 2
Addr = &H14
Case 3
Addr = &H54
End Select
lcdwcomm (Addr + lcdo) Or &H80
End Sub
----------------------
Sub LCDkarset()
lcdwcomm LCDClear%
lcdxy 1, 1
For I% = 129 To 255
lcdwdata I%
zzzz = 0
Next I%
End Sub
-----------------
-----------------------
Sub Calc1Sec()
starttimer# = Timer
For I& = 1 To 1000000: Next I&
StopTimer# = Timer
Difference# = StopTimer# - starttimer#
secfor# = 1000000 / Difference#
msecFOR# = secfor# / 1000
usecFOR# = secfor# / 1000000
End Sub
----------------------
Sub DelayCalculate()
secfor# = 750000
msecFOR# = 750000 / 1000
usecFOR# = 750000 / 1000000
Exit Sub
' secfor# = 2019723
' msecFOR# = 2019723 / 1000
' usecFOR# = 2019723 / 1000000
'EXIT SUB
Dim I&
Dim starttimer#
Dim StopTimer#
Dim Difference#
Dim MeroCiklus&
MeroCiklus& = 6000000
starttimer# = Timer
Do While Timer <> starttimer#: Loop
For I& = 1 To MeroCiklus&: Next I&
StopTimer# = Timer
Difference# = (StopTimer# - starttimer#) * 5
secfor# = MeroCiklus& / Difference#
msecFOR# = secfor# / 1000
usecFOR# = secfor# / 1000000
End Sub
--------------------------
Sub delayms(Value As Integer)
Dim I As Long
Dim VC As Long
VC = Value * msecFOR#
For I = 1 To VC: Next I
End Sub
--------------------------
Sub Delayus(Value As Integer)
Dim I As Long
Dim VC As Long
VC = Value * usecFOR
For I = 1 To VC: Next I
End Sub
-------------------
More information about the Elektro
mailing list