Está en la página 1de 24

Instituto Tecnolgico de Celaya.

Programacin Avanzada .

Unidad 4 Puerto Paralelo

Alumnos: Colunga Montoya Martn. Mincitar Aguilar Rafael

Ingeniera Mecatrnica.

Martnez Martnez Edn.

Fecha de entrega: 4/12/2013

Introducion. Conectores DB25. El conector DB25 es un conector analgico de 25 clavijas de la familia de conectores D-Subminiature . Al igual que el conector DB9, el conector DB25 se utiliza principalmente para conexiones en serie, ya que permite una transmisin asncrona de datos segn lo establecido en la norma RS-232. Tambin se utiliza para conexiones por el puerto paralelo. En un principio se utiliz para conectar impresoras y por este motivo, se le conoce como el "puerto de impresora". Entonces, para evitar confusiones, los puertos de serie DB25 de los equipos generalmente tienen conectores machos, mientras que los conectores de puerto paralelo son conectores hembra DB25. Clavijas en conexin en paralelo (Fig.1).
Nmero de clavija Nombre 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 _STR: Strobe D0 - Bit de datos 0 D1: Bit de datos 1 D2: Bit de datos 2 D3: Bit de datos 3 D4: Bit de datos 4 D5: Bit de datos 5 D6: Bit de datos 6 D7: Bit de datos 7 ACK: Reconocimiento de transmisin Ocupado Sin papel Seleccionar Alimentacin automtica Error

16 17 18 19 20 21 22 23 24 25

Reinicio Seleccionar entrada de datos Conexin a tierra Conexin a tierra Conexin a tierra Conexin a tierra Conexin a tierra Conexin a tierra Conexin a tierra Conexin a tierra

Fig.1 Configuracion de pines en el puerto.

Objetivo. Controlar un puerto paralelo DB25 mediante el programa netbeans para lograr el encendido y apagado de 8 leds. Material utilizado. Cable del puerto paralelo. 1 Protoboard. 8 resistencias de 330 ohms. 8 leds. Cable de conexin.

Resumen. En este proyecto mediante investigacin se reviso un programa para poder controlar un puesto DB25 esto mediante la utilizacin del software netbeans para crear un projecto en java, al obtener el programa que se deseaba implementar se prosigui al armado de un circuito que consista en ocho leds con su respectiva resisitencia para controlar la luminosidad y proteccin.

Programa en Netbeans. Codigo 1. package moverleds; /* * Clase encargada de manipular el byte de salida */ public class Byte { private int nByte; private String binario; public Byte(){ nByte=0; binario=""; } public void incrementarByte(){ if(nByte==128){ nByte=1; } else{//de lo contrario nByte=nByte==0?nByte=1:nByte*2; //si byte es igual a 0 entonces byte= 1, si no se multiplica byte*2 para incrementarlo } } public void decrementarByte(){ if(nByte==1){//si valor actual del byte es 1 nByte=128;//se desplaza al valor 128 //decrementa el byte //si el valor actual byte es de 128 //se regresara el valor a 1 //incremento del byte //se instancia el byte //guarda la cadena binaria

} else{ //de lo contrario

nByte=nByte==0?nByte=128:nByte/2; //si byte=0 entonces byte= 128, si no se divide byte/2 para decrementarlo } } // valor actual de byte public int getByte(){ return nByte; } //se obtiene la cadena binaria public String getBinario(){ binario="00000000"; String binarioTemp=Integer.toBinaryString(nByte); //se convierte byte a una cadena binaria int indice=(binario.length()-binarioTemp.length()); donde se cortara la cadena binaria binario=binario.substring(0, indice); //se obtiene el indice

//se obtiene una subcadena de binario

binario+=binarioTemp; //se concatena la subcadena binaria con binarioTemp return binario; } } Cdigo 2. package moverleds; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; //se regresa binario

/** * Clase encargada de los eventos del teclado */ public class EscuchaTeclado implements KeyListener{ private Byte byteSalida; private GUIMoverLeds gui ; //se manda llamar la clase Byte //se manda llamar la clase GUIMoverLeds

public EscuchaTeclado(GUIMoverLeds gui){ byteSalida=new Byte();//se inicia la clase Byte this.gui=gui;//se hace referencia a la clase GUIMoverLeds }

public void keyTyped(KeyEvent e) { }

public void keyPressed(KeyEvent e) { tecla

//se obtiene el evento al oprimir alguna

String tecla=e.getKeyText(e.getKeyCode()); tecla oprimida //

//se obtiene el nombre de la

System.out.println(e.getKeyText(e.getKeyCode())); //si se oprime la

if(tecla.equals("Izquierda")&&gui.chActivar.isSelected()){ tecla Izquierda byteSalida.incrementarByte();

//se incrementa el byte

gui.campoBinario.setText(byteSalida.getBinario()+" n="+byteSalida.getByte()); //se muestra el valor de byte en pantalla gui.puertoParalelo.escribirPuerto(byteSalida.getByte());//se escribe el byte en el puerto paralelo }

else if(tecla.equals("Derecha")&&gui.chActivar.isSelected()){ la tecla derecha byteSalida.decrementarByte();

//si se oprime

//se decrementa el byte

gui.campoBinario.setText(byteSalida.getBinario()+" n="+byteSalida.getByte());//se muestra el valor del byte en pantalla gui.puertoParalelo.escribirPuerto(byteSalida.getByte()); //se escribe el byte en el puerto paralelo } }

public void keyReleased(KeyEvent e) { } } Codigo3. package moverleds; import gnu.io.CommPortIdentifier; import gnu.io.ParallelPort; import java.io.IOException; import java.io.OutputStream; /** * Clase encargada de conectar con el Puerto Paralelo */ public class PuertoParalelo { private String puerto; private boolean estado; private CommPortIdentifier idPort; //nombre del puerto al que se conectara //muestra el estado del puerto paralelo //identificador de puertos

private ParallelPort puertoParalelo; private OutputStream salida; public PuertoParalelo(){ puerto=""; estado=false; }

//se instancia el puerto paralelo //se instancia el flujo de salida

public boolean abrirPuerto(String nombrePuerto){ if(puertoAbierto()==false){ this.puerto=nombrePuerto; //se obtiene el nombre del puerto al que se conectara el puerto paralelo try { idPort = CommPortIdentifier.getPortIdentifier(puerto);//se identifica el puerto puertoParalelo=(ParallelPort) idPort.open("PuertoParaleloRott", 0x378); //se abre el puerto paralelo salida = puertoParalelo.getOutputStream();//se obtiene el flujo de salida estado=true; System.out.println("Puerto "+puerto+" iniciado ..."); escribirPuerto(0); } catch (Exception e) { System.out.println(e); } } return estado; }

public boolean cerrarPuerto(){ if(puertoAbierto()){ try { escribirPuerto(0); salida.close(); puertoParalelo.close(); estado=false; } catch (Exception e) { System.out.println(e); } System.out.println("Puerto "+puerto+" cerrado ..."); } return estado; } //se optiene el estado del puerto public boolean puertoAbierto(){ return estado; } //se envian datos en puerto paralelo public void escribirPuerto(int dato){ if(puertoAbierto()){ try { salida.write(dato); //se escribe en el puerto } catch (IOException ex) { //se cierra el flujo de salida //se cierra el puerto

// } } } }

System.out.println(ex);

Cdigo del JFrame. package moverleds;

/** * Interfaz Grafica de Usuario de MoverLeds */ public class GUIMoverLeds extends javax.swing.JFrame { /** Creates new form GUIMoverLeds */ protected PuertoParalelo puertoParalelo; public GUIMoverLeds() { puertoParalelo=new PuertoParalelo();//se inicializa el PuertoParalelo initComponents(); chActivar.addKeyListener(new EscuchaTeclado(this @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code"> private void initComponents() { } //se instancia el PuertoParalelo

jColorChooser1 = new javax.swing.JColorChooser(); jPanel1 = new javax.swing.JPanel();

jLabel1 = new javax.swing.JLabel(); jPanel2 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); campoBinario = new javax.swing.JTextField(); chActivar = new javax.swing.JCheckBox(); canvas1 = new java.awt.Canvas(); canvas2 = new java.awt.Canvas(); canvas3 = new java.awt.Canvas(); canvas4 = new java.awt.Canvas(); jLabel3 = new javax.swing.JLabel(); bCerrar = new javax.swing.JButton(); bAbrir = new javax.swing.JButton(); jButton5 = new javax.swing.JButton();

setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

jPanel1.setBackground(new java.awt.Color(102, 255, 102));

jLabel1.setFont(new java.awt.Font("Agency FB", 1, 14)); // NOI18N jLabel1.setForeground(new java.awt.Color(102, 102, 255)); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel1.setText("Mover Leds con el Puerto Paralelo"); jPanel2.setBackground(new java.awt.Color(102, 255, 255)); jPanel2.addPropertyChangeListener(new java.beans.PropertyChangeListener() {

public void propertyChange(java.beans.PropertyChangeEvent evt) { jPanel2PropertyChange(evt); } }); jPanel2.addAncestorListener(new javax.swing.event.AncestorListener() { public void ancestorMoved(javax.swing.event.AncestorEvent evt) { } public void ancestorAdded(javax.swing.event.AncestorEvent evt) { jPanel2AncestorAdded(evt); } public void ancestorRemoved(javax.swing.event.AncestorEvent evt) { } });

jLabel2.setText("Binario:");

campoBinario.setEditable(false); campoBinario.setHorizontalAlignment(javax.swing.JTextField.CENTER);

chActivar.setText("Activar"); chActivar.setEnabled(false); chActivar.setOpaque(false); chActivar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { chActivarActionPerformed(evt);

} });

jLabel3.setIcon(new javax.swing.ImageIcon("C:\\Users\\PAVILLION 6185\\Downloads\\iron man.jpg")); // NOI18N jLabel3.setText("jLabel3");

DV6-

bCerrar.setText("Cerrar Puero"); bCerrar.setEnabled(false); bCerrar.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bCerrarActionPerformed(evt); } });

bAbrir.setText("Abrir Puerto"); bAbrir.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { bAbrirActionPerformed(evt); } });

jButton5.setText("Salir"); jButton5.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) {

jButton5ActionPerformed(evt); } });

javax.swing.GroupLayout javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup(

jPanel2Layout

new

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addComponent(jLabel2) .addGap(18, 18, 18) .addComponent(campoBinario) .addContainerGap()) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addGap(0, 0, Short.MAX_VALUE)

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()

.addComponent(canvas1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(284, 284, 284)) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup() .addComponent(canvas2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(103, 103, 103)))) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(chActivar)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jButton5) .addGap(20, 20, 20)))) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(bAbrir)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(bCerrar)

.addGap(0, 0, Short.MAX_VALUE))) .addGap(18, 18, 18) .addComponent(jLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, 271, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(134, 134, 134)) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(209, 209, 209) .addComponent(canvas3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(0, 267, Short.MAX_VALUE) .addComponent(canvas4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 267, Short.MAX_VALUE))) ); jPanel2Layout.setVerticalGroup(

jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(jPanel2Layout.createSequentialGroup()

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2)) .addComponent(campoBinario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGap(18, 18, 18) .addComponent(chActivar)) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(56, 56, 56) .addComponent(jButton5)))

20,

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(jPanel2Layout.createSequentialGroup()

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel3)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)) .addGroup(jPanel2Layout.createSequentialGroup()

.addGap(29, 29, 29) .addComponent(bAbrir) .addGap(18, 18, 18) .addComponent(bCerrar)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) .addComponent(canvas3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(90, 90, 90) .addComponent(canvas1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(canvas2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(105, 105, 105))

.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addGap(0, 158, Short.MAX_VALUE) .addComponent(canvas4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)

.addGap(0, 159, Short.MAX_VALUE))) );

javax.swing.GroupLayout javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup(

jPanel1Layout

new

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap()

.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignmen t.LEADING) .addComponent(jLabel1, 524, Short.MAX_VALUE) javax.swing.GroupLayout.DEFAULT_SIZE,

.addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel1Layout.setVerticalGroup(

jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1)

.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)

.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) );

javax.swing.GroupLayout layout javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup(

new

layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, 417, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(278, Short.MAX_VALUE)) );

pack(); }// </editor-fold>

private void chActivarActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: }

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) { if(!puertoParalelo.cerrarPuerto()){ dispose(); } }

private void bAbrirActionPerformed(java.awt.event.ActionEvent evt) { if(puertoParalelo.abrirPuerto("LPT1")){//se abre el PuertoParalelo LPT1 bCerrar.setEnabled(true); chActivar.setEnabled(true); bAbrir.setEnabled(false); } }

private void bCerrarActionPerformed(java.awt.event.ActionEvent evt) { if(!puertoParalelo.cerrarPuerto()){//se cierra el PuertoParalelo bCerrar.setEnabled(false); chActivar.setEnabled(false);

bAbrir.setEnabled(true); } }

private void jPanel2PropertyChange(java.beans.PropertyChangeEvent evt) { }

private void jPanel2AncestorAdded(javax.swing.event.AncestorEvent evt) { } public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new GUIMoverLeds().setVisible(true); } }); }

// Variables declaration - do not modify private javax.swing.JButton bAbrir; private javax.swing.JButton bCerrar; public javax.swing.JTextField campoBinario; private java.awt.Canvas canvas1; private java.awt.Canvas canvas2; private java.awt.Canvas canvas3; private java.awt.Canvas canvas4;

public javax.swing.JCheckBox chActivar; private javax.swing.JButton jButton5; private javax.swing.JColorChooser jColorChooser1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; // End of variables declaration

Imagen del JFrame.

Conclusiones. Colunga Montoya Martn. En este proyecto se logr controlar un puerto paralelo DB25 mediante la utilizacin del programa Netbeans para crear un proyecto y mediante los comandos que se nos haban enseado en clase se pudo entender cmo es que el programa funcionaba con esto me doy una idea de que hay una gran variedad de aplicaciones que se le pueden dar a los programas creados en este programa tambin tomando en cuenta cual es que se desea que sea la finalidad de este ya que como en este caso controlamos un hardware pero tambin puede ser solo simulado o mediante la utilizacin de emuladores para crear lo que sera una simulacin de que se est utilizando el hardware a pesar de que no exista tal.

Referencias.
http://es.kioskea.net/contents/175-conector-db25 http://hch-hch.blogspot.mx/2012/02/mover-leds-con-el-puerto-paralelo-en.html Librerias del programa Netbeans.