'****************************************************************
'* Name : LCD_7110.PBP *
'* Date : MECATRODATOS * *
'* Notes : Biblioteca LCD de comandos para Nokia 7110 *
'* o similares LCD *
'* *
'****************************************************************
' LCD Command are:
' Lcd_Init
' LCD_ON
' LCD_OFF
' Lcd_GotoXY
' Lcd_Clear
' Lcd_Home
' Lcd_Contrast
' Scr_Normal
' Scr_Invert
' Rotate_0
' Rotate_180
'-------------------------------------------------------------------------------
'Variables comunes para LCD 3310 y 7110
PosX var Byte 'Variable para Posición X
PosY var Byte 'Variable para Posición Y
FC var Byte [6] 'Variable de 6 bytes = 1 Caracter
Lcd_Data var Byte 'Comandos LCD de datos
ColumnNum var Byte 'Número de columna
'variable Extra para LCD 7110
LowBits VAR Byte 'Bajo Bits para la columna
HighBits VAR Byte 'Los bits más alto en la columna
'-------------------------------------------------------------------------------
'Asignación de puertos 'Cambiar para emparejar su uso
Lcd_CLK VAR PORTB.1 'LCD Clock
Lcd_DC VAR PORTB.2 'LCD Data/Comando (A0 en la especificación)
Lcd_CS VAR PORTB.3 'LCD Chip seleccion (WR en la especificación)
Lcd_RST VAR PORTB.4 'LCD Reset
Lcd_VCC VAR PORTB.5 'LCD Power
Lcd_SDA VAR PORTB.6 'LCD Data
'-------------------------------------------------------------------------------
Lcd_Init: 'Dar formato a LCD, ejecute primero esto!
Low Lcd_RST 'Reajustar LCD (HW reset)
High Lcd_RST 'Restablecer Lanzamiento
Low Lcd_CS 'Seleccionar Chip (WR)
Low Lcd_DC 'Comando/Data (A0)
Lcd_Data = %11100010:GoSub Lcd_SentByte 'Reajustar LCD (SW reset)
Lcd_Data = %10100010:GoSub Lcd_SentByte 'Seleccione parcialidad del LCD
GoSub Rotate_0 'Mostrar rotación 0
'gosub Rotate_180 'DMostrar rotación 180
Lcd_Data = %10100110:GoSub Lcd_SentByte 'Seleccione pantalla (visualización normal)
Lcd_Data = %00100100:GoSub Lcd_SentByte 'Establecer 5V relación resistencia
Lcd_Data = %10000001:GoSub Lcd_SentByte 'Ajuste electrónico de volumen
Lcd_Data = Contrast:GoSub Lcd_SentByte 'Ajuste el brillo de LCD
Lcd_Data = %00101111:GoSub Lcd_SentByte 'Control de potencia
Lcd_Data = %10101111:GoSub Lcd_SentByte 'Gire LCD ON
Return
'-------------------------------------------------------------------------------
LCD_ON: 'Gire LCD ON
Low Lcd_DC
Lcd_Data = %10101111:GoSub Lcd_SentByte
Return
LCD_OFF:
Low Lcd_DC 'Gire LCD OFF
Lcd_Data = %10101110:GoSub Lcd_SentByte
Return
Lcd_GotoXY: 'Ir a coordenadas XY
Low Lcd_DC '7110 LCD inicio de la columna 18
'Y '18 Por consiguiente, se añadirá posX
Lcd_Data = 176 + PosY:GoSub Lcd_SentByte 'Dirección de la página 0, 176 = 1011xxxx
'X
LowBits = (PosX+18) & %00001111
HighBits = (PosX+18) & %11110000
HighBits = HighBits >> 4
Lcd_Data = %00000000 + LowBits:GoSub Lcd_SentByte
Lcd_Data = %00010000 + HighBits:GoSub Lcd_SentByte
Return
Lcd_Clear: 'limpiar Display
Low Lcd_DC
Lcd_Data = %01111000:GoSub Lcd_SentByte 'la línea de salida
For PosY = 0 To 8
Lcd_Data = 176 + PosY:GoSub Lcd_SentByte 'Dirección de la página 0, 176 = 1011xxxx
Lcd_Data = %00010000:GoSub Lcd_SentByte
Lcd_Data = %00000000:GoSub Lcd_SentByte
High Lcd_DC
For ColumnNum = 0 To 18 'Enviar vacío de caracteres, 18 por página
SHiftOUT Lcd_SDA , Lcd_CLK , msbfirst, [ 0,0,0,0,0,0 ]
Next ColumnNum
Low Lcd_DC
Next PosY
Return
Lcd_Home: ' Inicio de Cursor
PosX=0:PosY=0:GoSub Lcd_GotoXY
Return
Lcd_Contrast: 'Contraste
Low Lcd_DC
Lcd_Data = %10000001:GoSub Lcd_SentByte 'Electrónica volumen
Lcd_Data = Contrast:GoSub Lcd_SentByte 'El brillo de LCD
Return
Scr_Normal: 'El modo de pantalla normal
Low Lcd_DC
Lcd_Data = %10100110:GoSub Lcd_SentByte
Return
Scr_Invert: 'Invertir el modo de pantalla
Low Lcd_DC
Lcd_Data = %10100111:GoSub Lcd_SentByte
Return
Rotate_0: 'Mostrar la rotación de 0 grados
Lcd_Data = %10100001:GoSub Lcd_SentByte 'Seleccione el controlador serie de sesiones de la dirección (al revés)
Lcd_Data = %11000000:GoSub Lcd_SentByte 'Seleccione el modo de salida común (normal)
Return
Rotate_180: 'Mostrar la rotación de 180 grados
Lcd_Data = %10100000:GoSub Lcd_SentByte 'Seleccione el controlador segmento de dirección (normal)
Lcd_Data = %11001000:GoSub Lcd_SentByte 'Seleccione el modo de salida común (normal)
Return
Lcd_SentByte: 'Enviar comandos o datos para LCD
SHiftOUT Lcd_SDA , Lcd_CLK , msbfirst, [ Lcd_Data ]
Return
'-------------------------------------------------------------------------------
' Esta parte muestra cómo escribir en LCD
Lcd_SentChar:
Select Case lcd_data
Case 0
FC(0)=$3E:FC(1)=$51:FC(2)=$49:FC(3)=$45:FC(4)=$3E:FC(5)=$00 ' // 0
Case 1
FC(0)=$00:FC(1)=$42:FC(2)=$7F:FC(3)=$40:FC(4)=$00:FC(5)=$00 ' // 1
Case 2
FC(0)=$42:FC(1)=$61:FC(2)=$51:FC(3)=$49:FC(4)=$46:FC(5)=$00 ' // 2
Case 3
FC(0)=$21:FC(1)=$41:FC(2)=$45:FC(3)=$4B:FC(4)=$31:FC(5)=$00 ' // 3
Case 4
FC(0)=$18:FC(1)=$14:FC(2)=$12:FC(3)=$7F:FC(4)=$10:FC(5)=$00 ' // 4
Case 5
FC(0)=$27:FC(1)=$45:FC(2)=$45:FC(3)=$45:FC(4)=$39:FC(5)=$00 ' // 5
Case 6
FC(0)=$3C:FC(1)=$4A:FC(2)=$49:FC(3)=$49:FC(4)=$30:FC(5)=$00 ' // 6
Case 7
FC(0)=$01:FC(1)=$71:FC(2)=$09:FC(3)=$05:FC(4)=$03:FC(5)=$00 ' // 7
Case 8
FC(0)=$36:FC(1)=$49:FC(2)=$49:FC(3)=$49:FC(4)=$36:FC(5)=$00 ' // 8
Case 9
FC(0)=$06:FC(1)=$49:FC(2)=$49:FC(3)=$29:FC(4)=$1E:FC(5)=$00 ' // 9
End Select
Write_LCD:
High Lcd_DC
SHiftOUT Lcd_SDA , Lcd_CLK , msbfirst, [ FC(0),FC(1),FC(2),FC(3),FC(4),FC(5) ]
Low Lcd_DC
Return
'-------------------------------------------------------------------------------