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