- 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();
}