Como puedo hacer para realizar la funcion de remarcado en codigo C para un 16f84a, aqui le mando el codigo en C de lo que ya tengo hecho y ademas en montaje en proteus.... la idea es que pueda remarcar todos los numeros marcados anteriormente... no pude subir los archivos adjuntos asi que les pegue el codigo...
////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
//rutina para generar los pulsos con el TECLADO y salen por RA0 ///
//RA1= 0 COLGADO, RA1=1 DESCOLGADO, RA2=0 MARCACION TONO, RA2=1 MARCACION PULSO/
// RA3= 0 MARCACIÓN ON, RA3=1 MARCACIÓN OFF,RA4=0 RADIAL OFF, RA4=1 RADIAL ON///
////////////////////////////////////////////////////////////////////////////////
#include <16F84A.h>
#fuses XT,NOWDT,NOPUT,NOPROTECT
#use delay(clock=4000000)
#define use_portb_kbd TRUE
#include "kbd2.c" //las comillas es si está en la misma carpeta de .c
#use fast_io(a)
////////////////////////////////////////////////////////////////////////////////
void main() {
char k; //k para el lcd
int j,i,t; //i para el bucle for, t para el bucle de los bit
//pulso=0;
port_b_pullups(true);//activo resistencias pull-ups
set_tris_a(0xFE);//11111110
inicio:
if (input(PIN_A1)) { //si RA1=1 descolgado
output_high(PIN_A0); // para q hayan los 7 voltios
///////////////////////////////////////////////////////////////////////////////
//Rutina para explorar el tecldo,
//luego genera los pulsos correspondientes, exectuando las teclas * y #
///////////////////////////////////////////////////////////////////////////////
do { //bucle de exploracion del TECLADO
teclado:
if (input(PIN_A1)){ //verifico si esta descolgado
if (!input(PIN_A2)){ //si RA2=0 es marcacion de pulso
if (!input(PIN_A3)){ // RA3=0 marcación on
k=kbd_getc(); // devuelve la tecla y la guarda en K
if(k!=0) { // si k distinto de "0" ejecuta
j++;
if((k!="A")&&(k!="B")){ //si k es distinto de * y #
t=(k)&(0x0f); // k and 0x0f -->t para separar datos
if(t!=0){ //si t distinto de 0 ejecuta
loop: for (i=0;i<t;i++){ //rutina para enviar los pulsos
enviar_pulso: output_low(PIN_A0); //impulso de cierre //colgado
delay_ms(60); //retardo de 60ms
output_high(PIN_A0); //impulso de ruptura //descolgado
delay_ms(40);} //retardo de 40ms
delay_ms(650); //pausa interdigital de 650ms
i=0; }
else { t=10; //numero marcado el cero
goto enviar_pulso;}}
else goto teclado;
}
}
else
goto inicio;}
else
goto inicio;}
else
goto inicio;}
while(true);
}
else { output_low(PIN_A0); //regresa a la posicion colgado
goto inicio;}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////
//kbd2.c libreria del teclado que estoy usando
////////////////////////////////////////////////////////////////////////////////////////////////////////
/*-------------------------------------------*
| KBD2.C |
| Autor: Pedro Mª Jiménez |
| (c) Microsystems Engineering (Bilbao) |
*-------------------------------------------*/
// Funciones para la gestión del teclado de la Trainer PLUS.
// char kbd_getc() Devuelve el código ASCII de la tecla pulsada.
// Si no se pulsó ninguna, devuelve 0.
// Conexiones del teclado.
/*
RB0 RB1 RB2 RB3
^ ^ ^ ^
| | | |
|---|---|---|---|
RB4 ---> | 1 | 2 | 3 | F |
|---|---|---|---|
RB5 ---> | 4 | 5 | 6 | E |
|---|---|---|---|
RB6 ---> | 7 | 8 | 9 | D |
|---|---|---|---|
RB7 ---> | A | 0 | B | C |
|---|---|---|---|
*/
// Caracteres ASCII asociados a cada tecla:
char const KEYS[4][4] = {{"1","2","3","F"},
{"4","5","6","E"},
{"7","8","9","D"},
{"A","0","B","C"}};
#byte kbd_port_b = 6
char kbd_getc()
{
char tecla=0;
int f,c,t,i,j;
port_b_pullups(true);
set_tris_b(0b00001111); // RB7-RB4 salidas, RB3-RB0 entradas
for(f=0x10, i=0; i<4; f<<=1, i++)
{
for(c=0x01, j=0; j<4; c<<=1, j++)
{
kbd_port_b = ~f;
delay_cycles(1);
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0);
if(t == c)
{
delay_ms(20);
tecla=KEYS[j];
while(t==c)
{
restart_wdt();
t = kbd_port_b & 0x0F;
t = ~(t | 0xF0);
}
break;
}
}
if(tecla)
break;
}
port_b_pullups(false);
return tecla;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////