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