Ich habe einmal eine LCD-Ansteuerung auf dem PC via Paraschnitstelle geschrieben. Das ganez dann auf den AVR umgelegt.
Hiermit kannst du das regeln, musst allerdings in den LCD_Wait funktionen die Zeiten entsprechend auf die Taktraten anpassen!!!
Diese Funktionen kannst du ganz leicht an unterschiedliche Zeilen und Zeichen anpassen.Code:'######################################################################################################################################## '# LCD-Routinen ######################################################################################################################### '######################################################################################################################################## 'LCD Winstar 1202A Spezifische Routinen Sub Lcd_send(byval V_value As Byte) '## maskiert ausgeben!! 'Out Lcd_adr , V_value End Sub Sub Lcd_send_statecode(byval V_rs As Byte , Byval V_rw As Byte , Byval V_clock As Byte) Dim V As Byte '## V (startwert für Bytemaske vordevinieren) V = 3 If V_rs = 1 Then V = V And 254 If V_rw = 1 Then V = V And 253 If V_clock = 1 Then V = V Or 4 '## maskiert ausgeben!! 'Out LCD_ADR + 2, V End Sub Sub Lcd_send_clock_init() Call Lcd_send_statecode(0 , 0 , 1) Waitus 1800 Call Lcd_send_statecode(0 , 0 , 0 ) Waitus 1800 End Sub Sub Lcd_send_clock_cmd() Call Lcd_send_statecode(0 , 0 , 1) Waitus 45 Call Lcd_send_statecode(0 , 0 , 0) Waitus 45 End Sub Sub Lcd_send_clock_data() Call Lcd_send_statecode(1 , 0 , 1) Waitus 45 Call Lcd_send_statecode(1 , 0 , 0) Waitus 45 End Sub Sub Lcd_init() '## LCD-BYTE Adresswert festlegen 'Lcd_adr = 0 Lcd_display = 8 'LCD-Reset Call Lcd_send(48) Call Lcd_send_clock_init Call Lcd_send(48) Call Lcd_send_clock_init Call Lcd_send(48) Call Lcd_send_clock_init 'LCD-Init Call Lcd_send(44) Call Lcd_send_clock_init Call Lcd_send(4) Call Lcd_send_clock_init Call Lcd_clear Call Lcd_set_displayon(1) End Sub Sub Lcd_clear() Call Lcd_send(1) Call Lcd_send_clock_init Call Lcd_set_position_cursor(1 , 0) End Sub Sub Lcd_set_displayon(byval V_value As Byte) If V_value = 1 Then Lcd_display = Lcd_display Or 4 Else Lcd_display = Lcd_display Xor 4 End If Call Lcd_send(lcd_display) Call Lcd_send_clock_init End Sub Sub Lcd_set_cursoron(v_value As Byte) If V_value = 1 Then Lcd_display = Lcd_display Or 2 Else Lcd_display = Lcd_display Xor 2 End If Call Lcd_send(lcd_display) Call Lcd_send_clock_init End Sub Sub Lcd_put_text_multichar(byval V_string As String) For Xbyte = 1 To Len(v_string) Xstring = Mid(v_string , Xbyte , 1) Xchar = Asc(xstring) Call Lcd_put_text_monochar(xchar) Next For Xbyte = Len(v_string) To 12 Call Lcd_put_text_monochar(32) Next End Sub Sub Lcd_put_text_monochar(byval V_char As Byte) Call Lcd_send(v_char) Call Lcd_send_clock_data Call Lcd_shift_cursor(1) End Sub Sub Lcd_shift_cursor(byval V_left As Byte) If V_left = 1 Then Call Lcd_send(24) Else Call Lcd_send(28) End If Call Lcd_send_clock_cmd 'Call Lcd_wait1 End Sub Sub Lcd_set_position_line(byval V_line As Byte) Select Case V_line Case 1 : Lad = 128 Case 2 : Lad = 192 End Select Call Lcd_send(lad) Call Lcd_send_clock_cmd End Sub Sub Lcd_set_position_cursor(byval V_line As Byte , Byval V_pos As Byte) Select Case V_line Case 1 : Lad = 128 Or V_pos Case 2 : Lad = 192 Or V_pos End Select Call Lcd_send(lad) Call Lcd_send_clock_cmd End Sub
JimJim
XUN







Zitieren

Lesezeichen