PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD JM164A Ansteurung mit leichten Probs



tpot
06.04.2006, 03:58
hallo!

ich hab ein 4x16 LCD, und möchte einfach einen text darauf ausgeben,..

das ganze läuft auf einer c-Unit M 1.1 und ist mit basic geschrieben,...


text kann ich schon am display anzeigen, aber nun blinkt der text immer wieder...

1) wie kann ich das blinken verhindern?

2) wie kann ich in die 2. 3. und 4. zeile schreiben?

3) muss ich die bits zerlegen??

ich hab das prog da,.. nur keine ahnung wie ich da was machen kann,...


hir ist der code, hoffentlich könnt ihr mir helfen!!!!

' *** Daten-Definition ***
define lcd_buf byte
define lcd_param byte


' *** Definition LCD-Ports ***
define lcd_port byteport[2]
define lcd_rs port[14]
define lcd_rw port[13]
define lcd_e port[15]

'*** ASCII-Codes ***
define A_ &H41
define B_ &H42
define C_ &H43
define D_ &H44
define E_ &H45
define F_ &H46
define G_ &H47
define H_ &H48
define I_ &H49
define J_ &H4A
define K_ &H4B
define L_ &H4C
define M_ &H4D
define N_ &H4E
define O_ &H4F
define P_ &H50
define Q_ &H51
define R_ &H52
define S_ &H53
define T_ &H54
define U_ &H55
define V_ &H56
define W_ &H57
define X_ &H58
define Y_ &H59
define Z_ &H5A

'*** Programmoperationen ***

gosub LCD_INIT
pause 10


lcd_param = 1 : gosub LCD_GOTOLINE ' 2, lässt anzeige blinken!!
lcd_param = H_ : gosub LCD_WRITECHAR 'HALLO
lcd_param = A_ : gosub LCD_WRITECHAR
lcd_param = L_ : gosub LCD_WRITECHAR
lcd_param = L_ : gosub LCD_WRITECHAR
lcd_param = O_ : gosub LCD_WRITECHAR


end


'*** LCD_Interface ***

#LCD_INIT

lcd_port = OFF

' 8-Bit-Modus
lcd_param=&H38 : gosub LCD_WRITECMD

wieso muss ich das da machen?!?!?


' mit 8-Bit-Command in 4-Bit-Modus umschalten
lcd_port=&B00000010 was gibt dieser wert?!?!?!?!?!?
tog lcd_e 'tog -- umschalten eines digital ports
tog lcd_e



' ab jetzt 4-Bit-Modus
lcd_param = &H28 : gosub LCD_WRITECMD
lcd_param = &H0C : gosub LCD_WRITECMD

' Display loeschen
#LCD_CLS
lcd_param = &H02 : gosub LCD_WRITECMD
lcd_param = &H01 : gosub LCD_WRITECMD
return

' Zeilenwechsel
#LCD_GOTOLINE
if lcd_param = 1 then lcd_param = &H80
if lcd_param = 2 then lcd_param = &HC0
goto LCD_WRITECMD

' LCD-Kommando
#LCD_WRITECMD
lcd_buf = OFF
goto LCD_WRITE

' Zeichenausgabe
#LCD_WRITECHAR
lcd_buf = &B00100000

' Kommando oder Zeichen an Display senden
#LCD_WRITE
lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
tog lcd_e
tog lcd_e
lcd_port = lcd_buf or (lcd_param and &H0F) ' Lo-Nibble
tog lcd_e
tog lcd_e
return




BITTE helft einen anfänger!!!!

mfg

ink3n
08.04.2006, 23:25
Hi,
Also laut Datenblatt ist das Display bzw. dessen Contoler im 8bit oder 4bit Modus anzusteuern,d.h. Du musst nicht zwangsläufig das Display mit 4bit Betriben.


lcd_port=&B00000010
// PortB pin1 auf High (Display Löschen lt. Datenblatt)

cd_param=&H38 : gosub LCD_WRITECMD
'wieso muss ich das da machen?!?!?
//H38 ist (H)ex und für den 8bit Modus gedacht und wie folgt zu verstehen
//| DB7|DB6|DB5|DB4|DB3|DB2|DB1|DB0|
//| 128|64 | 32 |16 | 8 | 4 | 2 | 1 |
//
// weil 32+16+8 == 16*3+8 (Hex 38)
// Was das Bewirkt siehst du in der Doku des Controlers



Controler Datenblatt (http://kentec.net/pdf/lcd/ks0070b_v0.pdf)
Disply Datenblatt (http://kentec.net/pdf/lcd/164a.pdf)



zum Zeilenwechsel musst zu zur DDRam Adresse 40h springen was aber auch sehr gut in der Controlerdokumentation beschrieben ist.

gruß Axel