Estoy teniendo un pequeño problema con este código. El código está destinado a crear un LCD MAP, con rutinas de LCD para conectar una pantalla LCD de 7 segmentos con la MCU PIC24FJ128GA310 con controlador LCD interno.
las matrices DIGIT1 a DIGIT6 contienen la asignación de LCD para cada DIGIT de 7 segmentos en la LCD, y todas se guardan en la memoria de códigos.
la matriz DÍGITOS [] está diseñada para contener la dirección de todas las matrices de segmentos, de modo que se pueda usar un índice numérico con DÍGITOS [] para acceder a cada dígito en la pantalla LCD para su visualización.
enum COMS{COM0=0,COM1=0x40,COM2=0x80,COM3=0xC0};
enum SEGS
{//COM 0
SEG_1A = COM0 |0 , SEG_1B = COM0 |53, SEG_2A = COM0 |33, SEG_K1 = COM0 |44,
SEG_K2 = COM0 |22, SEG_K8 = COM0 |21, SEG_4A = COM0 |62, SEG_4B = COM0 |61,
SEG_5A = COM0 |60, SEG_5B = COM0 |59, SEG_6A = COM0 |58, SEG_6B = COM0 |50,
SEG_7A = COM0 |61, SEG_7B = COM0 |48 ,SEG_8A = COM0 |59, SEG_8B = COM0 |26,
SEG_9A = COM0 |25, SEG_9B = COM0 |24, SEG_10A= COM0 |23, SEG_10B= COM0 |45,
SEG_2B = COM0 |52, SEG_3A = COM0 |32, SEG_3B = COM0 |51, SEG_S3 = COM0 |24,
//... LCD MAPS for COM1 - COM3 are ommited here for space
};
const BYTE DIGIT1[] = {SEG_1A,SEG_1B,SEG_1C,SEG_1D,SEG_1E,SEG_1F,SEG_1G};
const BYTE DIGIT2[] = {SEG_2A,SEG_2B,SEG_2C,SEG_2D,SEG_2E,SEG_2F,SEG_2G};
const BYTE DIGIT3[] = {SEG_3A,SEG_3B,SEG_3C,SEG_3D,SEG_3E,SEG_3F,SEG_3G};
const BYTE DIGIT4[] = {SEG_4A,SEG_4B,SEG_4C,SEG_4D,SEG_4E,SEG_4F,SEG_4G};
const BYTE DIGIT5[] = {SEG_5A,SEG_5B,SEG_5C,SEG_5D,SEG_5E,SEG_5F,SEG_5G};
const BYTE DIGIT6[] = {SEG_6A,SEG_6B,SEG_6C,SEG_6D,SEG_6E,SEG_6F,SEG_6G};
//...
const BYTE * Digits[] = {DIGIT1,DIGIT2,DIGI3,DIGIT4,DIGIT5,DIGIT6};
enum DIGITS {DIG1,DIG2,DIG3,DIG4,DIG5,DIG6,DIG7,DIG8,DIG9,DIG10};
enum MASK {
ZERO = 0x3F, ONE = 0x06, TWO = 0x5B, THREE = 0x4F, FOUR = 0x66,
FIVE = 0x6D, SIX = 0x7C, SEVEN = 0x07, EIGHT = 0x7F, NINE = 0x67,
BLANK= 0x00, MINUS = 0x40, OVERFLOW = 0x49,};
void DisplayDigit2(BYTE idx,BYTE Mask)
{
const BYTE * digit;
digit = Digits[idx];
//BYTE vals;
//vals = *digit;
for(i=0; i<8;i++){
DisplaySeg(digit,(Mask&1));
digit++;//incrememt pointer
Mask >>=1;
}
}
La función DisplayDigit2 () se llama así:
DisplayDigit2(DIG1,ONE);//Display 1 on the first digit of the LCD
El código se compila sin problemas, pero cuando intento recorrer el código, el compilador se detuvo en la primera línea
digit = Digits[idx];
con el mensaje "Programa de usuario detenido"
Luego observo que en la ventana del reloj la dirección de DIGIT1 en la memoria del código es 0x48A, mientras que la de DIGIT2 es 0x491.
Pero al verificar su dirección en la matriz DIGITS, veo los valores 0X848A y 0x8491 para DIGIT1 y DIGIT2 respectivamente.
No estoy seguro de dónde exactamente lo entendí mal.