LCD TIC5231:
Драйвер ML1001.
5 цифр +1.
LCD TIC5231 и PIC
Страница: 1
Сообщений 1 страница 2 из 2
Поделиться12008-05-03 20:23:40
Поделиться22008-05-03 20:38:30
MPLAB IDE версия 7.52
mcc18 версия 3.15
Программа аналогична программе написанной для TIC5234. Но в отличие от 5234 у 5231 сегмерты во всех цифрах расположены соответсвенно, поэтому данная программа скорее всего избыточна.
Но время рассудит.
Код:
#pragma romdata eedata = 0xf00000
rom unsigned char Compile_date[]= __DATE__;
rom unsigned char Compile_time[]= __TIME__;
rom unsigned char Project_name[]= "LCD_5231_v1.0";
#pragma romdata eedata
/*Pin for - Load data from the shift register to data register;*/
#define D_LOAD_L DDRBbits.RB1=0; LATBbits.LATB1=0;
#define D_LOAD_H DDRBbits.RB1=0; LATBbits.LATB1=1;
/*Display data input pin;*/
#define D_IN_L DDRBbits.RB5=0; LATBbits.LATB5=0;
#define D_IN_H DDRBbits.RB5=0; LATBbits.LATB5=1;
/*Pin for the clock of the display data;*/
#define D_CLK_L DDRBbits.RB4=0; LATBbits.LATB4=0;
#define D_CLK_H DDRBbits.RB4=0; LATBbits.LATB4=1;
union segments{
struct{
unsigned Sg_0:1;
unsigned Sg_1:1;
unsigned Sg_2:1;
unsigned Sg_3:1;
unsigned Sg_4:1;
unsigned Sg_5:1;
unsigned Sg_6:1;
unsigned Sg_7:1;
};
volatile unsigned char seg_bits;
};
volatile union segments LCD_5231[5];
volatile union{
struct{
unsigned S_15_dot1:1;
unsigned S_30_dot2:1;
unsigned :1;
unsigned S_38_one:1;
unsigned :2;
unsigned S_39_minus:1;
unsigned S_40_up_minus:1;
};
volatile unsigned char symbols;
}symbols_5231;
volatile union segments LCD_5231_conv[5];
void LCD_5231_conversion(void){
/////////////////////////
LCD_5231_conv[0].Sg_7 = LCD_5231[0].Sg_1;
LCD_5231_conv[0].Sg_6 = LCD_5231[0].Sg_2;
LCD_5231_conv[0].Sg_5 = LCD_5231[0].Sg_3;
LCD_5231_conv[0].Sg_4 = LCD_5231[0].Sg_4;
LCD_5231_conv[0].Sg_3 = LCD_5231[0].Sg_5;
LCD_5231_conv[0].Sg_2 = LCD_5231[0].Sg_6;
LCD_5231_conv[0].Sg_1 = LCD_5231[0].Sg_7;
LCD_5231_conv[0].Sg_0 = LCD_5231[1].Sg_1;
////////////////////////
LCD_5231_conv[1].Sg_7 = LCD_5231[1].Sg_2;
LCD_5231_conv[1].Sg_6 = LCD_5231[1].Sg_3;
LCD_5231_conv[1].Sg_5 = LCD_5231[1].Sg_4;
LCD_5231_conv[1].Sg_4 = LCD_5231[1].Sg_5;
LCD_5231_conv[1].Sg_3 = LCD_5231[1].Sg_6;
LCD_5231_conv[1].Sg_2 = LCD_5231[1].Sg_7;
LCD_5231_conv[1].Sg_1 = symbols_5231.S_15_dot1;
LCD_5231_conv[1].Sg_0 = LCD_5231[2].Sg_1;
/////////////////////////
LCD_5231_conv[2].Sg_7 = LCD_5231[2].Sg_2;
LCD_5231_conv[2].Sg_6 = LCD_5231[2].Sg_3;
LCD_5231_conv[2].Sg_5 = LCD_5231[2].Sg_4;
LCD_5231_conv[2].Sg_4 = LCD_5231[2].Sg_5;
LCD_5231_conv[2].Sg_3 = LCD_5231[2].Sg_6;
LCD_5231_conv[2].Sg_2 = LCD_5231[2].Sg_7;
LCD_5231_conv[2].Sg_1 = LCD_5231[3].Sg_1;
LCD_5231_conv[2].Sg_0 = LCD_5231[3].Sg_2;
/////////////////////////
LCD_5231_conv[3].Sg_7 = LCD_5231[3].Sg_3;
LCD_5231_conv[3].Sg_6 = LCD_5231[3].Sg_4;
LCD_5231_conv[3].Sg_5 = LCD_5231[3].Sg_5;
LCD_5231_conv[3].Sg_4 = LCD_5231[3].Sg_6;
LCD_5231_conv[3].Sg_3 = LCD_5231[3].Sg_7;
LCD_5231_conv[3].Sg_2 = symbols_5231.S_30_dot2;
LCD_5231_conv[3].Sg_1 = LCD_5231[4].Sg_1;
LCD_5231_conv[3].Sg_0 = LCD_5231[4].Sg_2;
/////////////////////////
LCD_5231_conv[4].Sg_7 = LCD_5231[4].Sg_3;
LCD_5231_conv[4].Sg_6 = LCD_5231[4].Sg_4;
LCD_5231_conv[4].Sg_5 = LCD_5231[4].Sg_5;
LCD_5231_conv[4].Sg_4 = LCD_5231[4].Sg_6;
LCD_5231_conv[4].Sg_3 = LCD_5231[4].Sg_7;
LCD_5231_conv[4].Sg_2 = symbols_5231.S_38_one;
LCD_5231_conv[4].Sg_1 = symbols_5231.S_39_minus;
LCD_5231_conv[4].Sg_0 = symbols_5231.S_40_up_minus;
////////////////////////
}
/*DELAY depend from frequency of your resonator*/
void LCD_ML1001_5231_Sst(unsigned char digit_1, unsigned char digit_2, unsigned char digit_3, unsigned char digit_4, unsigned char digit_5, unsigned char ssimv){
char i,temp, n;
LCD_5231[0].seg_bits = digit_1;
LCD_5231[1].seg_bits = digit_2;
LCD_5231[2].seg_bits = digit_3;
LCD_5231[3].seg_bits = digit_4;
LCD_5231[4].seg_bits = digit_5;
symbols_5231.symbols = ssimv;
LCD_5231_conversion();
D_CLK_L
D_LOAD_L
for(n = 4; n >= 0; n--){
temp = LCD_5231_conv[n].seg_bits;
for(i = 0; i <= 7; i++){
if(temp & 0x01){
D_IN_H
D_CLK_H
Nop();//DELAY
D_CLK_L
D_IN_L
}else{
D_IN_L
D_CLK_H
Nop();//DELAY
D_CLK_L
}
temp >>= 1;
}
}
D_LOAD_H
Nop();//DELAY
D_LOAD_L
}
void main(void){
unsigned char i;
unsigned char Digits_523x[10]={0xfa,0x0a,0xb6,0x9e,0x4e,0xdc,0xfc,0x8a,0xfe,0xde};/*0,1,2,3,4,5,6,7,8,9*/
OSCCONbits.IRCF2 = 1;//
OSCCONbits.IRCF1 = 0;// 1MHz ??
OSCCONbits.IRCF0 = 0;//
//LCD_5231/S1_S2_S2_S4_S5_S6_S7_NULL; S15, S30 - DOTS; S38 - LEFT ONE; S39 - 'minus'; S40 -'UP MINUS'//LCD_5231//
while(1){
for (i=0; i<10; i++){
LCD_ML1001_5231_Sst(Digits_523x[i], Digits_523x[i], Digits_523x[i], Digits_523x[i], Digits_523x[i], 0x00);
Delay10KTCYx(25);
}
}
}Программа выводит цифры от 0 до 9 во всех разрядах с интервалом примерно в 1 секунду.
P. S.: В железе работает.
Страница: 1

