📄 lcd.c
字号:
Lcd_wc=CSRW; LCDWAIT;
Lcd_wd=Cursor_X; LCDWAIT;
Lcd_wd=Cursor_Y; LCDWAIT;
Lcd_wc=MWRITE; LCDWAIT;
Lcd_wd=Read_Data&(~(0x80>>Counter));
LCDWAIT;
}/*==============================================*/
/************************************************/
/* */
/* Lcd_Line: 划线子程序 */
/* */
/* (X0,Y0): 起始点坐标 */
/* (X1,Y1): 终止点坐标 */
/* */
/* X0,X1: 0-319 */
/* Y0,Y1: 0-239 */
/* */
/************************************************/
void Lcd_Line1(unsigned int X0,unsigned int Y0,unsigned int X1,unsigned int Y1)
{ unsigned int Cursor_X,Cursor_Y;
unsigned int Counter,Dot_Type;
unsigned int Read_Data,Read_Flag;
double k;
if (Y0>Y1) {Counter=Y0;Y0=Y1;Y1=Counter;}
if (Y1>=239) Y1=239;
for (Counter=Y0;Counter<=Y1;Counter++)
{Lcd_Point1(X0,Counter);}
}
/************************************************/
/* */
/* Lcd_Cctw: 写点阵字符子程序 */
/* */
/* Row: 行坐标<0-29(240/8-1)> */
/* Column: 列坐标<0-39(320/8-1)> */
/* (Dot1,Dot2): 点阵格式 */
/* (eg:8x8,8x16,16x16,16x32,...) */
/* Data_Add: 点阵数据首址 */
/* Flag: 反显标志 */
/* Flag=Normal 正常显示 */
/* Flag=Abnormal 反白显示 */
/* */
/************************************************/
void Lcd_Cctw(unsigned int Row,unsigned int Column,unsigned int Dot1,unsigned int Dot2,pointer *Data_Add)
{ unsigned int Cursor_X,Cursor_Y;
unsigned int Counter1,Counter2;
Cursor_X=((Row<<3)*Lcd_AP+Column+0x4000)&0x00ff;
Cursor_Y=(((Row<<3)*Lcd_AP+Column+0x4000)&0xff00)>>8;
Lcd_wc=CSRDIR_DW; LCDWAIT;
for(Counter2=0;Counter2<(Dot1>>3);Counter2++)
{Lcd_wc=CSRW; LCDWAIT;
Lcd_wd=Cursor_X;LCDWAIT;
Lcd_wd=Cursor_Y;LCDWAIT;
Lcd_wc=MWRITE; LCDWAIT;
for(Counter1=0;Counter1<Dot2;Counter1++)
{Lcd_wd=*(Data_Add++);LCDWAIT;
}
Cursor_X++;
}
}
/************************************************/
/* */
/* Lcd_Out_Bmp: 显示位图子程序 */
/* Dot_X: x坐标(0-319) */
/* Dot_Y: y坐标(0-239) */
/* (Dot1,Dot2): 位图点阵格式 */
/* Data_Add: 位图数据首地址 */
/* Flag: 反显标志 */
/* Flag=Normal 正常显示 */
/* Flag=Abnormal 反白显示 */
/* */
/************************************************/
void Lcd_Out_Bmp(unsigned int Dot_X,unsigned int Dot_Y,unsigned int Dot1,unsigned int Dot2,pointer *Data_Add)
{
unsigned int Cursor_X,Cursor_Y;
unsigned int Counter1,Counter2;
Cursor_X=(Dot_Y*Lcd_AP+(Dot_X>>3)+0x4000)&0x00ff;
Cursor_Y=((Dot_Y*Lcd_AP+(Dot_X>>3)+0x4000)&0xff00)>>8;
Lcd_wc=CSRDIR_RG; LCDWAIT;
for(Counter2=0;Counter2<Dot2;Counter2++)
{
Lcd_wc=CSRW; LCDWAIT;
Lcd_wd=Cursor_X; LCDWAIT;
Lcd_wd=Cursor_Y; LCDWAIT;
Lcd_wc=MWRITE; LCDWAIT;
for(Counter1=0;Counter1<(Dot1>>3);Counter1++)
{ Lcd_wd=*(Data_Add++);
LCDWAIT;
}
Cursor_Y=Cursor_Y+((Cursor_X+Lcd_AP)>>8);
Cursor_X=(Cursor_X+Lcd_AP)&0x00ff;
}
}/*============================================*/
/************************************************/
/* */
/* Lcd_Real8x16: 显示实型数子程序 */
/* (8x16点阵) */
/* Row: 行坐标<0-29(240/8-1)> */
/* Column: 列坐标<0-39(320/8-1)> */
/* Real_Data: 实型数 */
/* Dot_Bit: 显示有效位数 */
/* */
/************************************************/
void Lcd_Real8x16(unsigned int Row,unsigned int Column,double Real_Data,unsigned int Dot_Bit)
{int Dis_Data[20];
int Counter=1;
int Dot_Flag=0;
pointer *Data_Add;
if (Real_Data<0)
{Dis_Data[0]=11; /*'-'*/
Real_Data=fabs(Real_Data);
}
else Dis_Data[0]=10; /*' '*/
while (Real_Data>=10.0)
{Real_Data=Real_Data/10.0;
Dot_Flag++;
Counter=1;
}
while (Real_Data<1)
{if (Real_Data==0)
{goto AAA;}
Real_Data=Real_Data*10.0;
Dis_Data[1]=0; /* '0'*/
Dis_Data[2]=12; /* '.'*/
Counter=3-Dot_Flag;
Dis_Data[Counter]=0; /*'0'*/
Dot_Flag--;
}
AAA: for (Counter=Counter;Counter<=(Dot_Bit+1);Counter++)
{Dis_Data[Counter]=(int)Real_Data;
Real_Data=(Real_Data-(Dis_Data[Counter]))*10.0;
if (Dot_Flag==0)
{Counter=Counter+1;
Dis_Data[Counter]=12; /*'.'*/
}
Dot_Flag--;
}
for (Counter=0;Counter<Dot_Bit+2;Counter++)
{Data_Add=Ascii[0]+((Dis_Data[Counter])<<4);
Lcd_Cctw(Row,Column,8,16,Data_Add);
Column++;
}
}/*==============================================*/
/************************************************/
/* */
/* Lcd_Int8x16: 显示整型数子程序 */
/* (8x8点阵) */
/* Row: 行坐标<0-29(240/8-1)> */
/* Column: 列坐标<0-39(320/8-1)> */
/* Int_Data: 实型数 */
/* */
/************************************************/
void Lcd_Int8x16(unsigned int Row,unsigned int Column,int Int_Data)
{ int Dis_Data[15]; /* Int Max(16Bit)=32768 */
int Counter=1;
long int temp;
pointer *Data_Add;
if (Int_Data<0)
{Int_Data=-1*Int_Data;
Dis_Data[0]=11; /*'-'*/
Dis_Data[1]=12; /*.*/
Counter=2;
}
else if(Int_Data>0)
{Dis_Data[0]=10; /*' '*/
Counter=1;
}
else {Dis_Data[0]=10; /*' '*/
Dis_Data[1]=0; /*'0'*/
Counter=2;
}
for (;Int_Data>0;Counter++)
{temp=Int_Data;
Int_Data=Int_Data/10;
Dis_Data[Counter]=temp-Int_Data*10;
}
Data_Add=Ascii[0]+(Dis_Data[0]<<4);
Lcd_Cctw(Row,Column,8,16,Data_Add);
for (;Counter>1;Counter--)
{Data_Add=Ascii[0]+((Dis_Data[Counter-1])<<4);
Lcd_Cctw(Row,++Column,8,16,Data_Add);
}
}/*====================================================*/
void Lcd_Ascii(unsigned int Row,unsigned int Column,unsigned int Character)
{ pointer *Data_Add;
Data_Add=Ascii[0]+Character*16;
Lcd_Cctw(Row,Column,8,16,Data_Add);
}/*===========================================================*/
void Lcd_Axis(unsigned int Row,unsigned int Column,unsigned int XX,unsigned int YY)
{unsigned int X0,Y0,X1,Y1,i,j; /*画坐标轴*/
X0=Row;
Y0=Column;
Y1=YY;
X1=XX;
Lcd_Line(Y0,X0,Y1,X0); /*共记320个点,y轴*/
Lcd_Line(Y1-5,X0-5,Y1,X0); /*y轴左侧箭头(20)*/
Lcd_Line(Y1-5,X0+5,Y1,X0); /*y轴右侧箭头(20)*/
Lcd_Line(Y0,X0,Y0,X1); /*共记220个点,x轴*/
Lcd_Line(Y0,X1,Y0-5,X1+5); /*x轴上侧箭头(20)*/
Lcd_Line(Y0,X1,Y0+5,X1+5); /*x轴下侧箭头(20)*/
for (i=1;i<=9;i++)
{Y0=Y0+26; X0=X0-16; /*160/16=10,hotizontal*/
Lcd_Line(Y0,200,Y0,197); /*260/16=10,vertical*/
Lcd_Line(40,X0,43,X0);
}
}/*======================================================*/
void CursorMove(unsigned section,int x,int y) /*type=0,1,2区*/
{unsigned int s;
s=x+y*Lcd_AP+section*0x4000; LCDWAIT;LCDWAIT;
Lcd_wc=0x46; LCDWAIT; LCDWAIT;
Lcd_wd=s; LCDWAIT; LCDWAIT;
Lcd_wd=s>>8; LCDWAIT;LCDWAIT; LCDWAIT; LCDWAIT;
}/*-------------------------------------------------*/
void ReadChar(unsigned page,unsigned x,unsigned y,unsigned d[])
{unsigned int i,k,d0;
CursorMove(page,x,y);
Lcd_wc=CSRDIR_DW; LCDWAIT; LCDWAIT;
Lcd_wc=0x43; LCDWAIT; LCDWAIT;
for(i=0;i<8;i++)
{d[i]=Lcd_wc; LCDWAIT; LCDWAIT;
d[i] &= 0x00ff;
}
for(i=0;i<8;i++)
{d0=d[i]<<8;
for(k=0;k<8;k++)
{d[k]=((d[k]>>1) & 0xff00) + (d[k] & 0x00ff);
d[k]=d[k] | (d0 & 0x8000);
d0=d0<<1 ;
}
}
for(i=0;i<8;i++)
{d[i]>>=8;}
}/*=====================================================*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -