Construa um programa (em C) para sistema baseado no microcontrolador PIC16F877A que após o botão B1 ser pressionado ele escreve o dia e o mês do seu nascimento (com interrupção do B1). Quando o B0 for pressionado ele apaga tudo
Ex 25:12 (vinte e cinco de dezembro)
Resolução feita no CCS C Compiler
#include <16F877A.h>
#device adc=8
#use delay(clock = 20MHz)
#fuses NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP
#fuses NOCPD, NOWRT
#define t 5
unsigned int8 display [ ] = {
0b000000, // display desligado
0b000100, // display 1
0b001000, // display 2
0b010000, // display 3
0b100000, // display 4
};
unsigned int8 v1[] = {0b00111111, 0b00000110, 0b01011011,
0b01001111, 0b01100110, 0b01101101, 0b01111101,
0b00000111, 0b01111111, 0b01100111};
#int_EXT
void EXT_isr(void){
enable_interrupts(INT_RTCC);
if(input(PIN_B1) == TRUE){
output_a(display[0]); // desliga todos os display
delay_ms(500);
}
}
void main(){
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL | RTCC_DIV_128);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED, 0, 1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
disable_interrupts(INT_RTCC);
enable_interrupts(INT_EXT);
ext_int_edge(L_TO_H);
enable_interrupts(GLOBAL);
while(true){
for(int i = 0; i < 15; i++){
output_a(display[1]);
output_d(v1[1]);
delay_ms(t);
output_a(display[2]);
output_d(v1[6]);
delay_ms(t);
output_a(display[3]);
output_d(v1[0]);
delay_ms(t);
output_a(display[4]);
output_d(v1[8]);
delay_ms(t);
}
}
}
Saída gerada no PicsimLab |
Nenhum comentário:
Postar um comentário