Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Tarcisio Zewe Duarte

Arduino Display matricial de led 5x7, com registrador 74HC595 Microcontroladores

Recommended Posts

Bom dia pessoal, estou tendo um problema em um código que estou desenvolvendo para um contador de display matricial de leds, com cinco displays 5x7 para contar de 0 à 999. Um breve resumo do programa: Ele pega a função “millis” , divide por 1000, e depois grava este valor na variavel inteira “numero”. depois ele executa um laço “for”, onde pega esta variavel, divide por outra variavel inteira “fator”, e divide o resultado desta operação por “BASE”, a qual foi definida no inicio do programa por como sendo 10, e atribui este resultado a uma variável denominada “valor”. E ainda dentro deste laço “for”, ele compara por meio da condição “if” numero correpondente aos cinco digitos do display, e chama uma função para que transfere em um array do tipo “byte” chamado “led”, o caractere correspondente, dos caracteres correspondentes gravados no array do tipo “char matriz”. Despois uma outra função é chamada para pegar cada array “led” e transferir para o um array maior do tipo char 40x7 denominado “máscara” , com a sua devida posição de acordo com a contagem, e por último uma função é chamada para enviar os dados deste ultimo array 40x7 para cinco circuitos integrados 74HC595 registradores de deslocamento, os quais mandam a informação de suas saidas para as colunas dos cinco displays 5x7. Esta mesma função gera ainda os pulsos de clock e reset para um circuito integrado 4017, o qal faz a contagem das linhas e completa a multiplexagem dos display. Ao compilar este código, ele compila normalmente e não aparece nenhum erro. só que os cinco displays simplesmente não acendem. Não se trata de um problema de hardware, pois testei os cinco displays em um outro programa e eles funcionaram normalmente, igualmente com os circuitos integrados 74HC595. Ja o circuito integrado 4017 retirei de um outo circuito que havia montado e também esta funcionando normalmente. Abaixo segue em anexo o código, se alguem tiver tempo de analisar e me ajudar, agradeço:

#define ZERO {B01110000,B10001000,B10011000,B10101000,B11001000,B10001000,B01110000}
#define UM {B00100000,B01100000,B00100000,B00100000,B00100000,B00100000,B01110000}
#define DOIS {B01110000,B10001000,B00001000,B00010000,B00100000,B01000000,B11111000}
#define TRES {B01110000,B10001000,B00001000,B01110000,B00001000,B10001000,B01110000}
#define QUATRO {B00010000,B00110000,B01010000,B10010000,B11111000,B00010000,B00010000}
#define CINCO {B11111000,B10000000,B11110000,B00001000,B00001000,B10001000,B01110000}
#define SEIS {B00110000,B01000000,B10000000,B11110000,B10001000,B10001000,B01110000}
#define SETE {B11111000,B00001000,B00001000,B00010000,B00100000,B00100000,B00100000}
#define OITO {B01110000,B10001000,B10001000,B01110000,B10001000,B10001000,B01110000}
#define NOVE {B01110000,B10001000,B10001000,B01111000,B00001000,B00010000,B01100000}
#define ESPACO {B00000000,B00000000,B00000000,B00000000,B00000000,B00000000,B00000000}

int latchPin = 10;
int clockPin = 13;
int dataPin = 11;
int clock = 9;
int Reset = 8;

const int numCaracteres = 10;
char matriz[numCaracteres][7][8] = {ZERO, UM, DOIS, TRES, QUATRO, CINCO, SEIS, SETE, OITO, NOVE};
byte led0[8][7];
byte led1[8][7] = {ESPACO};
byte led2[8][7];
byte led3[8][7] = {ESPACO};
byte led4[8][7];// columns x rows
char mascara[40][7];
int num_digitos = 3;
int BASE = 10;

void setup() {
Serial.begin(9600);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(clock, OUTPUT);
pinMode(Reset, OUTPUT);
digitalWrite(Reset, HIGH);
digitalWrite(Reset, LOW);
}

void loop() {

int numero = millis() / 1000;

int fator = 1;
for (int digito = num_digitos - 1; digito >= 0; digito = digito - 1)
{
int valor = (numero / fator) % BASE;

Serial.println(valor);

if (digito == 2) {
selecionaMatriz_2(valor);
}
if (digito == 1) {
selecionaMatriz_1(valor);
}
if (digito == 0) {
selecionaMatriz_0(valor);
}
fator = fator * BASE;
}

alocaDigito ();

for (int i = 0; i < 2000; i++)
{
escreveMatriz();
}
}
void selecionaMatriz_2(int pos)
{
Serial.println(pos);
for (int i = 0; i <= 7; i++)
{
for (int j = 0; j <= 6; j++)
{
led0[j] = matriz[pos][j];
}
}
}

void selecionaMatriz_1(int pos)
{
for (int i = 0; i <= 7; i++)
{
for (int j = 0; j <= 6; j++)
{
led2[j] = matriz[pos][j];
}
}
}

void selecionaMatriz_0(int pos)
{
for (int i = 0; i <= 7; i++)
{
for (int j = 0; j <= 6; j++)
{
led4[j] = matriz[pos][j];
}
}
}

void alocaDigito () {
for (int j = 0; j <= 6; j++) {
for (int i = 0; i <= 7; i++) {
mascara[j] = led0[j];
}
}
for (int j = 0; j <= 6; j++) {
for (int i = 8; i <= 15; i++) {
mascara[j] = led1[i - 8][j];
}
}
for (int j = 0; j <= 6; j++) {
for (int i = 16; i <= 23; i++) {
mascara[j] = led2[i - 16][j];
}
}
for (int j = 0; j <= 6; j++) {
for (int i = 24; i <= 31; i++) {
mascara[j] = led3[i - 24][j];
}
}
for (int j = 0; j <= 6; j++) {
for (int i = 32; i <= 39; i++) {
mascara[j] = led4[i - 32][j];
}
}
}

void escreveMatriz()
{
for (int m = 0; m <= 6; m++) {
for (int n = 0; n <= 39; n++) {
mascara[n][m] = ~mascara[n][m];
}
}
for (int linha = 0; linha <= 6; linha++) {
digitalWrite(clock, LOW);
digitalWrite(latchPin, LOW);
for (int coluna = 0; coluna <= 39; coluna++) {
digitalWrite(clockPin, LOW);
if (mascara[coluna][linha] == 1) {
digitalWrite(dataPin, HIGH);
}
else {
digitalWrite(dataPin, LOW);
}
digitalWrite(clockPin, HIGH);
}
digitalWrite(clockPin, LOW);
digitalWrite(latchPin, HIGH);
digitalWrite(clock, HIGH);
if (linha == 6) {
digitalWrite(Reset, HIGH);
digitalWrite(Reset, LOW);
}
}
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×