Hi forty,
in einem anderen Forum hatten welche das gleiche problem. Hier mal ein Code der funktionieren sollte.
Code:
$regfile = "m8def.dat"
$crystal = 1000000 ' 1MHz (You can use any clock).
$hwstack = 32
$swstack = 16
$framesize = 40
Declare Sub SetContrast5V4bit(Byval Contrast_value As Byte)
Dim Lcd_contrast As Byte
Config Lcdpin = Pin , Db4 = PortC.0 , Db5 = PortC.1 , Db6 = PortC.2 , Db7 = PortC.3 , E = PortC.4 , Rs = PortC.5
Config Lcd = 16 * 2 , Chipset = Dogm162v5
Cursor Off Noblink
Cls
LCD "Contrast 0-63"
Waitms 2000
For Lcd_contrast = 0 to 63
Call SetContrast5V4bit(Lcd_contrast)
' You can also use a constant, example, Call SetContrast5V4bit(10)
Cls
LCD "Contrast: " ; Lcd_contrast
Waitms 2000
Next Lcd_contrast
Do
!nop
Loop
End
' =============================================
Sub SetContrast5V4bit(Byval Contrast_value As Byte)
' This subroutine will set the contrast of an LCD module EA DOGM162.
' The LCD module MUST be connected to 5V and use the 4-bit mode.
' This code works with the pins specified in "Config Lcdpin". If you
' change the pins in "Config Lcdpin", this code will still work because
' we use the Bascom internal routine to send the command to the LCD.
' The LCD contrast is a value between 0 and 63. The value passed to
' this subroutine is a byte. If the passed value is greater than 63,
' the passed value will be limited to 63. Note also that it is very
' likely that only a limited range of the 64 possible values will
' produce a valid contrast setting on the LCD, so your main program
' will have to limit the used minimum and maximum values.
'
' Do not use this subroutine if the LCD is connected to 3.3V!
' This code disables the internal voltage booster which must be used
' when the LCD is connected to 3.3V.
Local Ins_P_I_Contr_set As Byte
Local Ins_Contr_Set As Byte
If Contrast_value > 63 Then
Contrast_value = 63 ' We limit the value to 63
Endif
' The 6 bits of the contrast value are sent to the Sitronix
' ST7036 controller chip with two distinct instructions.
' First the passed contrast value will be mapped into two bytes.
' The upper nibble of the byte is used to define the instruction.
' The lower nibble of the byte is used for the parameters of the
' instruction. The contrast value will be mapped into the lower
' nibble of these two bytes.
'==========================================
' Map C3, C2, C1, C0 into the instruction "Contrast Set".
Ins_Contr_Set = Contrast_value
' Clear the upper nibble, keep C3, C2, C1 and C0 into the lower nibble.
Ins_Contr_Set = Ins_Contr_Set AND &B00001111 'Clear upper nibble
' Add the value C3, C2, C1 and C0 to the instruction value.
Ins_Contr_Set = Ins_Contr_Set + &B01110000
'==========================================
' Map C5 and C4 into the instruction "Power/ICON control/Contrast Set".
Ins_P_I_Contr_set = Contrast_value
'Shift Right four times, so that C5 C4 will go in position Bit1 and Bit0.
'Bit7, Bit6, Bit5, Bit4, Bit3, Bit2 will be 0 after the shift operations.
Shift Ins_P_I_Contr_set , Right , 4
' Add the value C5 and C4 to the instruction value.
Ins_P_I_Contr_set = Ins_P_I_Contr_set + &B01010000
' ^---- 0=ICON Off
' ^--- 0=Booster Off (5V)!
'==========================================
' Now we send 4 instructions to the LCD
'==========================================
_temp1 = &B00101001 'Instruction "Function Set" select instruction table 1
'-------------^------------ = DL (Interface 8/4 bits). 0=4-bit interface.
'--------------^----------- = N (Number of lines). 1=two lines. Must be 1
'---------------^---------- = DH (Double height font). 1=DH. Must be 0
'----------------^--------- = IS2 (Instruction table select). Must be 0
'-----------------^-------- = IS1 (Instruction table select). Must be 1
!rCall _Lcd_control ' Send the instruction to the LCD
'==========================================
_temp1 = Ins_Contr_Set ' Instruction "Contrast Set"
!rCall _Lcd_control ' Send the instruction to the LCD
'==========================================
_temp1 = Ins_P_I_Contr_set ' Instruction "Power/ICON/Contrast Set"
!rCall _Lcd_control ' Send the instruction to the LCD
'==========================================
_temp1 = &B00101000 'Instruction "Function Set" select instruction table 0
'-------------^------------ = DL (Interface 8/4 bits). 0=4-bit interface.
'--------------^----------- = N (Number of lines). 1=two lines. Must be 1
'---------------^---------- = DH (Double height font). 1=DH. Must be 0
'----------------^--------- = IS2 (Instruction table select). Must be 0
'-----------------^-------- = IS1 (Instruction table select). Must be 0
!rCall _Lcd_control ' Send the instruction to the LCD
'==========================================
End Sub
' -------
mfg Kay
Lesezeichen