PIC18F46K20 with MPLAB + C18

Status
Not open for further replies.

bla

New Member
Hi,

I'm new here and in C18... So, i was trying to do a clock, and here's my code:


Code:
#include "stdlib.h"
#include "p18f46k20.h"
#include "delays.h"
#include"stdio.h"

int x,z;
int unidadesegundo, dezenasegundo, unidademinuto, dezenaminuto, unidadehora, dezenahora;

Code:
unsigned int convert_7s(int num){

	int vector[11] = {0b01000000, 0b11111001, 0b00100100, 0b00110000, 0b00011001, 0b00010010, 0b00000010, 0b11011000, 0b00000000, 0b00011000};
	return vector[num];

}
Code:
unsigned int habilit_port(int display){

	int vector[6] = {0b00100000, 0b00010000, 0b00001000, 0b00000100, 0b00000010, 0b00000001};
	return vector[display];

}
Code:
void habilit_port_number(unsigned int port, int num){

	switch(port){

		case 1:{
			PORTA = convert_7s(num);
			break;
		}

		case 2:{
			PORTB = convert_7s(num);
			break;
		}

		case 3:{
			PORTC = convert_7s(num);
			break;
		}

		case 4:{
			PORTD = convert_7s(num);	
			break;
		}

	}

}

void habilit_port_habilit(unsigned int port, int display_habilit){

	switch(port){

		case 1:{
			PORTA = habilit_port(display_habilit);
			break;
		}

		case 2:{
			PORTB = habilit_port(display_habilit);
			break;
		}

		case 3:{
			PORTC = habilita_port(display_habilit);
			break;
		}

		case 4:{
			PORTD = habilita_port(display_habilit);	
			break;
		}

	}

}
Code:
void desabilit_port(unsigned int port){

	switch(port){

		case 1:{
			PORTA = 0x00;
			break;
		}

		case 2:{
			PORTB = 0x00;
			break;
		}

		case 3:{
			PORTC = 0x00;
			break;
		}

		case 4:{
			PORTD = 0x00;
			break;
		}

	}

}
Code:
void reset_numbers(int *num1, int *num2, int *num3, int *num4, int *num5, int *num6){

	*num1=0;
	*num2=0;
	*num3=0;
	*num4=0;
	*num5=0;
	*num6=0;

}
Code:
void write_display(int *num1, int *num2, int *num3, int *num4, int *num5, int *num6, int port1, int port2){

//Segundos
	//Unidade
	habilit_port_number(port1, *num1);
	habilit_port_habilit(port2, 0);
	Delay1KTCYx(1);
	desabilit_port(4);

	//Dezena
	habilit_port_number(port1, *num2);
	habilit_port_habilit(port2, 1);
	if(*num1==10){
		(*num2)++;
	}
	Delay1KTCYx(1);
	desabilit_port(4);
	if(*num1==10){
		(*num1)=0;
	}

//Minutos
	//Unidade
	habilit_port_number(port1, *num3);
	habilit_port_habilit(port2, 2);
	if(*num2==6){
		(*num3)++;
	}
	Delay1KTCYx(1);
	desabilit_port(4);
	if(*num2==6){
		(*num2)=0;
	}

	//Dezena
	habilit_port_number(port1, *num4);
	habilit_port_habilit(port2, 3);
	if(*num3==10){
		(*num4)++;
	}
	Delay1KTCYx(1);
	desabilit_port(4);
	if(*num3==10){
		(*num3)=0;
	}

//Horas
	//Unidade
	habilit_port_number(port1, *num5);
	habilit_port_habilit(port2, 4);
	if(*num4==6){
		(*num5)++;
	}
	Delay1KTCYx(1);
	desabilit_port(4);
	if(*num4==6){
		(*num4)=0;
	}

	//Dezena
	if((*num5)==5 && (*num6)==2){
			*num1=0;
			*num2=0;
			*num3=0;
			*num4=0;
			*num5=0;
			*num6=0;
	}else{
		habilit_port_number(port1, *num6);
		habilit_port_habilit(port2, 5);
		if((*num5)==10){
				(*num6)++;
		}
		Delay1KTCYx(1);
		desabilit_port(4);
	}
}
Code:
void main(void){
	
	TRISC= 0x00;
	TRISD= 0b00000000;
	PORTC=0xFF;
	PORTD= 0b00000000;
	
	reset_numbers(&unidadesegundo, &dezenasegundo, &unidademinuto, &dezenaminuto, &unidadehora, &dezenahora);
	
	while(1){
	
		int i;
		for(i=0;i<40;i++){
			write_display(&unidadesegundo, &dezenasegundo, &unidademinuto, &dezenaminuto, &unidadehora, &dezenahora, 3, 4);
			desabilit_port(4);
			if(i==39){
				unidadesegundo++;
			}
		}
	
	}

}


How can I connect a keypad-phone to my code and print at the display the numbers that the user choose on the keypad? Assuming that my keypad is conected on PORTB. :|

Thanks for any help.
 
Last edited:
Code:
MPLAB C18 v3.22 (demo)
Copyright 2000-2008 Microchip Technology Inc.
Days remaining until demo becomes feature limited:  11
C:\MCC18\h\[COLOR=Red][B]p18f4620.h[/B][/COLOR]:43:Error [1109] type mismatch in redeclaration of 'PORTAbit
Thinking you grabbed some code and forgot to change the processor include file name.

Look for this line in your code and fix it.
#include <p18f4620.h>
 
Last edited:
It is a bad idea to go back and edit a thread in this way.

Just add a followup post.

please
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…