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