Objetivo: Capturar o valor analógico lido e exibir na tela LCD + no display de 7 segmentos.
Código feito em CCS C Compiler
#include <16F877A.h>
#device adc = 8
#include <math.h>
#FUSES NOWDT, HS, NOPROTECT, NODEBUG
#FUSES NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(crystal = 20MHz)
#ifndef lcd_enable
#define lcd_enable pin_e1 // pino enable do LCD
#define lcd_rs pin_e2 // pino rs do LCD
//#define lcd_rw pin_e2 // pino rw do LCD
#define lcd_d4 pin_d4 // pino de dados d4 do LCD
#define lcd_d5 pin_d5 // pino de dados d5 do LCD
#define lcd_d6 pin_d6 // pino de dados d6 do LCD
#define lcd_d7 pin_d7 // pino de dados d7 do LCD
#endif
#include <mod_lcd.c>
unsigned int8 valor, aux, c, d, u;
unsigned int8 vetor[] = {0b00111111, 0b00000110, // 0 a 9
0b01011011, 0b01001111, 0b01100110, 0b01101101,
0b01111101, 0b00000111, 0b01111111, 0b01100111 };
void main(){
setup_adc_ports(AN0);
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel(0);
lcd_ini();
while(TRUE){
//TODO: User Code
valor = read_adc();
if(valor >= 99){
valor = 99;
}
aux = valor/100; // extrai o primeiro piso das centenas
c = (int)floor(aux); // converte para inteiro
aux = ((valor/10)-(10*c)); //extrai o primeiro piso das dezenas
d = (int)floor(aux); //converte para inteiro
aux = ((valor)-(100*c)-(10*d)); //extrai o primeiro piso das unidades
u = (int)floor(aux); //converte para inteiro
printf (lcd_escreve,"\fValor = %u\r\n",valor);
delay_ms(20);
output_b(vetor[d]);
output_c(vetor[u]);
}
}
Software: Proteus versão 7.9 |
Nenhum comentário:
Postar um comentário