📄 lcd.c
字号:
break;
case 4:
Address = 0x98;
break;
default:
break;
}
//在第row行写八个字
LCD_Write(0,Address);
for(i=0;i<16;i++)
{
if(!blankflag)
LCD_Write(1,str[i]);
else
LCD_Write(1,0x20);
}
}
/***********************************************************************************************
** 函数名称:LCD_Point()
** 函数功能:写LCD画点数据
** 入口参数:uint16 x 横坐标
uint16 y 纵坐标
uint8 disp_onoff 0:清零某一点;1:点亮某一点
** 出口参数:无
***********************************************************************************************/
/*void LCD_Point(uint16 x, uint16 y, uint8 disp_onoff)
{
uint16 z=0;
z = (63-y) * 16 + (x/8);
if (disp_onoff == 0)
chartab4[z] = (chartab4[z] & (~(0x80 >> (x%8))));
else
chartab4[z] = (chartab4[z] | (0x80 >> (x%8)));
//LCD_GRP(chartab4);
}*/
void LCD_Point(uint16 x, uint16 y, uint8 disp_onoff)
{
uint16 z=0;
z = (63-x) * 16 + (y/8);
if (disp_onoff == 0)
chartab4[z] = (chartab4[z] & (~(0x80 >> (y%8))));
else
chartab4[z] = (chartab4[z] | (0x80 >> (y%8)));
LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Modify_Point()
** 函数功能:修改chartab4数组函数
** 入口参数:uint16 x 横坐标
uint16 y 纵坐标
** 出口参数:无
***********************************************************************************************/
void Modify_Point(uint16 x, uint16 y)
{
uint16 z=0;
z = (63-x) * 16 + (y/8);
chartab4[z] |= (0x80 >> (y%8));
}
void Draw_Point(uint16 x, uint16 y)
{
uint16 z=0;
z = (63-x) * 16 + (y/8);
chartab4[z] |= (0x80 >> (y%8));
//LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Draw_HLine()
** 函数功能:在第row(0~63)行画从最左端至最右端的直线
** 入口参数:uint8 row ;LCD行参数,取值范围0~63
** 出口参数:无
***********************************************************************************************/
void Draw_HLine(uint8 row)
{
uint8 x,y;
for(x=row,y=0;y<128;y++)
Modify_Point(x,y);
LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Draw_HLine2()
** 函数功能:在第row(0~63)行画从starty至endy的直线
** 入口参数:uint8 row ;LCD行参数,取值范围0~63;starty和endy在0~127之间
** 出口参数:无
***********************************************************************************************/
void Draw_HLine2(uint8 starty,uint8 endy,uint8 row)
{
uint8 x,y;
for(x=row,y=starty;y<endy;y++)
Modify_Point(x,y);
LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Draw_VLine()
** 函数功能:在第colm(0~127)列画从最下端至最上端的直线
** 入口参数:uint8 row ;LCD行参数,取值范围0~63
** 出口参数:无
***********************************************************************************************/
void Draw_VLine(uint8 colm)
{
uint8 x,y;
for(x=0,y=colm;x<64;x++)
Modify_Point(x,y);
LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Draw_HLine()
** 函数功能:修改chartab4数组函数
** 入口参数:uint16 x 横坐标
uint16 y 纵坐标
uint8 disp_onoff 画点
** 出口参数:无
***********************************************************************************************/
void Draw_VLine2(uint8 startx,uint8 endx,uint8 colm)
{
uint8 x,y;
for(x=startx,y=colm;x<endx;x++)//画X轴坐标线,即:每格十点画一条横线
Modify_Point(x,y);
LCD_GRP(chartab4);
}
/***********************************************************************************************
** 函数名称:Draw_HArrow()
** 函数功能:在LCD水平方向上画直线末端的箭头
** 入口参数:(x,y)需要箭头的水平直线末端点坐标
** 出口参数:无
***********************************************************************************************/
void Draw_HArrow(uint8 x,uint8 y)
{ //i<4决定箭头大小
uint8 i;
//先延长原直线3个像素点
Draw_HLine2(y,y+6,x);
for(i=1;i<4;i++)
{
Modify_Point(x-i,y+6-i);//下侧
Modify_Point(x+i,y+6-i);//上侧
}
LCD_GRP(chartab4); //取数组数据来绘图
}
/***********************************************************************************************
** 函数名称:LCD_HLine()
** 函数功能:在LCD垂直方向上画直线末端的箭头
** 入口参数:(x,y)需要箭头的垂直直线末端点坐标
** 出口参数:无
***********************************************************************************************/
void Draw_VArrow(uint8 x,uint8 y)
{ //i<4决定箭头大小
uint8 i;
//先延长原直线3个像素点
Draw_VLine2(x,x+6,y);
for(i=1;i<3;i++)
{
Modify_Point(x+6-i,y+i);//右侧
Modify_Point(x+6-i,y-i);//左侧
}
LCD_GRP(chartab4); //取数组数据来绘图
}
/***********************************************************************************************
** 函数名称:LCD_GRP()
** 函数功能:绘图函数
** 入口参数:string_num 液晶点阵数组
** 出口参数:无
***********************************************************************************************/
void LCD_GRP(uint8 const *string_num)
{
uint8 i,j,k;
k = 0x80;
LCD_Write(0,0x32); // 功能设定
LCD_Dly(2);
LCD_Write(0,0x36); //
LCD_Dly(2);
// 上半屏
for (i = 0; i<32; i++)
{
LCD_Write(0,k);
LCD_Dly(2);
k++;
LCD_Write(0,0x80);
LCD_Dly(2);
for (j = 0;j < 16;j++)
{
LCD_Write(1,*string_num);
string_num++;
LCD_Dly(1);
}
}
// 下半屏
k = 0x80;
for (i = 0;i < 32;i++)
{
LCD_Write(0,k);
LCD_Dly(2);
k++;
LCD_Write(0,0x88);
LCD_Dly(2);
for (j = 0;j < 16;j++)
{
LCD_Write(1,*string_num);
string_num++;
LCD_Dly(1);
}
}
}
void drawquxian(void)
{ uint8 dangwei;
uint8 x;
uint8 i;
uint8 k=0;
for(i=3;i<127;i++)
{ dangwei=((i-4)%20)/10;
switch(dangwei)
{ case 0:
i=i-20*k;
x=63+13*i/5-(i*i)/10-379/10;
i=i+20*k;//还原i
Modify_Point(x,i);
LCD_GRP(chartab4);
break;
case 1:
i=i-20*k;
x=63+13*i/5-(i*i)/10-379/10;
i=i+20*k;//还原i
Modify_Point(x,i);
LCD_GRP(chartab4);
break;
}
if(i==3+20*(k+1))
{
k++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -