Ir ao conteúdo

Posts recomendados

Postado

Bom, pessoal. Estou fazendo um projeto chamado 'Semáfaro com contador'. O projeto consiste em um semáfaro com um display de 7 segmentos. Esse display mostra o tempo que ele vai passar em cada sinal(Verde, amarelo, vermelho). Por exemplo: Se eu colocar 9 segundos para passar no sinal vermelho, o display mostra do 9 até o 0, com um delay de 1 segundo. Estou com dificuldade no código em adicionar um segundo display de 7 segmentos para mostrar valores maiores que 9 segundos. Dei uma pesquisada e não achei nada parecido. Segue foto do esquematico sem o segundo display e do codigo

foto1.PNG

foto2.PNG

foto3.PNG

foto4.PNG

Postado

Desconheço a linguagem, mas não era só você criar um matriz para os possíveis estados de cada led e pegar os vetores dessa matriz e ir chamando elas a cada passo que você quer? Claro, tem que ligar o outro display em em outras portas...

 

A não ser que você use algum driver para display de 7 segmentos para controlá-los (um MAX da vida).

  • Membro VIP
Postado

De fato não analisei o fonte assembly. Mas provavelmente fizeste uma tabela com os "desenhos" de 0 a 9 e um index pra localizar o desenho né? Neste caso basta-te colocar o display em outro port pra acomodar a dezena. Algo como (em c sorry)
 

PB0=tabela[resultado/10] // dezena
PB3=tabela[resultado%10] //unidade: o que sobra da divisão

Pesquise no teu asm qual a instrução de divisão.

Ah.... me lembro vagamente que o 51 tem uma instrução algo como

DA A ;//sorry não confirmei no google.. só na memória mesmo

que faz o acumulador se transformar em decimal nos 2 nibbles mantendo o valor. Especialmente útil pro teu caso.

 

 

Postado

@Isadora Ferraz Não. No código eu passo o valor e ele decrementa, mostrando cada valor até zerar. Os leds não influenciam. A dificuldade ta em coloca em um outro display mesmo. Eu tava pesquisando e tem algo a ver com a porta dp do display, mas nao sei como faz.

  • Membro VIP
Postado
3 horas atrás, xskolz disse:

Não. No código eu passo o valor e ele decrementa, mostrando cada valor até zerar. Os leds não influenciam. A dificuldade ta em coloca em um outro display mesmo

pois é minino ... não vi conexão com led mas enfim penso que você deve dar preferência pra saber como, por quê, quando ele faz isso a nível bem baixo mesmo até de bit se necessário. Vamos tentar dar uma desenferrujada...

tipo assim... Pra constar, mexi com asm 8051 há muitos (e muitos!) anos...

Tipo ....penso que você "aponta para o dado" dptr datapointer ou seu "dp" para a tabela. Digito de memória (fraca)

mov dptr,#tabela

digamos que a seja 5. e quando aparece o comando

movc a,@a+dptr

ele pega o valor (o "desenho") que está no endereço tabela+5 e põe no a

Quando faz portb=a, pronto... o "desenho" ou forma ou padrão do número 5 fica no portb.

Mas isso foi chover no molhado pois penso que você já sabia pois o fonte é seu né? NÉ?!. Se não, cogite dar uma reestudada no asm 51.

Pra colocar dezena em outro display - outro port - e fazer (em assembly) as continhas que te passei pra achar o decimal e unidade. Dei uma googlada e olha isso que  legal. Em especial,  o que confirmo da minha vaga lembrança,  a instrução da a que pode facilitar sua vida pra indexar unidade e dezena da tabela

 

Pena que em assembly posso te ajudar pouco ou quase nada. Mas valeu pra eu abrir um pouco meu baú mofado kk

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!