Bascom alol direkt LCD iras
hwsw famulus
hwsw at famulus.hu
Sun Aug 21 21:42:10 CEST 2005
Alfanumerikus LCD modulra kellene adatot kiírni 4 bites módban. A
parancsokat hogyan mondom meg, hogy 4 bitesével küldöm?
A HD44780-as adatlapon nem igazodok ki.:(
A beepitett LCD kiiro parancsok nem jok, spec kodokat kellene
hasznalnom. Bascom 1.11.7.4.
Koszonom, Robi
-----------
Functionset DL (bit4) Set interface datalength
Amugy az elejetol az init ilyen.
(alapbol 8 bit modban i ndul reset utan
ezert az elso 3 kiirasnal az also 4 bit kozombos!)
ekkorra meg mar 4 bitbe allitottad, ha akartad..)
Ime...igaz nem BASCOM hanem QBASIC es printerportra.
----------------------------------
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% = &H2
Const Lcdblinkon% = &H1
Const Lcddisplayon% = &H4
-----------------------------------
Sub Lcdinit
Out Lcdport% , 0
Msdelay 16
Out Lcdport% , Db5% Or Db4%
Lcdentoggle
Msdelay 5
Lcdentoggle
Usdelay 100
Lcdentoggle
Usdelay 100
Out Lcdport% , Db5%
Lcdentoggle
Usdelay 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 !! */
Lcdxy 1 , 6
Lcdwstring Date$
Lcdxy 2 , 2
Lcdwstring "Csibe Control 2003"
Lcdxy 3 , 4
Lcdwstring "Famulus Sofware"
Lcdxy 4 , 6
Lcdwstring "20/439-1219"
Print "LCD Init OK"
Msdelay(1000)
End Sub
Sub Lcdentoggle
Dim Lcdportbyte%
Lcdportbyte% = Inp(lcdport%)
Out Lcdport% , Lcdportbyte% Or En%
Usdelay 1
Lcdportbyte% = Inp(lcdport%)
Out Lcdport% , Lcdportbyte% Xor En%
Usdelay 1
End Sub
Sub Msdelay(value As Integer)
Dim I As Long
Dim Vc As Long
Vc = Value * Msecfor#
For I = 1 To Vc : Next I
End Sub
Sub Usdelay(value As Integer)
Dim I As Long
Dim Vc As Long
Vc = Value * Usecfor
For I = 1 To Vc : Next I
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
Msdelay 2
Else
Usdelay 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
Usdelay 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% , Osz%)
Dim Addr%
'Sor% = Sor% - 1
Select Case Sor% - 1
Case 0
Addr% = &H0
Case 1
Addr% = &H40
Case 2
Addr% = &H14
Case 3
Addr% = &H54
End Select
Osz% = Osz% - 1
Lcdwcomm(addr% + Osz%) Or &H80
End Sub
More information about the Elektro
mailing list