Objetivo: Inverter o estado do Led a cada vez que for pressionado
Código feito em CCS C Compiler
#include <16f877a.h>
#use delay(crystal=20MHz)
void main(){
while(true){
if(input(pin_b0) == 1){
output_toggle(pin_b1);//troca o estado do led
delay_ms(500);// e espera 0,5s
}
}
}
Pesquisar neste blog
26/02/2020
Pisca Leds 4 com PIC 16F877A
Código feito em CCS C Compiler:
#include <16f877a.h>
#use delay(crystal=20MHz)
void main(){
char value[]={0b00000001, 0b00000011, 0b00000110, 0b00001100, 0b00011000, 0b00010000};
while(true){
for(int i=0; i<= 5; i++){
output_b(value[i]);
delay_ms(500);
}
for(i=6; i>= 1; i--){
output_b(value[i-1]);
delay_ms(500);
}
}
}
25/02/2020
Display 7 segmentos usando PIC 16F877A (3)
Código feito em mikro PRO for
void main() {
trisb = 0; //definindo todos os pinos como porta de saída
portb = 0; //desligando todos os pinos
while(1){ //tudo que estiver aqui dentro irá repetir infinitamente
portb = 0b00111111;//forma binária, 'imprimndo o [0]'
delay_ms(500);
portb = 0b00000110;//'imprimndo o [1]'
delay_ms(500);
portb = 91; //forma decimal, 'imprimindo o [2]'
delay_ms(500);
portb = 79; // [3]
delay_ms(500);//0,5s de espera
portb = 0x66; //forma hexadecimal [4]
delay_ms(500);
portb = 0x6D; //forma hexadecimal [5]
delay_ms(500);
portb = 0x7D; // [6]
delay_ms(500);
portb = 0x7;// forma hexadecimal [7]
delay_ms(500);
portb = 0b01111111;//[8]
delay_ms(500);
portb = 0b01100111; //[9]
delay_ms(500);
}
}
24/02/2020
Display 7 segmentos com PIC 16F877A (2)
Laço de repetição no display de 7 segmentos usando goto
Código feito em mikro PRO for
void main() {
trisb = 0;//definindo todos os pinos como saída
portb = 0; //desligando
inicio:
portb = 0b00111111;//forma binária, 'imprimndo o [0]'
delay_ms(500);
portb = 0b00000110;//'imprimndo o [1]'
delay_ms(500);
portb = 91; //forma decimal, 'imprimindo o [2]'
delay_ms(500);
portb = 79; // [3]
delay_ms(500);//0,5s de espera
portb = 0x66; //forma hexadecimal [4]
delay_ms(500);
portb = 0x6D; //forma hexadecimal [5]
delay_ms(500);
portb = 0x7D; // [6]
delay_ms(500);
portb = 0x7;// forma hexadecimal [7]
delay_ms(500);
portb = 0b01111111;//[8]
delay_ms(500);
portb = 0b01100111; //[9]
delay_ms(500);
goto inicio; //retorna para para o inicio
}
Código feito em mikro PRO for
void main() {
trisb = 0;//definindo todos os pinos como saída
portb = 0; //desligando
inicio:
portb = 0b00111111;//forma binária, 'imprimndo o [0]'
delay_ms(500);
portb = 0b00000110;//'imprimndo o [1]'
delay_ms(500);
portb = 91; //forma decimal, 'imprimindo o [2]'
delay_ms(500);
portb = 79; // [3]
delay_ms(500);//0,5s de espera
portb = 0x66; //forma hexadecimal [4]
delay_ms(500);
portb = 0x6D; //forma hexadecimal [5]
delay_ms(500);
portb = 0x7D; // [6]
delay_ms(500);
portb = 0x7;// forma hexadecimal [7]
delay_ms(500);
portb = 0b01111111;//[8]
delay_ms(500);
portb = 0b01100111; //[9]
delay_ms(500);
goto inicio; //retorna para para o inicio
}
Desafio 1
Fazer o Led piscar conforme o gráfico
Resolução:
Código feito em CCS C Compiler
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
void main(){
while(TRUE){
output_low(PIN_B2);
for(int i = 0; i< 50; i++){
for(int j = 0; j < 100; j++){
output_high(PIN_B2);
delay_us(i*(1000/50));
output_low(PIN_B2);
delay_us(1000-(1*(1000/50)));
}
}
}
}
18/02/2020
Pisca Leds 3 com PIC 16F877A
Objetivo: Piscar leds consequentemente usando for
Código feito em CCS C Compiler
#include <16F877a.h>
#use delay(crystal=20MHz)
void main(){
char pins[] = {PIN_B0,PIN_B1,PIN_B2,PIN_B3,PIN_B4};
while(TRUE){
for(int i=0; i<=4; i++){
output_high(pins[i]);
delay_ms(250);
output_low(250);
delay_ms(250);
}
for(i=5; i>=1; i--){
output_high(pins[i-1]);
delay_ms(250);
output_low(pins[i-1]);
delay_ms(250);
}
}
}
Código feito em CCS C Compiler
#include <16F877a.h>
#use delay(crystal=20MHz)
void main(){
char pins[] = {PIN_B0,PIN_B1,PIN_B2,PIN_B3,PIN_B4};
while(TRUE){
for(int i=0; i<=4; i++){
output_high(pins[i]);
delay_ms(250);
output_low(250);
delay_ms(250);
}
for(i=5; i>=1; i--){
output_high(pins[i-1]);
delay_ms(250);
output_low(pins[i-1]);
delay_ms(250);
}
}
}
Display 7 segmentos usando PIC 16F877A (1)
Código feito em mikro PRO for
void main() {
trisb = 0;//definindo todos os pinos como saída
portb = 0; //desligando
portb = 0b00111111;//forma binária, 'imprimndo o [0]'
delay_ms(500);
portb = 0b00000110;//'imprimndo o [1]'
delay_ms(500);
portb = 91; //forma decimal, 'imprimindo o [2]'
delay_ms(500);
portb = 79; // [3]
delay_ms(500);//0,5s de espera
portb = 0x66; //forma hexadecimal [4]
delay_ms(500);
portb = 0x6D; //forma hexadecimal [5]
delay_ms(500);
portb = 0x7D; // [6]
delay_ms(500);
portb = 0x7;// forma hexadecimal [7]
delay_ms(500);
portb = 0b01111111;//[8]
delay_ms(500);
portb = 0b01100111; //[9]
delay_ms(500);
}
PiscaLed 2 com PIC 16F877A
Objetivo: Ligar e desligar vários leds consequentemente
Código feito no software mikroC Pro for, versão 7.2
void main() {
trisb = 0;
/*portb.rb0 = 1;
portb.rb1 = 1;
portb.rb2 = 1;
portb.rb3 = 1;
portb.rb4 = 1;
portb.rb5 = 1;
portb.rb6 = 1;
portb.rb7 = 1;*/
//método2 para ligar todos leds
//portb = 0b11111111;//substitui o método acima, economizando linhas
//método3 para ligar todos leds
portb = 255;//forma em decimal
//portb = 231; //fazendo teste com com a porta 231
delay_ms(500);//desligando os leds começando por rb7
portb.RB7 = 0;
delay_ms(500);
portb.RB6 = 0;
delay_ms(500);
portb.rb5 = 0;
delay_ms(500);//espera 0,5s
portb.rb4 = 0;
delay_ms(500);
portb.RB3 = 0;
delay_ms(500);
portb.RB2 = 0;
delay_ms(500);
portb.rb1 = 0;
delay_ms(500);
portb.rb0 = 0;
delay_ms(500);
}
Simulador usando Proteus 8.8 |
Código feito no software mikroC Pro for, versão 7.2
void main() {
trisb = 0;
/*portb.rb0 = 1;
portb.rb1 = 1;
portb.rb2 = 1;
portb.rb3 = 1;
portb.rb4 = 1;
portb.rb5 = 1;
portb.rb6 = 1;
portb.rb7 = 1;*/
//método2 para ligar todos leds
//portb = 0b11111111;//substitui o método acima, economizando linhas
//método3 para ligar todos leds
portb = 255;//forma em decimal
//portb = 231; //fazendo teste com com a porta 231
delay_ms(500);//desligando os leds começando por rb7
portb.RB7 = 0;
delay_ms(500);
portb.RB6 = 0;
delay_ms(500);
portb.rb5 = 0;
delay_ms(500);//espera 0,5s
portb.rb4 = 0;
delay_ms(500);
portb.RB3 = 0;
delay_ms(500);
portb.RB2 = 0;
delay_ms(500);
portb.rb1 = 0;
delay_ms(500);
portb.rb0 = 0;
delay_ms(500);
}
17/02/2020
Pisca Led1 com PIC 16F877A
Software Proteus 8.8 |
Código feito em CCS C Compiler
#include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES BROWNOUT //Reset when brownout detected
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
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_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
// TODO: USER CODE!!
while(true){
output_high(PIN_B2);
delay_ms(1000);
output_low(PIN_B2);
delay_ms(1000);
}
}
Assinar:
Postagens (Atom)