Escolar Documentos
Profissional Documentos
Cultura Documentos
Florianpolis
2011
EDERSON FERRONATO
Orientador:
Prof. Charles Borges de Lima Dr. Eng.
Florianpolis
2011
DEDICATRIA
A G R A D E C IM E N T O S
R E SU M O
ABS TRACT
This paper presents the design of a panel of LEDs arranged in the form
of a matrix
made
of 7 rows
each LED
is a point
in
the matrix. The system turns on the LEDs of the LED through the online scan and
uses the
persistence
display. Messages
of
are
transmitted wireless to
the
vision to
form the
created in a
software installed
words on
the
the
alphanumeric
on a computer
panel receives
the
and
data,
L I S T A D E F IG U R A S
L IS T A D E T A B E L A S
Tabela 1 - Tabela padro ASCII (ASCII Table and Description , 2010). ................... 32
Tabela 2 - Protocolo de envio e confirmao de mensagem ..................................... 35
Tabela 3 - Tabela mostrando o byte de leitura .......................................................... 36
Tabela 4 - Resposta de uma leitura de mensagem do painel.................................... 36
Tabela 5 - Lista da pinagem do mdulo XBee-PRO (DIGI, 2011) ............................. 38
Tabela 6 - Baud Rate para algumas frequencias de clock (ATMEL, 2011). .............. 48
Tabela 7 - Valores em Bit da letra A .......................................................................... 54
SUMRIO
DEDICATRIA ......................................................................................... 3
AGRADECIMENTOS ............................................................................... 4
RESUMO .................................................................................................. 5
ABSTRACT .............................................................................................. 6
LISTA DE FIGURAS ................................................................................ 7
LISTA DE TABELAS ............................................................................... 8
SUMRIO ................................................................................................. 9
1
INTRODUO ................................................................................. 12
1.1
1.2
Objetivos.......................................................................................................... 13
1.2.1
1.2.2
1.3
Justificativa ...................................................................................................... 14
MICROCONTROLADORES ............................................................ 15
2.1
Arquitetura ....................................................................................................... 16
2.2
Memrias ......................................................................................................... 17
2.2.1
2.2.2
2.2.3
2.3
2.4
Microcontrolador ATMEGA162........................................................................ 19
2.4.1
2.4.2
3.1
3.1.1
3.1.2
3.1.3
3.1.4
3.2
3.3
Tipos de Dispositivos....................................................................................... 26
3.3.1
3.3.2
3.3.3
3.4
3.4.1
3.4.2
3.4.3
DESENVOLVIMENTO ..................................................................... 30
4.1
4.1.1
4.1.1.1
4.1.1.2
4.1.1.3
4.1.1.4
4.1.1.5
4.1.1.6
4.1.1.7
Mensagem................................................................................................... 34
4.1.1.8
4.1.1.9
4.2
4.3
4.3.1
4.3.2
ATDL ............................................................................................................. 39
4.3.3
ATMY ............................................................................................................ 40
4.3.4
ATWR ............................................................................................................ 40
4.3.5
ATCN ............................................................................................................. 40
4.3.6
ATNI .............................................................................................................. 40
4.3.7
ATVR ............................................................................................................. 40
4.3.8
ATBD ............................................................................................................. 41
4.3.9
4.4
4.5
Hardware ......................................................................................................... 44
4.5.1
Microcontrolador ............................................................................................ 44
4.5.2
4.5.3
4.5.4
4.5.5
4.5.6
4.5.7
RESULTADOS ................................................................................. 60
CONCLUSO................................................................................... 63
BIBLIOGRAFIA ................................................................................ 65
1 IN T R O D U O
1 .1 T e m a e P r o b le m a d a P es q u is a
13
1.2 Objetivos
14
1 .3 Ju s t i f i c a t i va
Com o aumento da popularidade da tecnologia e devido a reduo do seu
custo nos ltimos anos, comum encontrar pessoas procurando mais comodidade e
agilidade para executar tarefas de seu dia a dia. Assim, cada vez mais as
tecnologias esto invadindo casas, escritrios e empresas, ocupando espaos cada
vez maiores nestes meios.
Hoje em dia podemos contar com produtos modernos para a exibio de
mensagens informativas, porm com um custo elevado tanto do equipamento como
da instalao. Como por exemplo, os televisores de LCD executando funes de
apresentao de mensagens complexas com imagens em altas resolues.
proposto o desenvolvimento de um produto para exposio de
mensagem sem a necessidade da utilizao de fios para sua transmisso. O produto
no tem a necessidade de utilizar equipamentos caros, visando construo de um
sistema embarcado dedicado para receber a mensagem enviada de um computador
e exibir essa mensagem em painel de leds, tendo como beneficio a transmisso sem
fio e o baixo custo de sua instalao e aplicao.
15
2 MICROCONTROLADORES
Oscilador
Memria de
Dados
Memria
EEPROM
Memria
RAM
Barramento
CPU
Temporizador
Contador
Memria de
Programa
Interface de
Entrada e
Sada
Interface
Serial
A/D
Comparador
PWM
16
2.1 Arquitetura
Memria de
Programa
Endereos
CPU
Memria de
Dados
Dados Instrues
Memria de
Endereos
Programa
Instrues
Memria de
Dados
Endereos
Instrues
CPU
17
As
arquiteturas
supracitadas,
tambm
se
diferenciam
pelo
2.2 Memrias
18
2 .3 L i n g u a g e m d e p r o g r am a o ( F ir m w a r e )
19
2 .4 M ic r o c o n t r o l a d o r A T M E G A 1 6 2
20
5 modos de Sleep.
6 canais PWM.
Interface serial para dois fios orientada a byte (TWI), compatvel com
protocolo I2C.
21
1 comparador analgico.
Na Figura 4 mostrado um diagrama detalhado da CPU do AVR e seus
22
23
3 C O M U N IC A O S E M F I O
3 .1 T i p o s d e r e d e s s e m f io
24
25
3 .2 Z i g B e e A l ia n c e
26
3 .3 T i p o s d e D i s p o s it iv o s
3.3.1 Coordenador ZigBee
27
3 .4 T o p o lo g ia d a s r e d e s Z ig B e e
28
29
30
4 DESENVOLVIMENTO
Software
RS232
(USB)
Computador
Mdulo XBee
wireless
Coordenador
Painel de leds
Mostra a
mensagem visual
Multiplexao
de IO
Mdulo XBee
Disp. Final
RS232
Microcontrolador
Processa a
Mensagem
31
32
Leitura da mensagem
33
34
4.1.1.7 Mensagem
35
Quando for criada a mensagem, ela deve seguir algumas regras. Abaixo
segue um exemplo para escrever a mensagem TESTE DE ENVIO na memria do
microcontrolador posteriormente mostrada no painel de leds:
1 indica que a mensagem ser escrita (1 byte);
2 Quantidade de bytes que ser enviado considerando os bytes de
configurao e de mensagem (2 bytes);
3 Mensagem apresentada da direita para a esquerda (1 byte);
4 Mensagem ter a cor verde (1 byte)
5 TESTE DE ENVIO Mensagem a ser enviada (14)
A Tabela 2 apresenta a concatenao dos bytes acima, o protocolo de escrita.
N Bytes
10 11 12 13 14 15 16 17 18 19
Bytes
36
N Bytes
Bytes
Resposta
Tabela 4 - Resposta de uma leitura de mensagem do painel
N Bytes
10 11 12 13 14 15 16 17 18 19
Bytes
4 .2 S o f t w a r e c o m p u t a d o r
37
4 .3 M d u l o X B e e
38
Pinos
Funo
Descrio
VCC
DOUT
DIN
DO8
RESET
PWM0/RSSI
PWM1
Sada de PWM
NC
Reservado
DTR
Pino de controle
10
GND
11
AD4
Entrada analgica
39
12
CTS
Pino de controle
13
ON
Estado do mdulo
14
Vref
15
AD5
Entrada analgica
16
RTS
Pino de controle
17
AD3
Entrada analgica
18
AD2
Entrada analgica
19
AD1
Entrada analgica
20
AD0
Entrada analgica
4.3.2 ATDL
40
4.3.3 ATMY
4.3.4 ATWR
4.3.5 ATCN
4.3.6 ATNI
4.3.7 ATVR
41
4.3.8 ATBD
42
43
4 .4 P a i n e l d e L ed s
Mdulo XBee
Serial TX
Sinal para
acionar as
linhas
Serial RX
dispositivo final
Microcontrolador
ATMega162
Drive
Corrente
Drive das
linhas
Sinal Serial
Serial
Paralelo
Serial
Paralelo
Sinal Paralelo
Serial
Paralelo
Acionamento
das Colunas
44
painel possui uma interface serial para comunicao com um dos mdulos ZigBee.
No computador est o outro mdulo, conectado a sua porta serial (USB), e o
software de controle.
4 .5 H ar d w a r e
4.5.1 Microcontrolador
45
46
47
Bit de paridade este bit indica a deteco de erro nos bits de dados, a
paridade pode ser par ou mpar, indicando um nmero par ou mpar uns lgicos
contidos no dado. No muito eficiente na deteco de erro, pois o erro pode
acontecer no prprio bit de paridade ou em mais de um bit de dados.
Bit de parada tem sempre valor lgico alto, serve para indicar o fim da
transmisso. Pode ser configurado para ter um ou dois bits. Garante que a linha
voltar ao seu estado padro de transmisso (nvel alto) at a prxima transmisso
de dados.
Existem dois tipos de transmisso entre os dispositivos, a comunicao
assncrona e a sncrona. Na comunicao sncrona utilizam-se mais uma linha de
transmisso que o clock, gerado para a sincronizao dos bits de dados, havendo
a necessidade de se utilizar os bits de inicio e parada. Na comunicao assncrona
no se utiliza a linha de clock, a temporizao gerada para identificar os bits feita
pelos dois dispositivos, os quais devem estar configurados com a mesma velocidade
de transmisso.
No microcontrolador ATmega162, existe um mdulo chamado de USART
(Universal Synchronous and Asynchronous serial Received and Transmitter),
utilizado para fazer a comunicao serial com outros dispositivos (ATMEL, 2011).
Para sua utilizao os seguintes passos devem ser feitos:
1) Iniciar e configurar o mdulo USART.
2) Criar uma funo para enviar um byte.
3) Criar uma funo para receber um byte.
Para inicializar e configurar o mdulo so utilizados os registradores
correspondentes, UBRR, UCSRB e UCSRC.
UBRR (USART Baud Rate Register) o registrador responsvel pela
configurao da taxa de comunicao. Na Tabela 6 mostrado valores de UBRR
calculado para algumas freqncias de clock (ATMEL, 2011).
48
//8Bits, 1 stop
49
50
51
sadas. Com um pulso no pino RCK o sinal passa para a sada e fica travado nos
registradores de deslocamento da sada at que outro pulso ocorra (TEXAS, 2005).
Na Figura 16 mostrado um diagrama simplificado de como o sinal chega at as
matrizes de leds.
Linhas
Sinal
Serial
Colunas
52
53
void rck_A(void)
{
/* RCKA = 0 */
PORTC &= ~_BV(RCKA);
/* RCKA = 1 */
PORTC |= _BV(RCKA);
/* RCKA = 0 */
PORTC &= ~_BV(RCKA);
}
//ZERA O CLOCK
//SETA O CLOCK
//ZERA O CLOCK
Na
54
Linha1
Linha2
Linha3
Linha4
Linha5
Linha6
Linha7
Valor Hex
Bit4-Col. 5
0
1
1
1
1
1
1
3F
Bit3-Col. 4
1
0
0
1
0
0
0
48
Bit2-Col. 3
1
0
0
1
0
0
0
48
Bit1-Col. 2
1
0
0
1
0
0
0
48
Bit0-Col. 1
0
1
1
1
1
1
1
3F
//Space
//!
//"
//#
//$
//%
//&
//
//(
//)
//*
//+
//,
////.
///
//0
//1
//2
55
//3
//4
//5
//6
//7
//8
//9
//:
//;
//<
//=
//>
//?
//@
//A
//B
//C
//D
//E
//F
//G
//H
//I
//J
//K
//L
//M
//N
//O
//P
//Q
//R
//S
//T
//U
//V
//W
//X
//Y
56
//Z
//
};
//monta vermelho
//mostra a matriz vermelha
if (_verm[59-i] & (bit[linha] & verm)) //Verifica
se
1
e
vermelho
habilitado
{
envia_um_B();
//coloca um na fina da coluna
}
Else
//se no
{
envia_zero_B();
//coloca zero na fina da coluna
}
}
rck_A();
//gera um clock para o prximo bit
rck_B();
//gera um clock para o prximo bit
PORTA = _BV(linha);
//liga a linha correspondente
if (linha<7)
//verifica se as 7 linhas foram mostradas
linha++;
//incrementa a linha mostra prxima linha
else
//se no
linha=0;
//zera para mostrar a primeira linha
57
58
verm = 0xFFFF;
verde = 0xFFFF;
if (comando[x]=='\0' || FIM_COMANDO)
{
m_verde[coluna+k]
= 0x00;
FIM_COMANDO=1;
}
else
{
m_verde[coluna+k] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
m_verm[(coluna+k)] = (pgm_read_byte(&fontes[comando[x]-0x20][coluna])) &
(0x01<<desloca_linha)-1;
}
com_ctl = 0;
}
else
if (tipo_cor=='4')
//colorido
{
if (comando[x]=='\0' || FIM_COMANDO)
{
m_verde[coluna+k]
= 0x00;
m_verm[(coluna+k)] = 0x00;
FIM_COMANDO=1;
}
else
{
m_verde[coluna+k] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
m_verm[(coluna+k)] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
}
com_ctl =1;
vel_efeito = 30;
cont_efeito = 0;
verde = 0x000F;
verm = 0xFFF0;
}
coluna++;
}
else
{
coluna=0;
k+=5;
x++;
}
}
else
{
x=desloca_coluna;
k=0;
if (tipo_movimento=='2')
{
desloca_coluna=0;
if (desloca_linha<7)
desloca_linha++;
else
{
desloca_linha=0;
F_CONTA_TEMPO=1;
}
}
if (tipo_movimento=='3')
{
desloca_coluna=0;
if (desloca_linha>0)
{
desloca_linha--;
59
}
else
{
desloca_linha=7;
F_CONTA_TEMPO=1;
}
}
if (tipo_movimento=='1')
{
desloca_linha=7;
if (desloca_coluna<MAX)
{
if ((desloca_coluna==1) && !F_CONTA_TEMPO)
{
F_CONTA_TEMPO=1;
desloca_coluna++;
}
else
desloca_coluna++;
}
else
{
desloca_coluna=0;
}
}
delay_ms(30);
}
}
else
{
if (F_CONTA_TEMPO)
{
if (conta_tempo_desloca<5000)
conta_tempo_desloca++;
else
{
conta_tempo_desloca=0;
F_CONTA_TEMPO=0;
}
}
}
60
5 R E S U LT A D O S
61
62
63
6 C O N C L U S O
sistema
se
mostrou
funcional
no
apresentou
falhas
de
64
7 R E C O M EN D A ES P A R A T R A B A L H O S
FUTURO S
65
8 B IB L IO G R A F I A
ADAM ENGST, G. F. (2005). Redes Sem Fio (2 ed.). So Paulo: Makron Books.
ALLIANCE. (fevereiro de 2011). ZigBee Alliance. Acesso em fevereiro de 2011,
disponvel
em
ZigBee
Aliance:
http://www.zigbee.org/About/AboutTechnology/Standards.aspx
ASCII Table and Description . (janeiro de 2010). Acesso em junho de 2011,
2011,
disponvel
em
Freescale:
www.freescale.com/webapp/sps/homepage.jsp?code=802-15-4_HOME
LIMA, C. B. (2010). Tcnicas de Projetos Eletrnicos com os Microcontroladores
AVR (1 ed.). Edio do Autor.
Acesso
em
fevereiro
de
2011,
disponvel
em
RogerCom:
www.rogercom.com
PEREIRA, F. (2005). Micocontroladores MSP430 - Teoria e Prtica (1 ed.). rica.
PEREIRA, F. (2003). Microcontroladores PIC - Programao em C (7 ed.). So
Paulo: rica.
PINHEIRO, J. M. (Julho de 2004). As Redes com ZigBee. Acesso em janeiro de
2011,
disponvel
em
Projeto
de
Redes:
www.projetoderedes.com.br/artigos/artigo_zigbee.php
SCHILDT, H. (1997). C Completo e Total (3 ed.). So Paulo: Makron Books.
SPALER, K. ([acesso em 2011, maro]). Estudo de Desempenho de uma Rede
ZigBee.
66
67
ANEXOS
68
A ne x o A C d i go do P r o g r a m a
#include
#include
#include
#include
#include
#include
<avr/io.h>
<avr/interrupt.h>
<avr/pgmspace.h>
<inttypes.h>
<stdlib.h>
<ctype.h>
SERINA
SRCKA
RCKA
SERINB
SRCKB
CLRNA
CLRNB
RCKB
#define
#define
#define
#define
#define
#define
#define
#define
BIT_0
BIT_1
BIT_2
BIT_3
BIT_4
BIT_5
BIT_6
BIT_7
8000000
9600
/* 8Mhz */
/* 9600 baud */
PC0
PC1
PC2
PC3
PC4
PC6
PC5
PC7
0x01
0x02
0x04
0x08
0x10
0x20
0x40
0x80
// com_ctl bits
#define MOSTRA_NUMERO
#define MOSTRA_LD
#define MOSTRA_ACUM
#define MOSTRA_PAGAR
#define MOSTRA_SERV
#define MOSTRA_BINGO
#define CRC
#define NUM_INVALIDO
0
1
2
3
4
5
6
7
/* variaveis globais */
u08 bit[7] = { 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01 };
u08 algs[8]; /**< matriz com os algarismos do valor */
u08 algs_f[8]; /**< matriz com os algarismos do valor final*/
u08 linha; /**< posicao da linha na varredura da matriz */
u08 pos; /**< posicao da coluna na montagem da matriz */
u08 cont_vel,cont_efeito,efeito; /**< velocidado da contagem e do efeito */
int cor,verde,verm; /**< cores */
u08 inicio,fim;
u08 i; /**< contador universal em lacos for */
u08 transicao;/**< posicao da transicao */
u08 tran_ctl; /**< controle do efeito de transicao */
u08 pos_alg; // posicao do algarismo a ser incrementado
u08 vel_cont,vel_cont1;
unsigned int vel_efeito,vel_efeito_ac,vel_efeito_tf;
unsigned char comando[60]; /*< buffer do comando recebido >*/
int com_crc; /**< CRC do comando recebido */
int calc_crc; /**< CRC calculado do comando recebido */
u08 com_ctl; /**< controle do comando recebido */
u08 contagem; /** < flag de contagem */
long valor;
int k;
int j;
69
int x;
u08 m_verde[60]; /**< matriz frame verde */
u08 m_verm[60]; /**< matriz frame verde */
long int conta_tempo_desloca=0;
int
F_CONTA_TEMPO=0;
char FIM_COMANDO=0;
int teste=0;
//char _verde=*m_verde;
unsigned char *_verde=m_verde;
unsigned char *_verm=m_verm;
int desloca_coluna=0;
int desloca_linha=0;
unsigned
unsigned
unsigned
unsigned
char
char
char
char
tipo_cor;
tipo_movimento;
MAX=0;
coluna=0;
/* Prototipos de funcoes */
void envia_zero_A(void);
void envia_um_A(void);
void envia_zero_B(void);
void envia_um_B(void);
void rck_A(void);
void rck_B(void);
void
void
void
void
clear_A_on(void);
clear_A_off(void);
clear_B_on(void);
clear_B_off(void);
70
PORTC &= ~_BV(SRCKB);
/* SERINB = 0 */
PORTC &= ~_BV(SERINB);
/* SRCKB = 1 */
PORTC |= _BV(SRCKB);
/* SRCKA = B */
PORTC &= ~_BV(SRCKB);
//ZERO AO CLOCK
//ZERA O VALOR DA ENTRADA
//SETA O CLOCK
//ZERA O CLOCK
}
/* COLOCA UM BIT 1 NA FILA DO MULTIPLEXADOR VERMELHO*/
void envia_um_B(void)
{
/* SRCKB = 0 */
PORTC &= ~_BV(SRCKB);
//ZERA O CLOCK
/* SERINB = 1 */
PORTC |= _BV(SERINB);
//SERTA O VALOR DA ENTRADA
/* SRCKB = 1 */
PORTC |= _BV(SRCKB);
//SETA O CLOCK
/* SRCKB = 0 */
PORTC &= ~_BV(SRCKB);
//ZERA O CLOCK
}
/* GERA UM CLOCK PARA APRESENTAR OS BITS EM PARALELO
/ NA SADA DO SHIFT REGISTER VERDE */
void rck_A(void)
{
/* RCKA = 0 */
PORTC &= ~_BV(RCKA);
//ZERA O CLOCK
/* RCKA = 1 */
PORTC |= _BV(RCKA);
//SETA O CLOCK
/* RCKA = 0 */
PORTC &= ~_BV(RCKA);
//ZERA O CLOCK
}
/* GERA UM CLOCK PARA APRESENTAR OS BITS EM PARALELO
/ NA SADA DO SHIFT REGISTER VERMELHO */
void rck_B(void)
{
/* RCKB = 0 */
PORTC &= ~_BV(RCKB);
//ZERA O CLOCK
/* RCKB = 1 */
PORTC |= _BV(RCKB);
//SETA O CLOCK
/* RCKB = 0 */
PORTC &= ~_BV(RCKB);
//ZERA O CLOCK
}
void clear_A_off(void)
{
/* CLRNA = 1 */
PORTC |= _BV(CLRNA);
}
void clear_A_on(void)
{
/* CLRNA = 0 */
PORTC &= ~_BV(CLRNA);
}
void clear_B_off(void)
{
/* CLRNA = 1 */
PORTC |= _BV(CLRNB);
}
void clear_B_on(void)
{
/* CLRNB = 0 */
PORTC &= ~_BV(CLRNB);
}
void mostra_frame_verm(unsigned char *_verm)
{
for (linha=0;linha<7;linha++)
{
for(i=teste;i<60;i++)
71
{
if (_verm[59-i] & (bit[linha] & verm))
{
envia_um_B();
}
else
{
envia_zero_B();
}
}
rck_A();
rck_B();
PORTA = _BV(linha);
}
}
72
else
{
uart_putc((unsigned char)c);
}
}
int calcrc(char *ptr, int count)
{
int crc;
char i;
crc = 0;
while (--count >= 0)
{
crc = crc ^ (int) *ptr++ << 8;
i = 8;
do
{
if (crc & 0x8000)
crc = crc << 1 ^ 0x1021;
else
crc = crc << 1;
}
while(--i);
}
return (crc);
}
/* INTERRUPO DO TIMER 0 */
ISR (TIMER0_OVF_vect)
{
clear_A_off();
clear_B_off();
for(i=0;i<60;i++)
{
//MONTA A MATRIZ VERDE
if (_verde[59-i] & (bit[linha] & verde)) //SE O BIT 1 E VERDE
{
envia_um_A();
//ENVIA UM PARA O DISPLAY
}
else
//SE NAO
{
envia_zero_A();
//ENVIA ZERO PARA O DISPLAY
}
//MONTA A MATRIZ VERMELHA
if (_verm[59-i] & (bit[linha] & verm))
{
envia_um_B();
}
else
{
envia_zero_B();
}
}
rck_A();
rck_B();
PORTA = _BV(linha);
if (linha<7)
linha++;
else
linha=0;
73
int i;
while(_delay_ms--)
{
for (i=0; i<1330; i++)
{
asm volatile("nop\n\t"::);
}
}
}
int main(void)
{
/* Inicia a configuracao do ATMEGA 162 */
CLKPR=0x80;
CLKPR=0x00;
TCCR0 = (1<<CS01) | (1<<CS00);
TIMSK = 1<<TOIE0;
/* Configura portas de saida */
/* configura PORT A como saida */
DDRA=0XFF;
/* Linhas da matrix de LEDS */
/* configura PORT C como saida */
DDRC=0XFF;
/* Sinais SERINA SRCKA RCK SERINB SRCKA RCK */
/* configura PORT D como saida */
DDRD=0XFF;
/* Desliga saidas porta C */
PORTC=0X00;
/*Desliga linhas da matriz */
PORTA=0X00;
verde = 0x8FC7;
verm = 0xF1F8;
uart_init( UART_BAUD_SELECT(UART_BAUD_RATE,XTAL_CPU) );
marca_zero();
//verde = 0xFFFF;
//verm = 0xFFFF;
verde = 0xFF0F;
//habilita qual linha ser ligada no verde
verm = 0x0FF0;
//habilita qual linha ser ligada no vermelho
if ( bit_is_set(com_ctl,MOSTRA_SERV) )
{
for(i=0;i<60;i++)
{
m_verde[i] = 0x00; //pgm_read_byte(&servico[i]);
m_verm[i] = 0x00; //pgm_read_byte(&servico[i]);
}
}
//INICIALIZA O COMANDO COM UMA MENSAGEM
tipo_cor='4';
//COR RANDOMICA
tipo_movimento='2';
//DESLOCAMENTO PARA CIMA
comando[0]=' ';
comando[1]=' ';
comando[2]='P';
comando[3]='O';
comando[4]='S';
comando[5]=' ';
comando[6]='I';
comando[7]='F';
comando[8]='S';
comando[9]='C';
comando[10]='\0';
MAX=12;
sei(); // desabilita interrupcoes
x=0;
74
coluna=0;
k=0;
for(;;)
{
if (comando[0] && !F_CONTA_TEMPO)
//SE EXISTE UMA MENSAGEM A SER MOSTRADO
{
FIM_COMANDO=0;
if (x<=MAX)
{
if (coluna<5)
{
if (tipo_cor=='1')
//verde
{
verde = 0xFFFF;
if (comando[x]=='\0' || FIM_COMANDO)
{
m_verde[coluna+k]
= 0x00;
FIM_COMANDO=1;
}
else
m_verde[coluna+k]
= (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
m_verm[(coluna+k)] = 0x00;
com_ctl = 0;
}
else
if (tipo_cor=='2')
//vermelho
{
verm = 0xFFFF;
if (comando[x]=='\0' || FIM_COMANDO)
{
m_verde[coluna+k]
= 0x00;
FIM_COMANDO=1;
}
else
m_verm[(coluna+k)] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
m_verde[coluna+k]
= 0x00;
com_ctl = 0;
}
else
if (tipo_cor=='3')
//laranja
{
verm = 0xFFFF;
verde = 0xFFFF;
if (comando[x]=='\0' || FIM_COMANDO)
{
m_verde[coluna+k]
= 0x00;
FIM_COMANDO=1;
}
else
{
m_verde[coluna+k] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
m_verm[(coluna+k)] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
}
com_ctl = 0;
}
else
if (tipo_cor=='4')
//colorido
{
if (comando[x]=='\0' || FIM_COMANDO)
{
m_verde[coluna+k]
= 0x00;
m_verm[(coluna+k)] = 0x00;
FIM_COMANDO=1;
}
else
{
m_verde[coluna+k] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
m_verm[(coluna+k)] = (pgm_read_byte(&fontes[comando[x]0x20][coluna])) & (0x01<<desloca_linha)-1;
}
75
com_ctl =1;
vel_efeito = 30;
cont_efeito = 0;
verde = 0x000F;
verm = 0xFFF0;
}
coluna++;
}
else
{
coluna=0;
k+=5;
x++;
}
}
else
{
x=desloca_coluna;
k=0;
if (tipo_movimento=='2')
{
desloca_coluna=0;
if (desloca_linha<7)
desloca_linha++;
else
{
desloca_linha=0;
F_CONTA_TEMPO=1;
}
}
if (tipo_movimento=='3')
{
desloca_coluna=0;
if (desloca_linha>0)
{
desloca_linha--;
}
else
{
desloca_linha=7;
F_CONTA_TEMPO=1;
}
}
if (tipo_movimento=='1')
{
desloca_linha=7;
if (desloca_coluna<MAX)
{
if ((desloca_coluna==1) && !F_CONTA_TEMPO)
{
F_CONTA_TEMPO=1;
desloca_coluna++;
}
else
desloca_coluna++;
}
else
{
desloca_coluna=0;
}
}
delay_ms(30);
}
}
else
{
if (F_CONTA_TEMPO)
{
if (conta_tempo_desloca<5000)
conta_tempo_desloca++;
else
{
conta_tempo_desloca=0;
F_CONTA_TEMPO=0;
}
}
}
76
recebe_comando();
} /* end for */
} /* end main */
77
A n e x o B E s q u e m t i c o d o P a in e l d e M a t r i z d e L e d
78
79
80
81
82
83
84
A n e x o F D a t a s h e e t d a n a t r iz d e le d