En esta ocasión voy a realizar una aplicación para controlar un display LCD de dos lineas y 16 caracteres (el cual esta basado en el controlador "HD44780U") a través de Visual Basic .NET y usando como interface hardware la tarjeta bien conocida de Arduino.
En la primera parte de este proyecto voy a crear un control .dll realizado con Visual Basic .NET y a continuación incluirlo en una aplicación ejecutable para poder controlar un LCD.
A continuación os muestro una imagen de como me ha quedado el control "LCD con Visual Basic .NET".
Además en este vídeo os muestro un ejemplo de aplicación para el manejo del Display LCD:
Bien aquí esta la primera parte del desarrollo. Como en otras ocasiones he desarrollado un archivo .dll que permite controlar el display LCD, de esta forma es mucho mas portable y fácil de usar, tanto como cualquier otro control gráfico de los que posee Visual Basic en el cuadro de Herramientas. Lo he desarrollado de la misma forma que hice el Control Display de 7 Segmentos:
Lo primero de todo para poder usar esta libreria .dll con el control es añadirla a nuestro proyecto. Como de la siguiente forma:
1. Pulsamos con el botón derecho sobre el cuadro de herramientas donde pone General y veréis como se despliega un menú emergente. En este aparecerá una opción que se llama Elegir elementos
2. Pulséis sobre esta opción y aparecerá un formulario con varias pestañas. Hacéis click sobre la que dice Componentes de .NET Framework y pulsáis al botón de examinar.
3. Elegís el fichero .dll que queréis que se cargue. En este caso será el "Control Display LCD.dll"
Y veréis como en cuadro de herramientas, se nos ha cargado el nuevo control del Display LCD.
4. Por último añadimos nuestro nuevo control arrastrándolo como hacemos con cualquier otro.
y ya está ... a partir de ahí se puede hacer nuestra propia aplicación como queramos. Yo en este caso he realizado un ejemplo muy sencillo de una aplicación para controlar este Display y mostrar algunas de sus características. Es un ejemplo que muestra como se pueden desplazar los caracteres a modo de scroll y también como se puede cambiar el color de los datos mostrados en la pantalla del Display LCD.
Librería .dll del Control Display LCD
El código de la aplicación de test del Display es este:
'*****************************************************************************************
' LICENSE INFORMATION
'*****************************************************************************************
' Example Application with Control_Display_LCD Version 1.0.0.0
' It shows an example that how can use the user control for Visual Basic .NET
'
' Copyright © 2014
' Rubén García Coronado
' Email: rubengaco13@gmail.com
' Created: Jan 2014
'
' This program is free software: you can redistribute it and/or modify
' it under the terms of the GNU General Public License as published by
' the Free Software Foundation, either version 3 of the License, or
' (at your option) any later version.
'
' This program is distributed in the hope that it will be useful,
' but WITHOUT ANY WARRANTY; without even the implied warranty of
' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
' GNU General Public License for more details.
'
' You should have received a copy of the GNU General Public License
' along with this program. If not, see <http://www.gnu.org/licenses/>.
'*****************************************************************************************
Public Class Form_Prueba_Control
Inherits System.Windows.Forms.Form
#Region " Código generado por el Diseñador de Windows Forms "
Public Sub New()
MyBase.New()
'El Diseñador de Windows Forms requiere esta llamada.
InitializeComponent()
'Agregar cualquier inicialización después de la llamada a InitializeComponent()
End Sub
'Form reemplaza a Dispose para limpiar la lista de componentes.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
'Requerido por el Diseñador de Windows Forms
Private components As System.ComponentModel.IContainer
'NOTA: el Diseñador de Windows Forms requiere el siguiente procedimiento
'Puede modificarse utilizando el Diseñador de Windows Forms.
'No lo modifique con el editor de código.
Friend WithEvents Timer1 As System.Windows.Forms.Timer
Friend WithEvents Control_13 As Control_Display_LCD.Control_13
Friend WithEvents GroupBox1 As System.Windows.Forms.GroupBox
Friend WithEvents TextBox_Test_LCD As System.Windows.Forms.TextBox
Friend WithEvents RadioButton_Serie As System.Windows.Forms.RadioButton
Friend WithEvents RadioButton_Paralelo As System.Windows.Forms.RadioButton
Friend WithEvents CheckBox_Desplazar_Texto As System.Windows.Forms.CheckBox
Friend WithEvents CheckBox_Test_Color_LCD As System.Windows.Forms.CheckBox
Friend WithEvents Label_About As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Me.components = New System.ComponentModel.Container()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form_Prueba_Control))
Me.Timer1 = New System.Windows.Forms.Timer(Me.components)
Me.Label_About = New System.Windows.Forms.Label()
Me.GroupBox1 = New System.Windows.Forms.GroupBox()
Me.CheckBox_Test_Color_LCD = New System.Windows.Forms.CheckBox()
Me.TextBox_Test_LCD = New System.Windows.Forms.TextBox()
Me.RadioButton_Serie = New System.Windows.Forms.RadioButton()
Me.RadioButton_Paralelo = New System.Windows.Forms.RadioButton()
Me.CheckBox_Desplazar_Texto = New System.Windows.Forms.CheckBox()
Me.Control_13 = New Control_Display_LCD.Control_13()
Me.GroupBox1.SuspendLayout()
Me.SuspendLayout()
'
'Timer1
'
Me.Timer1.Interval = 200
'
'Label_About
'
Me.Label_About.AutoSize = True
Me.Label_About.Cursor = System.Windows.Forms.Cursors.Hand
Me.Label_About.ForeColor = System.Drawing.Color.DimGray
Me.Label_About.Location = New System.Drawing.Point(412, 53)
Me.Label_About.Name = "Label_About"
Me.Label_About.Size = New System.Drawing.Size(68, 13)
Me.Label_About.TabIndex = 46
Me.Label_About.Text = "&Acerca de ..."
'
'GroupBox1
'
Me.GroupBox1.Controls.Add(Me.CheckBox_Test_Color_LCD)
Me.GroupBox1.Controls.Add(Me.TextBox_Test_LCD)
Me.GroupBox1.Controls.Add(Me.RadioButton_Serie)
Me.GroupBox1.Controls.Add(Me.Label_About)
Me.GroupBox1.Controls.Add(Me.RadioButton_Paralelo)
Me.GroupBox1.Controls.Add(Me.CheckBox_Desplazar_Texto)
Me.GroupBox1.Location = New System.Drawing.Point(12, 114)
Me.GroupBox1.Name = "GroupBox1"
Me.GroupBox1.Size = New System.Drawing.Size(486, 72)
Me.GroupBox1.TabIndex = 48
Me.GroupBox1.TabStop = False
Me.GroupBox1.Text = "Test LCD:"
'
'CheckBox_Test_Color_LCD
'
Me.CheckBox_Test_Color_LCD.AutoSize = True
Me.CheckBox_Test_Color_LCD.Cursor = System.Windows.Forms.Cursors.Hand
Me.CheckBox_Test_Color_LCD.Location = New System.Drawing.Point(164, 41)
Me.CheckBox_Test_Color_LCD.Name = "CheckBox_Test_Color_LCD"
Me.CheckBox_Test_Color_LCD.Size = New System.Drawing.Size(141, 17)
Me.CheckBox_Test_Color_LCD.TabIndex = 47
Me.CheckBox_Test_Color_LCD.Text = "Test Color LCD aleatorio"
Me.CheckBox_Test_Color_LCD.UseVisualStyleBackColor = True
'
'TextBox_Test_LCD
'
Me.TextBox_Test_LCD.BackColor = System.Drawing.Color.Black
Me.TextBox_Test_LCD.Font = New System.Drawing.Font("Microsoft Sans Serif", 9.75!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TextBox_Test_LCD.ForeColor = System.Drawing.Color.Red
Me.TextBox_Test_LCD.Location = New System.Drawing.Point(18, 14)
Me.TextBox_Test_LCD.MaxLength = 32
Me.TextBox_Test_LCD.Name = "TextBox_Test_LCD"
Me.TextBox_Test_LCD.Size = New System.Drawing.Size(287, 22)
Me.TextBox_Test_LCD.TabIndex = 3
Me.TextBox_Test_LCD.TextAlign = System.Windows.Forms.HorizontalAlignment.Center
'
'RadioButton_Serie
'
Me.RadioButton_Serie.AutoSize = True
Me.RadioButton_Serie.Checked = True
Me.RadioButton_Serie.Cursor = System.Windows.Forms.Cursors.Hand
Me.RadioButton_Serie.Location = New System.Drawing.Point(415, 17)
Me.RadioButton_Serie.Name = "RadioButton_Serie"
Me.RadioButton_Serie.Size = New System.Drawing.Size(49, 17)
Me.RadioButton_Serie.TabIndex = 2
Me.RadioButton_Serie.TabStop = True
Me.RadioButton_Serie.Text = "Serie"
Me.RadioButton_Serie.UseVisualStyleBackColor = True
'
'RadioButton_Paralelo
'
Me.RadioButton_Paralelo.AutoSize = True
Me.RadioButton_Paralelo.Cursor = System.Windows.Forms.Cursors.Hand
Me.RadioButton_Paralelo.Location = New System.Drawing.Point(324, 17)
Me.RadioButton_Paralelo.Name = "RadioButton_Paralelo"
Me.RadioButton_Paralelo.Size = New System.Drawing.Size(63, 17)
Me.RadioButton_Paralelo.TabIndex = 1
Me.RadioButton_Paralelo.Text = "Paralelo"
Me.RadioButton_Paralelo.UseVisualStyleBackColor = True
'
'CheckBox_Desplazar_Texto
'
Me.CheckBox_Desplazar_Texto.AutoSize = True
Me.CheckBox_Desplazar_Texto.Cursor = System.Windows.Forms.Cursors.Hand
Me.CheckBox_Desplazar_Texto.Location = New System.Drawing.Point(18, 41)
Me.CheckBox_Desplazar_Texto.Name = "CheckBox_Desplazar_Texto"
Me.CheckBox_Desplazar_Texto.Size = New System.Drawing.Size(103, 17)
Me.CheckBox_Desplazar_Texto.TabIndex = 0
Me.CheckBox_Desplazar_Texto.Text = "Desplazar Texto"
Me.CheckBox_Desplazar_Texto.UseVisualStyleBackColor = True
'
'Control_13
'
Me.Control_13.Cursor = System.Windows.Forms.Cursors.Hand
Me.Control_13.Location = New System.Drawing.Point(12, 12)
Me.Control_13.Name = "Control_13"
Me.Control_13.Ruben_Color = Nothing
Me.Control_13.Ruben_Input_LCD = Nothing
Me.Control_13.Ruben_Input_Output = False
Me.Control_13.Ruben_Nombre_LCD = Nothing
Me.Control_13.Size = New System.Drawing.Size(488, 96)
Me.Control_13.TabIndex = 47
'
'Form_Prueba_Control
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(510, 189)
Me.Controls.Add(Me.GroupBox1)
Me.Controls.Add(Me.Control_13)
Me.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle
Me.Icon = CType(resources.GetObject("$this.Icon"), System.Drawing.Icon)
Me.MaximizeBox = False
Me.Name = "Form_Prueba_Control"
Me.Text = "Control Display LCD con Visual Basic .NET"
Me.GroupBox1.ResumeLayout(False)
Me.GroupBox1.PerformLayout()
Me.ResumeLayout(False)
End Sub
#End Region
Public Nombre_Aplicacion As String = "Control Display LCD with Visual Basic .NET"
Public Fecha_Software As String = "05/03/2014"
Public Version_Software As String = "Version 1.0.1" & " (" & Chr(223) & "eta)"
Public Copyright_Software As String = Chr(174) & " " & Fecha_Software
Dim Ticks As Integer = 0
Dim S As Integer = 0
Dim Segundos As Integer = 0
Dim Longitud As Integer = 0
Dim Indice_Caracteres As Integer = 0
Dim Ticks_LCD As Integer = 0
Dim S_LCD As Integer = 0
Dim Mensaje_Linea1 As String = " By Joe and "
Dim Mensaje_Linea2 As String = " Alex's Daddy "
Dim Color_LCD_Default As String
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
'*****************************************************
'SIMULACION DEL CONTROL POR MEDIO DE UN TIMER
'*****************************************************
Ticks_LCD = Ticks_LCD + 1
S_LCD = Ticks_LCD Mod 1
If CheckBox_Desplazar_Texto.Checked = True Then
Me.RadioButton_Serie.Enabled = True
Me.RadioButton_Paralelo.Enabled = True
If RadioButton_Serie.Checked = True Then
'Bucle de movimiento en el LCD en serie
Indice_Caracteres = Indice_Caracteres + 1
Me.Control_13.Ruben_Input_LCD = Space(Indice_Caracteres) & TextBox_Test_LCD.Text
If Indice_Caracteres = 32 Then
Indice_Caracteres = 0
Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
End If
End If
If RadioButton_Paralelo.Checked = True Then
'Bucle de movimiento en el LCD en paralelo
Indice_Caracteres = Indice_Caracteres + 1
Me.Control_13.Ruben_Input_LCD = Mid(Space(Indice_Caracteres) & Mid(TextBox_Test_LCD.Text, 1, 16), 1, 16) & Mid(Space(Indice_Caracteres) & Mid(TextBox_Test_LCD.Text, 17, 33), 1, 16)
If Indice_Caracteres = 16 Then
Indice_Caracteres = 0
Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
End If
End If
End If
If CheckBox_Desplazar_Texto.Checked = False Then
Me.RadioButton_Serie.Enabled = False
Me.RadioButton_Paralelo.Enabled = False
Me.TextBox_Test_LCD.Text = Mensaje_Linea1 & Mensaje_Linea2
Me.Control_13.Ruben_Input_LCD = Me.TextBox_Test_LCD.Text
If Me.CheckBox_Test_Color_LCD.Checked = False Then
Else
Me.Control_13.Ruben_Color = "144;238;144"
End If
End If
If Me.CheckBox_Test_Color_LCD.Checked = True Then
Dim R, G, B As Integer
R = CInt(Math.Floor((255 - 0 + 1) * Rnd())) + 0
G = CInt(Math.Floor((255 - 0 + 1) * Rnd())) + 0
B = CInt(Math.Floor((255 - 0 + 1) * Rnd())) + 0
Me.Control_13.Ruben_Color = "" & R & ";" & G & ";" & G & ""
Else
End If
End Sub
Private Sub Label_About_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label_About.Click
MessageBox.Show(Me, Nombre_Aplicacion & vbCrLf & vbCrLf & "Software developed by Joe and Alex's Daddy" & Chr(169) & vbCrLf & Version_Software & Copyright_Software, "About ", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1)
End Sub
Private Sub TextBox_Test_LCD_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox_Test_LCD.TextChanged
Indice_Caracteres = 0
Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
End Sub
Private Sub RadioButton_Serie_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Serie.CheckedChanged
Indice_Caracteres = 0
Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
End Sub
Private Sub RadioButton_Paralelo_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles RadioButton_Paralelo.CheckedChanged
Indice_Caracteres = 0
Me.Control_13.Ruben_Input_LCD = TextBox_Test_LCD.Text
End Sub
Private Sub Form_Prueba_Control_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.Control_13.Ruben_Input_Output = True
Me.RadioButton_Paralelo.Checked = True
Me.CheckBox_Desplazar_Texto.Checked = False
Me.TextBox_Test_LCD.Text = Mensaje_Linea1 & Mensaje_Linea2
Me.Timer1.Enabled = True
End Sub
End Class
Código fuente de la aplicación.
(Incluye también la librería .dll)
Espero que os guste ....! Hasta pronto .... y a por la parte II!
Un saludo.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Por favor, si te ha gustado el blog, te ha ayudado o has visto algún proyecto interesante del que te has podido descargar alguna documentación por favor deja algún comentario. Gracias.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
Me parece muy interesante el desarrollo de la pantalla LCD. Me gustaría tener el código del archivo "Control Display LCD.dll", para cambiar el tamaño de la pantalla del LCD para una aplicación que quiero desarrollar. Un tablero de control.
ResponderEliminarQuedo atento a su colaboración. Y cuando lo termine se lo envio