• Matéria: Lógica
  • Autor: lcfm1963
  • Perguntado 3 anos atrás

3. O código a seguir é utilizado para exibir números de 0 a 9 em um display de 7 segmentos interfaceado com codificador BCD. void ENVIA_BCD(unsigned char NUMERO) { RB0 = NUMERO & 0b1; RB1 = (NUMERO >> 1) & 0b1; RB2 = (NUMERO >> 2) & 0b1; RB3 = (NUMERO >> 3) & 0b1; } Caso um segundo display seja inserido e a seleção se dê por meio do pino RB4 (0 para display unitário e 1 para display da dezena), qual dos códigos a seguir será capaz de exibir ambos os dígitos simultaneamente para um observador sensível a qualquer variação mais lenta que 50Hz?

Respostas

respondido por: LeonardoDY
0

O código para mostrar os dois dígitos simultaneamente deveria mostrar a unidade durante 10 ms como máximo (desligando a dezena) e logo a dezena durante 10 ms como máximo (desligando a unidade), para eles piscar com frequência de 50 Hz ou mais.

Como se fazer o código para mostrar os dois números?

Se desejarmos mostrar um número de dois dígitos utilizando 4 bits e mais um bit como seleção, o programa deve faze a sequência a seguir:

  • Acender o display das unidades e desligar o display das dezenas;
  • Enviar o código BCD das unidades;
  • Acender o display das dezenas e desligar o display das unidades;
  • Enviar o código BCD das dezenas.

Se essa sequência for feita muito rápido, um observador não notará como os números piscam. O decodificador BCD (por exemplo, o circuito integrado 4511) possui uma entrada chamada BI (Blank Input) que desliga por completo o display ligado a ele

Se o observador é sensível a qualquer variação mais lenta que 50 Hz, a sequência descrita não pode durar mais de \frac{1}{50Hz}=20ms, portanto, cada dígito deveria estar aceso 10 ms e desligado outros 10 ms como máximo.

Utilizando a função apresentada, é possível utilizar o código a seguir para mostrar o número (é importante lembrar que na prática isto é incorreto, pois, retarda a execução de todo o programa, o correto é utilizar uma interrupção de um temporizador):

while(1){

ENVIA_BCD(numero%10);

RB4=0;//Envio a unidade

delay(10);

ENVIA_BCD(numero/10);

RB4=1;//Envio a dezena

delay(10);

//Outras tarefas

}

Saiba mais sobre a linguagem C em https://brainly.com.br/tarefa/28035640

#SPJ1

Anexos:
Perguntas similares