Nesse exemplo mostro como criar uma rotina extremamente simples para a visualização de uma barra de progresso no LCD

Usar no Proteus 7.10 ou superior.


Fazer o download: [LINGUAGEM C] Criando Barra de Progresso 


Segue o código:

[sections] [section title=”Código Fonte”] [codesyntax lang=”c”] /*
DATEK Tecnologia Eletrônica Ltda.

********************************************************************************
PROGRAMA EXEMPLO: Mostrar como criar uma barra de progresso.
OBJETIVO: Aprender como criar uma barra de progresso.
AUTOR: Fabio Mulero.[fabio@datek.com.br] ********************************************************************************
MICROCONTROLADOR: PIC18F4620.

PLACA DE DESENVOLVIMENTO: SIMULAÇÃO NO PROTEUS

SOFTWARE: MikroC PRO for PIC Versão: 6.0

********************************************************************************
*/
//### DIRETIVAS DE PROGRAMA ####################################################
#include "built_in.h"

//### DEFINES E MACROS #########################################################
// Constantes
#define NAO 0
#define SIM 1
#define DESLIGA NAO
#define LIGA SIM
#define FALSO NAO
#define VERDADEIRO SIM
#define SAIDA NAO
#define ENTRADA SIM
// Macros
#define LIGA_TIMER(Tempo) TMR0ON_bit = LIGA; Tempo_Teste = Tempo;
#define DESLIGA_TIMER() TMR0ON_bit = DESLIGA; Tempo_Teste = 0;

//### DECLARAÇÃO DE ALIASES DOS PINOS ##########################################
//— Configuração dos pinos do LCD ——————————————–
// CONFIGURAÇÃO DOS PINOS DO LCD.
sbit LCD_RS at RD1_bit;
sbit LCD_EN at RD0_bit;
sbit LCD_D7 at RD6_bit;
sbit LCD_D6 at RD5_bit;
sbit LCD_D5 at RD4_bit;
sbit LCD_D4 at RD3_bit;

// DIREÇÃO DOS PINOS.
sbit LCD_RS_Direction at TRISD1_bit;
sbit LCD_EN_Direction at TRISD0_bit;
sbit LCD_D7_Direction at TRISD6_bit;
sbit LCD_D6_Direction at TRISD5_bit;
sbit LCD_D5_Direction at TRISD4_bit;
sbit LCD_D4_Direction at TRISD3_bit;

//################## PROTOTIPOS DE FUNÇÃO ######################################
void CaracteresCustomizado();
void MostraBarra();
void Inicializa_PIC();

//################## VARIAVEIS GLOBAIS #########################################
const char character0[] = {31,0,0,0,0,0,31,0}; // caractere em branco com barra superior e inferior
const char character1[] = {31,16,16,16,16,16,31,0}; // caractere 1 linha com barra superior e inferior
const char character2[] = {31,24,24,24,24,24,31,0}; // caractere 2 linhas com barra superior e inferior
const char character3[] = {31,28,28,28,28,28,31,0}; // caractere 3 linhas com barra superior e inferior
const char character4[] = {31,30,30,30,30,30,31,0}; // caractere 4 linhas com barra superior e inferior
const char character5[] = {31,31,31,31,31,31,31,0}; // caractere 5 linhas com barra superior e inferior

unsigned long Tempo_Teste; // armazena tempo de teste em segundos

/* ROTINA PARA TRATAMENTO DE INTERRUPÇÕES*/
//=== ROTINA PARA TRATAMENTO DE INTERRUPÇÕES ===================================

void interrupt()
{
if(TMR0IF_bit) // INTERRUPÇÃO DO TIMER 0
{
// RECARREGA O TIMER0 para 1 segundo
TMR0H = 0x0B; // CARREGA O VALOR ALTO DO NUMERO 3036.
TMR0L = 0xDC; // CARREGA O VALOR BAIXO DO NUMERO 3036.

TMR0IF_bit = DESLIGA; // LIMPA O FLAG DE ESTOURO DO TIMER0 PARA UMA NOVA CONTAGEM DE TEMPO.
Tempo_Teste–; // DECREMENTA TEMPO.
}
}

//################## FUNÇÃO MAIN() #############################################
void main()
{
Inicializa_PIC();
while(1)
{
MostraBarra();
}
}

//################## FUNÇÕES AUXILIARES ########################################
// função para armazenar caracteres especiais na memoria do LCD
void CaracteresCustomizado()
{
char i;
Lcd_Cmd(64);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character0[i]);
Lcd_Cmd(72);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character1[i]);
Lcd_Cmd(80);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character2[i]);
Lcd_Cmd(88);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character3[i]);
Lcd_Cmd(96);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character4[i]);
Lcd_Cmd(104);
for (i = 0; i<=7; i++) Lcd_Chr_CP(character5[i]);
}

void MostraBarra()
{
unsigned int contador=0,valorbarra;
unsigned long Tempo_Anterior=0;

Lcd_Out(1,1, " DATEK TECNOLOGIA ");
Lcd_Out(2,1, " BARRA DE PROGRESSO ");
Lcd_Out(3,1, " TEMPO: ");
Lcd_Out(4,1, " ");
// Desenha base da barra de progresso
Lcd_Cmd( _LCD_FOURTH_ROW);
for(contador=0;contador<20;contador++)
{
Lcd_Chr_CP(0);
}
#define TEMPO_TIMER 10 // 10 segundos
LIGA_TIMER(TEMPO_TIMER);
while(VERDADEIRO)
{
if(Tempo_Teste!=Tempo_Anterior)
{
// barra de progresso
valorbarra = (TEMPO_TIMER – Tempo_Teste)/((float)TEMPO_TIMER/120);
if(valorbarra)
{
Lcd_Cmd( _LCD_FOURTH_ROW);
for(contador=0;contador<(valorbarra/6);contador++)
{
Lcd_Chr_CP(5);
}
Lcd_Chr_CP((valorbarra%6));
}
// fim barra progresso
// MOSTRA TEMPO DECORRIDO
Lcd_Chr(3,15, (Tempo_Teste/60)/10+’0′);
Lcd_Chr_CP((Tempo_Teste/60)%10+’0′);
Lcd_Chr_CP(‘:’);
Lcd_Chr_CP( (Tempo_Teste%60)/10+’0′);
Lcd_Chr_CP((Tempo_Teste%60)%10+’0′);
Lcd_Chr_CP(‘ ‘);
Tempo_Anterior=Tempo_Teste;
asm{CLRWDT};
if(!Tempo_Teste)
{
break;
}
}
}
DESLIGA_TIMER();
}
void Inicializa_PIC()
{
TRISA = 0xff;
TRISB = 0x00;
CMCON = 0x07; // Desabilita comparadores
//————————————–
// Desabilita todas as interrupções
//————————————–
INTCON = 0; // Desabilita GIE, PEIE, TMR0IE,INT0IE,RBIE
INTCON2 = 0xF5;
INTCON3 = 0xC0;
IPEN_bit = DESLIGA; // Desabilita níveis de prioridade nas interrupções
PIE1 = 0;
PIE2 = 0;
PIR1 = 0;
PIR2 = 0;
RBPU_bit = 0; // PULLUP INTERNO LIGADO
Lcd_Init(); // Inicializa LCD.
Lcd_Cmd(_LCD_CLEAR); // Apaga display.
Lcd_Cmd(_LCD_CURSOR_OFF); // Desliga cursor.
CaracteresCustomizado();
// Config. LCD no modo 4 bits
// Configuração do Timer0.
T0CS_bit = DESLIGA; // Timer0 operando como temporizador.
PSA_bit = DESLIGA; // Prescaler ativado.
T0PS2_bit = T0PS0_bit = LIGA; // Define prescaler 1:64.
T0PS1_bit = DESLIGA; // Define prescaler 1:64
T08BIT_bit = DESLIGA; // Define contagem no modo 16 bits.
// Valor para 1 segundo.
TMR0H = 0x0B; // Carrega o valor alto.
TMR0L = 0xDC; // Carrega o valor baixo.
TMR0IE_bit = LIGA; // Habilita interrupção do timer0.
TMR0IF_bit = DESLIGA; // Apaga flag de estouro do timer0, pois é fundamental para a sinalização do estouro.
TMR0ON_bit = DESLIGA; // Desliga timer0.

PEIE_bit = LIGA; // Habilita as interrupções dos periféricos.
GIE_bit = LIGA; // Habilita as interrupções não-mascaradas.
GIE_GIEH_bit = LIGA; // Habilita as interrupções não-mascaradas.

}
[/codesyntax] [/section] [section title=”Esquema Elétrico”]

Esquema Elétrico Barra Progresso
Esquema Elétrico Barra Progresso
[/section] [/sections]
Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[LINGUAGEM C] Criando Barra de Progresso
Tags:                 

Deixe uma resposta

%d blogueiros gostam disto: