📄 display.c
字号:
/*********************************************************
Project: ST FST(TDA7540)
File name: DISPLAY.C
Description:
Write/Modify: Perry Liang
Time: 2006-1-24- 15:32:09
*********************************************************/
#include "public.h"
#define NotShowPos 9
#define NotShowBit 7
const unsigned char ICON_POS[]=
{
0,3,5,7,1,9,11,15,
19,19,17,15,15,16,15,10,
15,19,15,15,15,NotShowPos,NotShowPos,NotShowPos,
16,16,16,16,16,16,16,NotShowPos,
17,17,17,17,17,17,17,NotShowPos,
18,18,18,18,18,18,18,NotShowPos
};
const unsigned char ICON_BIT[]=
{
7,4,5,6,3,4,5,6,
6,5,7,1,0,7,5,0,
7,7,2,3,4,NotShowBit,NotShowBit,NotShowBit,
0,1,2,3,4,5,6,NotShowBit,
0,1,2,3,4,5,6,NotShowBit,
0,1,2,3,4,5,6,NotShowBit,
};
const unsigned char DIGIT_POS[]=
{
//ABCDEFGHIJKLMN
//ABCDEFGKHIJM*L
0,1,1,0,0,0,0,1,0,1,1,0,NotShowPos,1,
2,3,3,2,2,2,2,3,2,2,3,2,NotShowPos,3,
4,5,5,4,4,3,4,5,4,4,5,4,NotShowPos,4,
6,7,7,6,5,5,6,7,6,6,6,6,NotShowPos,6,
8,9,9,8,7,7,8,8,8,8,8,7,NotShowPos,8,
10,11,11,10,9,9,10,10,9,10,10,9,NotShowPos,10,
12,12,13,12,11,11,11,12,11,12,12,11,NotShowPos,12,
14,14,14,13,13,13,13,14,13,14,14,13,NotShowPos,14,
1,3,7,12,13,14,5,NotShowPos,NotShowPos,NotShowPos,NotShowPos,NotShowPos,NotShowPos,NotShowPos
};
const unsigned char DIGIT_BIT[]=
{
//ABCDEFGKHIJM*L
0,2,1,1,5,6,2,4,3,7,5,4,NotShowBit,6,
1,3,2,2,6,7,3,5,4,0,6,5,NotShowBit,7,
2,4,3,3,7,0,4,6,5,1,7,6,NotShowBit,0,
3,5,4,4,0,1,5,7,6,2,0,7,NotShowBit,1,
4,6,5,5,1,2,6,0,7,3,1,0,NotShowBit,2,
5,7,6,6,2,3,7,1,0,4,2,1,NotShowBit,3,
6,0,7,7,3,4,0,2,1,5,3,2,NotShowBit,4,
7,1,0,0,4,5,1,3,2,6,4,3,NotShowBit,5,
0,1,3,1,6,2,2,NotShowBit,NotShowBit,NotShowBit,NotShowBit,NotShowBit,NotShowBit,NotShowBit
};
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
// -----A -----
// |F \I |J /K |B
// --G-- --H--
// |E /L |M \N |C
// -----D------
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
const unsigned int DIGIT_CODE[]=
{
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, // '0'
SEG_B|SEG_C, // '1'
SEG_A|SEG_B|SEG_D|SEG_E|SEG_G|SEG_H, // '2'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_G|SEG_H, // '3'
SEG_B|SEG_C|SEG_F|SEG_G|SEG_H, // '4'
SEG_A|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H, // '5'
SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H, // '6'
SEG_A|SEG_B|SEG_C|SEG_F, // '7'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H, // '8'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H, // '9'
/* 10-31 */
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,
0,0,
//32
0x0000, // (Space)
//SEG_A|SEG_I|SEG_K|SEG_M, // '!'
SEG_J|SEG_M|SEG_D, // '!'
SEG_B|SEG_J, // '"'
SEG_D|SEG_E|SEG_F|SEG_J|SEG_G|SEG_H|SEG_M, // '#'
SEG_D|SEG_E|SEG_F|SEG_J|SEG_G|SEG_M, // 'o'
SEG_C|SEG_F|SEG_K|SEG_L, // '%'
SEG_A|SEG_C|SEG_D|SEG_E|SEG_I|SEG_K|SEG_G|SEG_N, // '&'
SEG_K, // '''
SEG_K|SEG_N, // '('
SEG_I|SEG_L, // ')'
SEG_I|SEG_J|SEG_K|SEG_G|SEG_H|SEG_L|SEG_M|SEG_N, // '*'
SEG_J|SEG_G|SEG_H|SEG_M, // '+'
SEG_L, // ','
SEG_G|SEG_H, // '-'
//SEG_M, // '.'
SEG_N, // '.'
SEG_K|SEG_L, // '/'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, // '0'
SEG_B|SEG_C, // '1'
SEG_A|SEG_B|SEG_D|SEG_E|SEG_G|SEG_H, // '2'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_G|SEG_H, // '3'
SEG_B|SEG_C|SEG_F|SEG_G|SEG_H, // '4'
SEG_A|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H, // '5'
SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H, // '6'
SEG_A|SEG_B|SEG_C|SEG_F, // '7'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H, // '8'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H, // '9'
SEG_J|SEG_M, // ':'
SEG_J|SEG_L, // '//'
SEG_K|SEG_N, // '<'
SEG_D|SEG_G|SEG_H, // '='
SEG_I|SEG_L, // '>'
SEG_A|SEG_B|SEG_F|SEG_H|SEG_M, // '?'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_G|SEG_M, // '@'
SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H, // 'A'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_H|SEG_M, // 'B'
SEG_A|SEG_D|SEG_E|SEG_F, // 'C'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_M, // 'D'
SEG_A|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H, // 'E'
SEG_A|SEG_E|SEG_F|SEG_G|SEG_H, // 'F'
SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_H, // 'G'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H, // 'H'
SEG_A|SEG_D|SEG_J|SEG_M, // 'I'
SEG_B|SEG_C|SEG_D|SEG_E, // 'J'
SEG_E|SEG_F|SEG_K|SEG_G|SEG_N, // 'K'
SEG_D|SEG_E|SEG_F, // 'L'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_K, // 'M'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_N, // 'N'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, // 'O'
SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H, // 'P'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_N, // 'Q'
SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H|SEG_N, // 'R'
SEG_A|SEG_C|SEG_D|SEG_I|SEG_H, // 'S'
SEG_A|SEG_J|SEG_M, // 'T'
SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, // 'U'
SEG_E|SEG_F|SEG_K|SEG_L, // 'V'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_L|SEG_N, // 'W'
SEG_I|SEG_K|SEG_L|SEG_N, // 'X'
SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H, // 'Y'
SEG_A|SEG_D|SEG_K|SEG_L, // 'Z'
0x0000,
0x0000,
0x0000,
0x0000,
SEG_D, // '_'
SEG_K, // '''
SEG_A|SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H, // 'A'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_H|SEG_M, // 'B'
SEG_A|SEG_D|SEG_E|SEG_F, // 'C'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_J|SEG_M, // 'D'
SEG_A|SEG_D|SEG_E|SEG_F|SEG_G|SEG_H, // 'E'
SEG_A|SEG_E|SEG_F|SEG_G|SEG_H, // 'F'
SEG_A|SEG_C|SEG_D|SEG_E|SEG_F|SEG_H, // 'G'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_G|SEG_H, // 'H'
SEG_A|SEG_D|SEG_J|SEG_M, // 'I'
SEG_B|SEG_C|SEG_D|SEG_E, // 'J'
SEG_E|SEG_F|SEG_K|SEG_G|SEG_N, // 'K'
SEG_D|SEG_E|SEG_F, // 'L'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_K, // 'M'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_I|SEG_N, // 'N'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, // 'O'
SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H, // 'P'
SEG_A|SEG_B|SEG_C|SEG_D|SEG_E|SEG_F|SEG_N, // 'Q'
SEG_A|SEG_B|SEG_E|SEG_F|SEG_G|SEG_H|SEG_N, // 'R'
SEG_A|SEG_C|SEG_D|SEG_I|SEG_H, // 'S'
SEG_A|SEG_J|SEG_M, // 'T'
SEG_B|SEG_C|SEG_D|SEG_E|SEG_F, // 'U'
SEG_E|SEG_F|SEG_K|SEG_L, // 'V'
SEG_B|SEG_C|SEG_E|SEG_F|SEG_L|SEG_N, // 'W'
SEG_I|SEG_K|SEG_L|SEG_N, // 'X'
SEG_B|SEG_C|SEG_D|SEG_F|SEG_G|SEG_H, // 'Y'
SEG_A|SEG_D|SEG_K|SEG_L, // 'Z'
};
/*********************************************
Function: DisplayInit
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:44
*********************************************/
void DisplayInit(void)
{
unsigned char i;
PD_LCDCE=1;//PC3--push-pull output
PO_LCDCE=1;
Pin_LCDCE=1;
PD_LCDCLK=1;//PC3--push-pull output
PO_LCDCLK=1;
Pin_LCDCLK=1;
PD_LCDDO=1;//PC5--push-pull output
PO_LCDDO=1;
Pin_LCDDO=1;
PD_LCDINH=1;//PA4--push-pull output
PO_LCDINH=1;
Pin_LCDINH=1;
for (i=0;i<20;i++)
{
DispBuff[i]=0;
}
DisplayClear(CLEARALL);
/*DispNum[0]='T';
DispNum[1]='E';
DispNum[2]='S';
DispNum[3]='T';
DispNum[4]=1;
DispNum[5]='2';
DispNum[6]='O';
DispNum[7]='K';
DispNum[8]=1;
F_DISP_MUTE=1;
DisplayRefresh();*/
}
/*********************************************
Function: DisplayMain
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:42
*********************************************/
void DisplayMain(void)
{
unsigned char i;
for(i=0;i<6;i++)
{
if(UIcon[i].byte!=BcIcon[i])
{
F_DispRefresh=1;
BcIcon[i]=UIcon[i].byte;
}
}
if(F_DispRefresh)
{
F_DispRefresh=0;
DisplayNumber();
DisplayIcon();
DisplaySentData();
}
if(System.DispMode.Current==DISPMODE_CD||System.AccMode==ACCMODE_ACCONINIT||System.AccMode==ACCMODE_ACCOFFINIT)
Animation(ANIMATION_RUN);
}
/*********************************************
Function: DisplayRefresh
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:41
*********************************************/
void DisplayRefresh(void)
{
F_DispRefresh=1;
}
/*********************************************
Function: DisplayClear
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:40
*********************************************/
void DisplayClear(unsigned char mode)
{
unsigned char i;
switch(mode)
{
case CLEARICON:
for (i=0;i<6;i++)
{
UIcon[i].byte=0;
BcIcon[i]=0;
}
break;
case CLEARNUM:
for (i=0;i<9;i++)
{
DispNum[i]=' ';
}
break;
case CLEARNUM8:
for (i=0;i<8;i++)
{
DispNum[i]=' ';
}
break;
case CLEARNUM9:
for (i=8;i<9;i++)
{
DispNum[i]=' ';
}
break;
case CLEARALL:
for (i=0;i<6;i++)
{
UIcon[i].byte=0;
BcIcon[i]=0;
}
for (i=0;i<9;i++)
{
DispNum[i]=' ';
}
break;
}
DisplayRefresh();
}
/*********************************************
Function: DisplayIcon
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:38
*********************************************/
void DisplayIcon(void)
{
unsigned char i,j,test;
for(i=0;i<6;i++)
{
for(j=0,test=1;j<8;j++,test<<=1)
{
if(UIcon[i].byte & test)
DispBuff[ICON_POS[i*8+j]] |= (0x01<<(ICON_BIT[i*8+j]));
else
DispBuff[ICON_POS[i*8+j]] &= (~(0x01<<(ICON_BIT[i*8+j])));
}
}
}
/*********************************************
Function: DisplayNumber
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:36
*********************************************/
void DisplayNumber(void)
{
unsigned char i,j;
unsigned int dispmask,test;
for(i=0;i<9;i++)
{
dispmask=DIGIT_CODE[DispNum[i]];
for(j=0,test=1;j<14;j++,test<<=1)
{
if(dispmask & test)
DispBuff[DIGIT_POS[i*14+j]] |= (0x01<<(DIGIT_BIT[i*14+j]));
else
DispBuff[DIGIT_POS[i*14+j]] &= (~(0x01<<(DIGIT_BIT[i*14+j])));
}
}
}
/*********************************************
Function: DisplaySentData
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:34
*********************************************/
void DisplaySentData(void)
{
unsigned char i;
Pin_LCDCE=0;
Pin_LCDCLK=0;
DisplaySentByte(0x82);
M_WAIT;
Pin_LCDCE=1;
for (i=0;i<20;i++)
{
DisplaySentByte(DispBuff[i]);
}
Pin_LCDCE=0;
}
/*********************************************
Function: DisplaySentByte
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:33
*********************************************/
void DisplaySentByte(unsigned char bytedata)
{
unsigned char i,test;
for(i=0,test=0x80;i<8;i++,test>>=1)
{
Pin_LCDCLK=0;
if(bytedata&test)
Pin_LCDDO=1;
else
Pin_LCDDO=0;
M_WAIT;
Pin_LCDCLK=1;
}
Pin_LCDCLK=0;
}
/*********************************************
Function: DisplayTimer100ms
Description:
Write/Modify: Perry.Liang
Time: 2006-1-24- 15:42:32
*********************************************/
void DisplayTimer100ms(void)
{
if(AniTimer>0)AniTimer--;
}
unsigned char ReturnDispNum(unsigned int inputnum,unsigned int pos)
{
return((inputnum/pos)%10+'0');
}
void PrintAnimation(unsigned char *p)
{
unsigned char i;
for(i=0;;i++,p++)
{
AniBuff[i]=*p;
if(*p==0)break;
}
}
void Animation(unsigned char mode,unsigned char *p,unsigned char bgtime)
{
unsigned char i,temp;
switch(mode)
{
case 0://run
if(!F_DispAnimation)
break;
if(AniTimer>0)
break;
//AniTimer=3;
AniTimer=6;
for(i=0,temp=0;i<8;i++)
{
if(*PAni)
{
DispNum[i]=*PAni;
}
else
{
DispNum[i]=' ';
temp=1;
}
PAni++;
}
if(temp)
{
PAni=PAni-AniPos-8;
AniPos=0;
AniTimer=AniBeginTime;
AniCounter++;
}
else
{
if(AniPos==0)
AniTimer=AniBeginTime;
PAni-=7;
AniPos++;
}
F_DispRefresh=1;
break;
case 1://start
PAni=p;
AniPos=0;
AniBeginTime=bgtime;
AniCounter=0;
F_DispAnimation=1;
break;
case 2://stop
F_DispAnimation=0;
break;
}
}
void BackupIconBuffer(void)
{
//F_DISP_BC_MP3 =F_DISP_MP3;
//F_DISP_BC_FOLDER=F_DISP_BC_FOLDER;
//F_DISP_BC_TAPE=F_DISP_BC_TAPE;
//F_DISP_BC_ST=F_DISP_ST;
F_DISP_BC_LOC=F_DISP_LOC;
F_DISP_BC_DSP=F_DISP_DSP;
F_DISP_BC_CLASSIC=F_DISP_CLASSIC;
F_DISP_BC_POP=F_DISP_POP;
F_DISP_BC_ROCK=F_DISP_ROCK;
F_DISP_BC_LOUD=F_DISP_LOUD;
F_DISP_BC_AF=F_DISP_AF;
F_DISP_BC_TA=F_DISP_TA;
F_DISP_BC_TP=F_DISP_TP;
F_DISP_BC_PTY=F_DISP_PTY;
F_DISP_BC_EON= F_DISP_EON;
F_DISP_BC_REG= F_DISP_REG;
F_DISP_BC_P=F_DISP_P;
F_DISP_BC_MP3=F_DISP_MP3;
F_DISP_BC_TAPE=F_DISP_TAPE;
F_DISP_BC_CD=F_DISP_CD ;
F_DISP_BC_CD1=F_DISP_CD1;
F_DISP_BC_CD2=F_DISP_CD2;
F_DISP_BC_CD3=F_DISP_CD3;
VOLBcIcon1.byte=UIcon[3].byte;
VOLBcIcon2.byte=UIcon[5].byte;
SpectrumBcIcon.byte=UIcon[4].byte;
DisplayClear(CLEARICON);
}
void ResetIconBuffer(void)
{
F_DISP_LOC=F_DISP_BC_LOC;
F_DISP_DSP=F_DISP_BC_DSP;
F_DISP_CLASSIC=F_DISP_BC_CLASSIC;
F_DISP_POP=F_DISP_BC_POP;
F_DISP_ROCK=F_DISP_BC_ROCK;
F_DISP_LOUD=F_DISP_BC_LOUD;
F_DISP_AF=F_DISP_BC_AF;
F_DISP_TA=F_DISP_BC_TA;
F_DISP_TP=F_DISP_BC_TP;
F_DISP_PTY=F_DISP_BC_PTY;
F_DISP_EON= F_DISP_BC_EON;
F_DISP_REG= F_DISP_BC_REG;
F_DISP_P=F_DISP_BC_P;
F_DISP_MP3=F_DISP_BC_MP3;
F_DISP_TAPE=F_DISP_BC_TAPE;
F_DISP_CD=F_DISP_BC_CD ;
F_DISP_CD1=F_DISP_BC_CD1;
F_DISP_CD2=F_DISP_BC_CD2;
F_DISP_CD3=F_DISP_BC_CD3;
UIcon[3].byte=VOLBcIcon1.byte;
UIcon[5].byte=VOLBcIcon2.byte;
UIcon[4].byte=SpectrumBcIcon.byte;
DisplayRefresh();
}
/*********************************************************
File End
*********************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -