Ajuda com o Trabalho 2
2 participantes
picminas :: PIC 18F4550 :: PIC 18F4550 :: Firmware
Página 1 de 1
Ajuda com o Trabalho 2
Prezado Bruno, boa noite.
Estou tentando fazer o trabalho 2, porém como estive ausente nas aulas de TIMER e DISPLAY, estou encontrando mta dificuldade.
Apesar de consultar todo material disponivel no site, não consegui fazer o cursor mudar de local para configurar o tempo, usando para confirmar, a o botão boot. Peço que me ajude, fornencendo um caminho ou uma linha de raciocínio para eu poder seguir. Só terei oportunidade de comparecer no sábado de manhã para tirar dúvidas, porém é a data de entrega do trabalho.
Segue abaixo o meu código:
Estou tentando fazer o trabalho 2, porém como estive ausente nas aulas de TIMER e DISPLAY, estou encontrando mta dificuldade.
Apesar de consultar todo material disponivel no site, não consegui fazer o cursor mudar de local para configurar o tempo, usando para confirmar, a o botão boot. Peço que me ajude, fornencendo um caminho ou uma linha de raciocínio para eu poder seguir. Só terei oportunidade de comparecer no sábado de manhã para tirar dúvidas, porém é a data de entrega do trabalho.
Segue abaixo o meu código:
- Código:
/** I N C L U D E S **********************************************************/
#include <p18cxxx.h> // Necessário para que o compilador adicione a biblioteca
// com as definições do PIC selecionado no projeto, neste
// caso, o modelo 18F4550.
#include <string.h> //Biblioteca com rotinas de manipulação de string
// mais informações nos arquivos de ajuda da biblioteca C18
// presentes na propria pasta de instalação, por exemplo,
// C:\MCC18\doc\hlpC18Lib.chm
// Procure pelo item: "Memory and String Manipulation Functions"
#include "my_xlcd.h" // Biblioteca com de rotinas para usar o display LCD no
// Kit PICMINAS v3.0
/** D E F I N E S ************************************************************/
// LED's do Kit PICMINAS: saida digital
//atribuição: 0 = LED desligado
// 1 = LED ligado
#define LED_VERDE PORTCbits.RC2
#define LED_VERMELHO PORTDbits.RD1
#define LED_AMARELO PORTDbits.RD0
// Botões do Kit PICMINAS: entradas digitais
//atribuição: 0 = botao não pressionado
// 1 = botao pressionado
#define BOTAO_1 PORTEbits.RE1
#define BOTAO_2 PORTEbits.RE2
// O Botão de BOOT tem lógica invertida
//atribuição: 0 = botao pressionado
// 1 = botao não pressionado
#define BOTAO_BOOT PORTBbits.RB4
// RELE do Kit PICMINAS: saida digital
//atribuição: 0 = rele desativado
// 1 = rele ativado
#define RELE PORTCbits.RC0
//BUZZER do Kit PICMINAS: saida digital
//atribuição: 0 = buzzer desligado
// 1 = buzzer ligado
#define BUZZER PORTCbits.RC1
/** V A R I A V E I S G L O B A I S ****************************************/
// armazena variavel na memória de programa (FLASH)
// um tipo de sintaxe C para inicializar a variável na DECLARAÇÃO
rom unsigned char linha1[]="*SEJA BEM VINDO*";
rom unsigned char linha2[]="* 2o TRABALHO *";
rom unsigned char linha3[]="CONFIG. O ALARME";
// armazena variavel na memória de dados (SDRAM)
// outro tipo sintaxe C para inicializar a variável na DECLARAÇÃO
//unsigned char linha2[20]="Curso PICMINAS";
unsigned char linha4[]="CONFIG. O ALARME";
/** P R O T O T I P O S P R I V A D O S ***********************************/
void ConfiguraSistema(void);
/** F U N C O E S ************************************************************/
/******************************************************************************
* Funcao: void main(void)
* Entrada: Nenhuma (void)
* Saída: Nenhuma (void)
* Descrição: Função principal do programa. O termo "main" significa principal,
* pois esta é a primeira a ser chamada após o reset do
* microcontrolador.
* Todas as outras funções sao chamadas a partir da "main".
*****************************************************************************/
void main(void)
{
unsigned char contador=0;
unsigned char aux=0;
// Configura as portas e periféricos usados no projeto
ConfiguraSistema();
//Desliga todos os LED's
LED_VERDE=0;
LED_AMARELO=0;
LED_VERMELHO=0;
//Desliga Buzzer
BUZZER=0;
//Desliga Rele
RELE=0;
// Comando: Clear Display
WriteCmdXLCD(0b00000001);
// Seleciona o endereço inicial da linha 1 (0x00) do display
SetDDRamAddr(0x00);
// Escreve a string da "ROM" no display LCD
putrsXLCD(linha1);
// Seleciona o endereço inicial da linha 2 (0x40) do display
SetDDRamAddr(0x40);
// Escreve a string da "ROM" no display LCD
putrsXLCD(linha2);
Delay10KTCYx(1200);
Delay10KTCYx(1200);
Delay10KTCYx(1200);
Delay10KTCYx(1200);
Delay10KTCYx(1200);
Delay10KTCYx(1200);
Delay10KTCYx(1200);
// Comando: Clear Display
WriteCmdXLCD(0b00000001);
// Seleciona o endereço inicial da linha 1 (0x00) do display
SetDDRamAddr(0x00);
// Escreve a string da "ROM" no display LCD
putrsXLCD(linha3);
//SetDDRamAddr(0x40);
//escreve "Contador:" na linha2
strcpypgm2ram(linha4,"Tempo:00:00 ");
// Seleciona o endereço inicial da linha 2 (0x40) do display
SetDDRamAddr(0x40);
// Escreve a string da "RAM" no display LCD
putsXLCD(linha4);
// Laço infinito
while(1)
{
// Se botão1 foi pressionado, incrementa contador
// e escreve no display LCD
if((BOTAO_1))
{
Delay10KTCYx(30); //espera 25ms terminar o ruido do botao
contador++;
// Contador ate 20, se for maior, reinicia a contagem.
if(contador>9)
{
contador = 0;
}
// aguarda soltar o botão 2 para evitar contagem dupla
//na mesma pressionada
while(BOTAO_1);
if(!BOTAO_BOOT)
{
Delay10KTCYx(30); //espera 25ms terminar o ruido do botao
aux++;
if(aux>3)
{
aux=0;
}
}
switch (aux)
{
case 0:
//Escreve o valor de contador no display LCD
SetDDRamAddr(0x4A);
putIntXLCD(contador);
putrsXLCD(" ");
break;
case 1:
//Escreve o valor de contador no display LCD
SetDDRamAddr(0x49);
putIntXLCD(contador);
putrsXLCD(" ");
break;
case 2:
//Escreve o valor de contador no display LCD
SetDDRamAddr(0x47);
putIntXLCD(contador);
putrsXLCD(" ");
break;
case 3:
//Escreve o valor de contador no display LCD
SetDDRamAddr(0x46);
putIntXLCD(contador);
putrsXLCD(" ");
break;
}// fim do switch-case
}
}//end while
}//end main
Re: Ajuda com o Trabalho 2
Primeiramente desculpe por não responder a tempo o post.
Espero ter resolvido essa dúvida com você no sábado. Se alguém mais tiver a mesma dúvida vou deixar a resposta aqui no forum da linha de raciocínio para configuração do tempo no display de LCD fazendo o cursor mover a cada tecla de confirmação do usuário.
Espero ter ajudado,
Bruno S. Avelar
Espero ter resolvido essa dúvida com você no sábado. Se alguém mais tiver a mesma dúvida vou deixar a resposta aqui no forum da linha de raciocínio para configuração do tempo no display de LCD fazendo o cursor mover a cada tecla de confirmação do usuário.
- Código:
char cont = 0;
// CONFIGURACAO DO TEMPO DEFINIDO PELO USUARIO
SetDDRamAddr(0x00);
putrsXLCD(" PROGRAMA TIMER ");
Delay10KTCYx(0);
Delay10KTCYx(0);
Delay10KTCYx(0);
Delay10KTCYx(0);
SetDDRamAddr(0x00);
putrsXLCD(" CONFIGURACAO ");
SetDDRamAddr(0x40);
putrsXLCD("TIME: 00:00 ");
while(BOOT) // DEZEMA DOS MINUTOS
{
Delay10KTCYx(100);
SetDDRamAddr(0x46);
putIntXLCD(cont);
SetDDRamAddr(0x46);
if(B1)
{
Delay10KTCYx(100);
if(cont >= 9)
{
cont = 0;
}
else
{
cont++;
}
}
if(B2)
{
Delay10KTCYx(100);
if(cont <= 0 )
{
cont = 9;
}
else
{
cont--;
}
}
}
Delay10KTCYx(100);
while(!BOOT){}
minutos += cont *10;
cont = 0;
while(BOOT) // UNIDADE DOS MINUTOS
{
Delay10KTCYx(100);
SetDDRamAddr(0x47);
putIntXLCD(cont);
SetDDRamAddr(0x47);
if(B1)
{
Delay10KTCYx(100);
if(cont >= 9)
{
cont = 0;
}
else
{
cont++;
}
}
if(B2)
{
Delay10KTCYx(100);
if(cont <= 0 )
{
cont = 9;
}
else
{
cont--;
}
}
}
Delay10KTCYx(100);
while(!BOOT){}
minutos += cont;
cont = 0;
while(BOOT) // DEZENA DOS SEGUNDOS
{
Delay10KTCYx(100);
SetDDRamAddr(0x49);
putIntXLCD(cont);
SetDDRamAddr(0x49);
if(B1)
{
Delay10KTCYx(100);
if(cont >= 6)
{
cont = 0;
}
else
{
cont++;
}
}
if(B2)
{
Delay10KTCYx(100);
if(cont <= 0 )
{
cont = 6;
}
else
{
cont--;
}
}
}
Delay10KTCYx(100);
while(!BOOT){}
segundos += cont * 10;
cont = 0;
while(BOOT) // UNIDADE DOS SEGUNDOS
{
Delay10KTCYx(100);
SetDDRamAddr(0x4A);
putIntXLCD(cont);
SetDDRamAddr(0x4A);
if(B1)
{
Delay10KTCYx(100);
if(cont >= 9)
{
cont = 0;
}
else
{
cont++;
}
}
if(B2)
{
Delay10KTCYx(100);
if(cont <= 0 )
{
cont = 9;
}
else
{
cont--;
}
}
}
Delay10KTCYx(100);
while(!BOOT){}
segundos += cont;
cont = 0;
Espero ter ajudado,
Bruno S. Avelar
Tópicos semelhantes
» Dúvida no Trabalho
» Borners I/O
» AJUDA PWM COM PIC4550
» Ajuda PWM Timer2
» AJUDA COM MATERIAL/DOCUMENTAÇÃO PARA IMPLEMENTAR TECLADO TOUCH COM PIC
» Borners I/O
» AJUDA PWM COM PIC4550
» Ajuda PWM Timer2
» AJUDA COM MATERIAL/DOCUMENTAÇÃO PARA IMPLEMENTAR TECLADO TOUCH COM PIC
picminas :: PIC 18F4550 :: PIC 18F4550 :: Firmware
Página 1 de 1
Permissões neste sub-fórum
Não podes responder a tópicos