Programa do Projeto de Controle (CONTROL.CPP)

  • Objetivo
Este programa fonte, CONTROL.CPP, permite controlar o movimento do acendimento dos 8 leds na placa do kit da Porta Paralela através da combinação do acionamento de 5 chaves (D7, D6, D5, D4 e D3) existentes na placa.
  • Funcionalidade

A Tabela 1 relaciona todas as funcionalidades programadas essas teclas. O programa será interrompido quando todas as chaves forem posicionadas em 00000, e todos os LEDs serão apagados e motor de passo será desligado.

Tabela 1 – Funções do teclado do kit da Interface Paralela.

Chaves

Função

Descrição

D3

Sentido do giro

D3=0 (Giro da esquerda para a direita)

D3=1 (Giro da direita para a esquerda)

D5,D4

Número de Bobinas

D5,D4 (00=1 Bobina, 01=2 Bobinas, 10=3 Bobinas e 11=4 Bobinas)

D6

Tipo do acionamento

D6=0 (Bobinas laterais)

D6=1 (Bobinas Alternadas)

D7

Velocidade do movimento

D7=0 (Velocodade rápida)

D7=1 (Velocidade lenta)

  • Programa Fonte CONTROL.CPP

Listagem 1 – Programa para teste do motor de passo através do kit da Interface Paralela IEEE1284.

/***********************************************

* Programa..: CONTROL.cpp

* Autor.....: Carlos Alberto Rosa

* Prontuario: 045618-7

* Data......: 25/11/2007

***********************************************/

# include "pc.h"

class IEEE1284

{

public:

unsigned int time;

unsigned char leds;

unsigned char keys;

IEEE1284(unsigned char, unsigned);

void set(unsigned char);

unsigned char get(void);

void on(void);

void off(void);

unsigned char read(void);

void write(unsigned char);

void delay(unsigned);

void left(unsigned char);

void right(unsigned char);

void alternate(unsigned char);

void zoomin(void);

void zoomout(void);

};

IEEE1284::IEEE1284(unsigned char x, unsigned y)

{

leds=x;

time=y;

};

void IEEE1284::set(unsigned char x)

{

leds=x;

};

unsigned char IEEE1284::get(void)

{

return(leds);

};

void IEEE1284::on(void)

{

unsigned short LEDS=0x378;

outportb(LEDS,leds);

delay(time);

};

void IEEE1284::off(void)

{

unsigned short LEDS=0x378;

outportb(LEDS,0x00);

delay(time);

};

unsigned char IEEE1284::read(void)

{

unsigned short KEYS=0x379;

keys=inportb(KEYS);

keys=(keys^0x80)&0xF8;

return(keys);

};

void IEEE1284::write(unsigned char x)

{

unsigned short LEDS=0x378;

leds=x;

outportb(LEDS,leds);

delay(time);

};

void IEEE1284::delay(unsigned x)

{

unsigned short KEYS=0x379;

unsigned v=8;

unsigned char key;

key=inportb(KEYS);

key=(key^0x80)&0xF8;

if ((key&0x80) != 0x80) v=2;

for(x=x*10000*v;x>0;x-=1);

};

void IEEE1284::left(unsigned char x)

{

leds=x; on();

leds=leds<<1;>

leds=leds<<1;>

leds=leds<<1;>

leds=leds<<1;>

leds=leds<<1;>

leds=leds<<1;>

leds=leds<<1;>

leds=leds<<1;>

};

void IEEE1284::right(unsigned char x)

{

leds=x; on();

leds=leds>>1; on();

leds=leds>>1; on();

leds=leds>>1; on();

leds=leds>>1; on();

leds=leds>>1; on();

leds=leds>>1; on();

leds=leds>>1; on();

leds=leds>1; on();

};

void IEEE1284::alternate(unsigned char x)

{

leds=x; on();

leds=~leds; on();

};

void IEEE1284::zoomin(void)

{

leds=0x81; on();

leds=0x42; on();

leds=0x24; on();

leds=0x18; on();

};

void IEEE1284::zoomout(void)

{

leds=0x18; on();

leds=0x24; on();

leds=0x42; on();

leds=0x81; on();

};

int main (void)

{

unsigned Delay=1000;

IEEE1284 Painel(0x00,Delay),Input(0x00,Delay);

while (Input.read()!=0)

{

switch ((Input.keys>>3)&0x0F)

{

case 0x00: Painel.left(0x01); break;

case 0x01: Painel.right(0x80); break;

case 0x02: Painel.left(0x03); break;

case 0x03: Painel.right(0xC0); break;

case 0x04: Painel.left(0x07); break;

case 0x05: Painel.right(0xE0); break;

case 0x06: Painel.left(0x0F); break;

case 0x07: Painel.right(0xF0); break;

case 0x08: Painel.alternate(0xAA); break;

case 0x09: Painel.alternate(0x33); break;

case 0x0A: Painel.alternate(0xC7); break;

case 0x0B: Painel.alternate(0x0F); break;

case 0x0C: Painel.off(); break;

case 0x0D: Painel.write(0xFF); break;

case 0x0E: Painel.zoomout(); break;

case 0x0F: Painel.zoomin();

}

};

Painel.off();

}