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