Спасибо за совет. Почитал немного стало понятнее. Теперь проблема в том что не реагируют 2 ножки (A6 (segment 1) и A7(segment 2)), хотя я их настроил как пины LCD.
void lcd_init(void)
{
MCU_LCDPS = 0;
MCU_WFT = 1;
// activate the 32khz oscillator for our clock source*/
MCU_T1OSCEN = 1;
MCU_LCDSE0=0x37;
MCU_LCDSE1=0x14;
MCU_LCDSE2=0x13;
/*******************************************************/
// Configure LCDCON
// LCD enbled
// LCD enabled in sleep
// LCD Clock Select - T1OSC
// LCD Commons - 1/4
MCU_LMUX0 = 1;
MCU_LMUX1 = 1;
MCU_CS0 = 1;
MCU_CS1 = 0;
MCU_WERR = 0;
MCU_SLPEN = 0;
// clear ALL SEGMENT DATA
MCU_LCDIF = 0;
MCU_LCDDATA0 = 0;
MCU_LCDDATA1 = 0;
MCU_LCDDATA2 = 0;
MCU_LCDDATA3 = 0;
MCU_LCDDATA4 = 0;
MCU_LCDDATA5 = 0;
MCU_LCDDATA6 = 0;
MCU_LCDDATA7 = 0;
MCU_LCDDATA8 = 0;
MCU_LCDDATA9 = 0;
MCU_LCDDATA10 = 0;
MCU_LCDDATA11 = 0;
// Reference ladder control
MCU_LCDRL = 0x30;
// Configure LCDREF
// Internal reference enabled
// Internal Reference Source
// Internal Reference always on
MCU_LCDREF = 0;
MCU_LCDIRE = 1;
MCU_LCDIRS = 0;
MCU_LCDIRI = 0;
MCU_LCDCST = 0;
MCU_LCDEN = 1;
}
void lcd_display_off(void)
{
MCU_LCDEN = 0;
}
void lcd_display_on(void)
{
MCU_LCDEN = 1;
}
typedef union
{
INT16 val;
struct
{
unsigned digit0 : 4;
unsigned digit1 : 4;
unsigned digit2 : 4;
unsigned digit3 : 4;
};
} BCD_TYPE;
#define SEG_A 0x01
#define SEG_B 0x02
#define SEG_C 0x04
#define SEG_D 0x08
#define SEG_E 0x10
#define SEG_F 0x20
#define SEG_G 0x40
#define SEG_DP 0x80
#define DIGIT_0 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F)
#define DIGIT_1 (SEG_B | SEG_C)
#define DIGIT_2 (SEG_A | SEG_B | SEG_G | SEG_E | SEG_D)
#define DIGIT_3 (SEG_A | SEG_B | SEG_C | SEG_G | SEG_D)
#define DIGIT_4 (SEG_F | SEG_G | SEG_C | SEG_B)
#define DIGIT_5 (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D)
#define DIGIT_6 (SEG_A | SEG_F | SEG_G | SEG_C | SEG_D | SEG_E)
#define DIGIT_7 (SEG_A | SEG_B | SEG_C)
#define DIGIT_8 (SEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F | SEG_G)
#define DIGIT_9 (SEG_A | SEG_B | SEG_C | SEG_F | SEG_G)
#define DIGIT_A (SEG_A | SEG_B | SEG_C | SEG_E | SEG_F | SEG_G)
#define DIGIT_B (SEG_F | SEG_G | SEG_C | SEG_D | SEG_E)
#define DIGIT_C (SEG_A | SEG_F | SEG_E | SEG_D)
#define DIGIT_D (SEG_B | SEG_C | SEG_D | SEG_E | SEG_G)
#define DIGIT_E (SEG_A | SEG_F | SEG_G | SEG_E | SEG_D)
#define DIGIT_F (SEG_A | SEG_F | SEG_G | SEG_E)
typedef union
{
int val;
struct
{
unsigned segdp : 1;
unsigned segg : 1;
unsigned segf : 1;
unsigned sege : 1;
unsigned segd : 1;
unsigned segc : 1;
unsigned segb : 1;
unsigned sega : 1;
};
} SEVEN_SEGMENT_TYPE;
// Glass pin 5
#define RC MCU_SEG0COM0
#define BATT MCU_SEG0COM1
#define MINUS MCU_SEG0COM2
#define AC MCU_SEG0COM3
// Glass pin 6
#define DH MCU_SEG1COM0
#define RH MCU_SEG1COM1
#define BC4 MCU_SEG1COM2
#define DP4 MCU_SEG1COM3
// Glass pin 7
#define A3 MCU_SEG2COM0
#define F3 MCU_SEG2COM1
#define E3 MCU_SEG2COM2
#define D3 MCU_SEG2COM3
// Glass pin 8
#define B3 MCU_SEG4COM0
#define G3 MCU_SEG4COM1
#define C3 MCU_SEG4COM2
#define DP3 MCU_SEG4COM3
// Glass pin 9
#define A2 MCU_SEG5COM0
#define F2 MCU_SEG5COM1
#define E2 MCU_SEG5COM2
#define D2 MCU_SEG5COM3
// Glass pin 10
#define B2 MCU_SEG10COM0
#define G2 MCU_SEG10COM1
#define C2 MCU_SEG10COM2
#define DP2 MCU_SEG10COM3
// Glass pin 11
#define A1 MCU_SEG12COM0
#define F1 MCU_SEG12COM1
#define E1 MCU_SEG12COM2
#define D1 MCU_SEG12COM3
// Glass pin 12
#define B1 MCU_SEG16COM0
#define G1 MCU_SEG16COM1
#define C1 MCU_SEG16COM2
//#define SEG16COM3
// Glass pin 13
#define S1 MCU_SEG17COM0
#define S2 MCU_SEG17COM1
#define MILLI MCU_SEG17COM2
#define MEGA MCU_SEG17COM3
// Glass pin 14
#define AMPS MCU_SEG20COM0
#define VOLT MCU_SEG20COM1
#define KILO MCU_SEG20COM2
#define OHMS MCU_SEG20COM3
int1 lcd_display_digits(BCD_TYPE

{
// Map Digit 3
INT8 val;
/*int8*/ const SEVEN_SEGMENT_TYPE segment_data[] = {DIGIT_0, DIGIT_1, DIGIT_2, DIGIT_3, DIGIT_4, DIGIT_5, DIGIT_6, DIGIT_7, DIGIT_8, DIGIT_9, DIGIT_A, DIGIT_B, DIGIT_C, DIGIT_D, DIGIT_E, DIGIT_F};
// The long list of IF statements was the fastest code as of HITEC 9.65PL1
if(MCU_WA) // çàïèñü â ðåãèñòð LCD ðàçðåøåíà (lcdps<4>) //MCU_WA = MCU_LCDPS.4
{
val = segment_data[b.digit0].val;
if(val & SEG_A)
{
A1 = 1;
}
if(!(val & SEG_A))
{
A1 = 0;
}
if(val & SEG_B)
{
B1 = 1;
}
if(!(val & SEG_B))
{
B1 = 0;
}
if(val & SEG_C)
{
C1 = 1;
}
if(!(val & SEG_C))
{
C1 = 0;
}
if(val & SEG_D)
{
D1 = 1;
}
if(!(val & SEG_D))
{
D1 = 0;
}
if(val & SEG_E)
{
E1 = 1;
}
if(!(val & SEG_E))
{
E1 = 0;
}
if(val & SEG_F)
{
F1 = 1;
}
if(!(val & SEG_F))
{
F1 = 0;
}
if(val & SEG_G)
{
G1 = 1;
}
if(!(val & SEG_G))
{
G1 = 0;
}
val = segment_data[b.digit1].val;
if(val & SEG_A)
{
A2 = 1;
}
if(!(val & SEG_A))
{
A2 = 0;
}
if(val & SEG_B)
{
B2 = 1;
}
if(!(val & SEG_B))
{
B2 = 0;
}
if(val & SEG_C)
{
C2 = 1;
}
if(!(val & SEG_C))
{
C2 = 0;
}
if(val & SEG_D)
{
D2 = 1;
}
if(!(val & SEG_D))
{
D2 = 0;
}
if(val & SEG_E)
{
E2 = 1;
}
if(!(val & SEG_E))
{
E2 = 0;
}
if(val & SEG_F)
{
F2 = 1;
}
if(!(val & SEG_F))
{
F2 = 0;
}
if(val & SEG_G)
{
G2 = 1;
}
if(!(val & SEG_G))
{
G2 = 0;
}
val = segment_data[b.digit2].val;
if(val & SEG_A)
{
A3 = 1;
}
if(!(val & SEG_A))
{
A3 = 0;
}
if(val & SEG_B)
{
B3 = 1;
}
if(!(val & SEG_B))
{
B3 = 0;
}
if(val & SEG_C)
{
C3 = 1;
}
if(!(val & SEG_C))
{
C3 = 0;
}
if(val & SEG_D)
{
D3 = 1;
}
if(!(val & SEG_D))
{
D3 = 0;
}
if(val & SEG_E)
{
E3 = 1;
}
if(!(val & SEG_E))
{
E3 = 0;
}
if(val & SEG_F)
{
F3 = 1;
}
if(!(val & SEG_F))
{
F3 = 0;
}
if(val & SEG_G)
{
G3 = 1;
}
if(!(val & SEG_G))
{
G3 = 0;
}
if(b.digit3 > 0)
{
BC4 = 1;
}
else
{
BC4 = 0;
}
return (1);
}
return (0);
}
Файлы .c и .h проекта.