Re: LCD 4 bites módban
hwsw famulus
hwsw at famulus.hu
Mon Aug 22 13:31:47 CEST 2005
HD44780-as LCDt kellene 4 bites modban meghajtani. A kataloguslapot
nezegetem, es nem joivok ra hogy kell a modulnak megmondani, hogy most biza
4 bites adatokat kuldok fele, es a maradek 4 biten mi van ne foglalkozzon
vele.
Egy mikrivezerlovel kellene _direktben_ LCDtbirizgalni a magasszintu
utasitasok nem jok ide:(.
Bascomban kell megvalositani, de port iras/olvasas kapcsan ez nem problema
(=a jelvezetekek beallitasa), csak a kikuldendo parancsokkal van gondom....
A 4 bites mod kotott, nemlehet rajta valtoztatni...
Robi
-----------------------------------
Nocsak!
Egyszer mar megvalaszoltam..hatha most eljut hozzad is....
Functionset DL (bit4) Set interface datalength
Amugy az elejetol az init ilyen.
(alapbol 8 bit modban indul 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,
de a mukodes kiszedheto belole....
KJ
----------------------------------
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