📄 lcd_dis.c
字号:
Pos_Switch(&left,&top); // 坐标变换
Pos_Switch(&right,&bottom); //坐标变换
if(left>right)
{
uiTemp = left;
left = right;
right = uiTemp;
}
if(top>bottom)
{
uiTemp = top;
top = bottom;
bottom = uiTemp;
}
if(Mode==0)
{
Line(left,top,left,bottom);
Line(left,top,right,top);
Line(right,bottom,left+1,bottom);
Line(right,bottom,right,top+1);
}
else
{
for(uiTemp=top;uiTemp<=bottom;uiTemp++)
{
Line_f(left,uiTemp,right);//,uiTemp);
}
}
}
//========================================================================
// 函数: void Writ_Dot(int x,int y,unsigned int Color)
// 描述: 填充以x,y为坐标的象素
// 参数: x X轴坐标 y Y轴坐标 Color 像素颜色
// 返回: 无
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
// 本函数提供可进行坐标变换的接口
// 版本:
// 2006/10/15 First version
//========================================================================
void Writ_Dot(int x,int y,unsigned int Color)
{
#if LCD_XY_Switch == 0
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(x,y,Color);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(LCD_X_MAX - x,y,Color);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(x,LCD_Y_MAX - y,Color);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y,Color);
#endif
#endif
#if LCD_XY_Switch == 1
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(y,x,Color);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Write_Dot_LCD(y,LCD_Y_MAX - x,Color);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(LCD_X_MAX - y,x,Color);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Write_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x,Color);
#endif
#endif
}
//========================================================================
// 函数: unsigned int Get_Dot(int x,int y)
// 描述: 获取x,y为坐标的象素
// 参数: x X轴坐标 y Y轴坐标
// 返回: Color 像素颜色
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
// 本函数提供可进行坐标变换的接口
// 版本:
// 2006/10/15 First version
//========================================================================
unsigned int Get_Dot(int x,int y)
{
#if LCD_XY_Switch == 0
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
return Get_Dot_LCD(x,y);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
return Get_Dot_LCD(LCD_X_MAX - x,y);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
return Get_Dot_LCD(x,LCD_Y_MAX - y);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
return Get_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
#endif
#endif
#if LCD_XY_Switch == 1
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
return Get_Dot_LCD(y,x);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
return Get_Dot_LCD(y,LCD_Y_MAX - x);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
return Get_Dot_LCD(LCD_X_MAX - y,x);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
return Get_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
#endif
#endif
}
//========================================================================
// 函数: void Clear_Dot(int x,int y)
// 描述: 清除以x,y为坐标的象素
// 参数: x X轴坐标 y Y轴坐标
// 返回: 无
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
// 本函数提供可进行坐标变换的接口
// 版本:
// 2006/10/15 First version
//========================================================================
void Clear_Dot(int x,int y)
{
#if LCD_XY_Switch == 0
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Clear_Dot_LCD(x,y);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Clear_Dot_LCD(LCD_X_MAX - x,y);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Clear_Dot_LCD(x,LCD_Y_MAX - y);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Clear_Dot_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
#endif
#endif
#if LCD_XY_Switch == 1
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Clear_Dot_LCD(y,x);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Clear_Dot_LCD(y,LCD_Y_MAX - x);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Clear_Dot_LCD(LCD_X_MAX - y,x);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Clear_Dot_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
#endif
#endif
}
//========================================================================
// 函数: void Set_Dot_Addr(int x,int y)
// 描述: 设置当前需要操作的象素地址
// 参数: x X轴坐标 y Y轴坐标
// 返回: 无
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
// 本函数提供可进行坐标变换的接口
// 版本:
// 2006/10/15 First version
//========================================================================
void Set_Dot_Addr(int x,int y)
{
#if LCD_XY_Switch == 0
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Set_Dot_Addr_LCD(x,y);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Set_Dot_Addr_LCD(LCD_X_MAX - x,y);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Set_Dot_Addr_LCD(x,LCD_Y_MAX - y);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Set_Dot_Addr_LCD(LCD_X_MAX - x,LCD_Y_MAX - y);
#endif
#endif
#if LCD_XY_Switch == 1
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
Set_Dot_Addr_LCD(y,x);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
Set_Dot_Addr_LCD(y,LCD_Y_MAX - x);
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
Set_Dot_Addr_LCD(LCD_X_MAX - y,x);
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
Set_Dot_Addr_LCD(LCD_X_MAX - y,LCD_Y_MAX - x);
#endif
#endif
}
//========================================================================
// 函数: void Pos_Switch(unsigned int * x,unsigned int * y)
// 描述: 将画面的坐标变换为实际LCD的坐标体系,以便于快速画圆形以及矩形
// 参数: x X轴坐标 y Y轴坐标
// 返回: 无
// 备注: 这里以及之前的所有x和y坐标系都是用户层的,并不是实际LCD的坐标体系
// 本函数提供可进行坐标变换的接口
// 版本:
// 2006/10/15 First version
//========================================================================
void Pos_Switch(unsigned int * x,unsigned int * y)
{
*x = *x;
*y = *y;
#if LCD_XY_Switch == 0
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
*x = LCD_X_MAX-*x;
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
*y = LCD_Y_MAX-*y;
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
*x = LCD_X_MAX-*x;
*y = LCD_Y_MAX-*y;
#endif
#endif
#if LCD_XY_Switch == 1
unsigned int uiTemp;
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 0)
uiTemp = *x;
*x = y;
*y = uiTemp;
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 0)
uiTemp = LCD_Y_MAX-*x;
*x = *y;
*y = uiTemp;
#endif
#if (LCD_X_Rev == 0)&&(LCD_Y_Rev == 1)
uiTemp = *x;
*x = LCD_X_MAX-*y;
*y = uiTemp;
#endif
#if (LCD_X_Rev == 1)&&(LCD_Y_Rev == 1)
uiTemp = LCD_Y_MAX - *x;
*x = LCD_X_MAX-*y;
*y = uiTemp;
#endif
#endif
}
//========================================================================
// 函数: void W_Line_f(int s_x,int s_y,int e_x,int e_y,int Mode)
// 描述: 以s_x,s_y为起点,e_x,e_y为终点连续填充一条直线上的点.用于画矩形、圆
// 参数: x X轴坐标 y Y轴坐标
// 返回: 无
// 备注: 以实际的LCD坐标体系为准
// 版本:
// 2006/10/16 First version
//========================================================================
void Line_f(int s_x,int s_y,int e_x)//,int e_y)
{
unsigned int uiTemp;
if(s_x>e_x)
{
uiTemp = s_x;
s_x = e_x;
e_x = uiTemp;
}
Write_Dot_LCD(s_x++,s_y,BMP_Color);
for(;s_x<=e_x;s_x++)
Fill_Dot_LCD(BMP_Color);
}
//========================================================================
// 函数: void ClrScreen(void)
// 描述: 全屏以初始化屏幕色的颜色进行清屏
// 参数: 无
// 返回: 无
// 备注: 无
// 版本:
// 2007/01/16 First version
//========================================================================
void ClrScreen(void)
{
Set_Dot_Addr_LCD(0,0);
LCD_Fill(LCD_INITIAL_COLOR);
}
//========================================================================
// 函数: void ClrScreen(void)
// 描述: 显示一个带pos_point位小数的最长不超过5位数的数字
// 参数: x,y 为显示起点坐标,P[]为汉字串位索引,d为显示的数据,n为显示的总的数据,point为小数位数
// 返回: 无
// 备注: 无
// 版本:
// 2008.07.25 First version
//========================================================================
void disp_numeric(unsigned int x , unsigned int y, unsigned int d , unsigned char n , unsigned char point)
{
char str[7],i;
unsigned int j=1;
//str[5]=d%10+'0';
//str[4]=(d/10)%10+'0';
// str[3]=(d/100)%10+'0';
// str[2]=(d/1000)%10+'0';
// str[1]=d/10000+'0';
for(i=0;i<n;i++)
{
str[n-1-i]=(d/j%10)+'0';
j*=10;
}
str[n]=0;
if(point!=0)
{
for(i=n;i>=n-point;i--)
{
str[i+1]=str[i];
}
str[i+1]='.';
}
PutString(x,y,str);
}
void fill_rect(unsigned char left , unsigned char top , unsigned char right , unsigned char bottom , unsigned int color)
{
SetPaintMode(0,color);
Rectangle(left, top, right,bottom, 1);
}
//========================================================================
// 函数: write_bank(int x,int y,int color)
// 描述: 写入一个当前字体大小的空格
// 参数: x X轴坐标 y Y轴坐标
// color 空格颜色
// 返回: 无
// 备注:
// 版本:
// 2006/10/15 First version
//========================================================================
void write_blank(int x,int y,int color)
{
int i,j;//,K; //数据暂存
j = 0;
while((j ++) < Y_Witch)
{
if(y > Dis_Y_MAX) break;
i = 0;
while(i < X_Witch)
{
if((x+i) > Dis_X_MAX) break;
Writ_Dot(x+i,y,color);
i++;
}
y ++;
}
}
void write_blanks(int x , int y , int color , unsigned char n)
{
int i;//,K; //数据暂存
int X;
for(i=0;i<n;i++)
{
X=x+i*X_Witch;
if(X>DIS_X_MAX)break;
write_blank(X,y,color);
}
}
//========================================================================
// 函数: void PutChar(int x,int y,unsigned int a)
// 描述: 写入一个标准字符
// 参数: x X轴坐标 y Y轴坐标
// a 要显示的字符在字库中的偏移量
// mode 1 :背景填上背景色,
// 0 :背景不填色,这种情况如果文字位置原先有文字,则写上文字后,两文字将重叠,看不清
// 返回: 无
// 备注: ASCII字符可直接输入ASCII码即可
// 版本:
// 2006/10/15 First version
//========================================================================
void PutChar(int x , int y , unsigned int a , unsigned char mode )
{
int i,j;//,K; //数据暂存
unsigned char *p_data;
unsigned char Temp;
p_data = Char_TAB + a*Font_Wrod; //要写字符的首地址
j = 0;
while((j ++) < Y_Witch)
{
if(y > Dis_Y_MAX) break;
i = 0;
while(i < X_Witch)
{
if((i&0x07)==0)
{
Temp = *(p_data ++);
}
if((x+i) > Dis_X_MAX) break;
if((Temp & 0x80) > 0) {
Writ_Dot(x+i,y,Char_Color);
}
else if(mode)
Temp = Temp << 1;
i++;
}
y ++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -