📄 c_lcd19264_driver.c
字号:
}
/***********************************************************************************************
*** 写,n个16X16 的字,竖写
*********************************************************************************************/
void LCD19264_16X16_L (uint8 x,uint8 y,uint8 const *str, uint8 n)//输入坐标,数组指针,字符个数
{ uint8 i,j;
while (n--!= 0)
{ for ( i = 0; i < 2; i ++) //写上下两个半部分
for (j = 0; j < 16; j ++ ) //整行16个
LCD19264_Writedata(x + j,y + i,*(str ++));//遇到‘/0’不写
y += 2;
}
}
/***********************************************************************************************
*** 反色显示n个16X16 的字,横
*********************************************************************************************/
void LCD19264_Turn_over_16X16(uint8 x,uint8 y, uint8 n)//输入坐标,数组指针,字符个数
{
uint8 i,j,Tstr;
while (n--!= 0)
{ for ( i = 0; i < 2; i ++) //写上下两个半部分
for (j = 0; j < 16; j ++ ) //整行16个
{
Tstr = ~LCD19264_RDatalcd19264(x + j,y + i);//读后取反
LCD19264_Writedata(x + j,y + i,Tstr);//遇到‘/0’不写
}
x = x + 16;
}
}
/***********************************************************************************************
*** 反色显示n个8X16 的字,横
*********************************************************************************************/
void LCD19264_Turn_over_8X16(uint8 x,uint8 y, uint8 n)//输入坐标,数组指针,字符个数
{
uint8 i,j,Tstr;
while (n--!= 0)
{ for ( i = 0; i < 2; i ++) //写上下两个半部分
for (j = 0; j < 8; j ++ ) //整行16个
{
Tstr = ~LCD19264_RDatalcd19264(x + j,y + i);//读后取反
LCD19264_Writedata(x + j,y + i,Tstr);//遇到‘/0’不写
}
x = x + 8;
}
}
/***********************************************************************
* 名 称:LCD19264_16X16_newline(uint8 x,uint8 y,uint8 const *str, uint8 n)
* 功 能:在目标坐标上写N个16X16的字,带换行,换行后将给换行靠前一个半字位置
* 入口参数:坐标字符个数
* 出口参数: 无
* 说 明:
***********************************************************************/
void LCD19264_16X16_newline_of(uint8 x,uint8 y,uint8 const *str, uint8 n,uint8 turn_over)
{
uint8 i,j,ix;
ix = x;
while (n--!= 0)
{
for ( i = 0; i < 2; i ++) //写上下两个半部分
for (j = 0; j < 16; j ++ ) //整行16个
if(turn_over ==0) LCD19264_Writedata(x + j,y + i,*(str ++));//遇到‘/0’不写
else if(turn_over ==1) LCD19264_Writedata(x + j,y + i,~*(str ++));
x = x + 16;
if( x>= 185)
{
x = ix - 28;
y += 2; //换下一行
}
}
}
/***********************************************************************
* 名 称:LCD19264_16X16_newline(uint8 x,uint8 y,uint8 const *str, uint8 n)
* 功 能:在目标坐标上写N个16X16的字,带换行,换行后将给换行靠前一个半字位置
* 入口参数:坐标字符个数
* 出口参数: 无
* 说 明:
***********************************************************************/
void LCD19264_16X16_newline(uint8 x,uint8 y,uint8 const *str, uint8 n)
{
uint8 i,j,ix;
ix = x;
while (n--!= 0)
{
for ( i = 0; i < 2; i ++) //写上下两个半部分
for (j = 0; j < 16; j ++ ) //整行16个
LCD19264_Writedata(x + j,y + i,*(str ++));//遇到‘/0’不写
x = x + 16;
if( x>= 185)
{
x = ix - 28;
y += 2; //换下一行
}
}
}
/***********************************************************************
* 名 称:LCD19264_16X16_behine_newline(uint8 x,uint8 y,uint8 const *str, uint8 n)
* 功 能:反色在目标坐标上写N个16X16的字,带换行,换行后将给换行靠前一个半字位置
* 入口参数:坐标字符个数
* 出口参数: 无
* 说 明:是反色写,并非将原来的反转颜色
***********************************************************************/
void LCD19264_16X16_behine_newline(uint8 x,uint8 y,uint8 const *str, uint8 n)
{
uint8 i,j,ix;
ix = x;
while (n--!= 0)
{
for ( i = 0; i < 2; i ++) //写上下两个半部分
for (j = 0; j < 16; j ++ ) //整行16个
LCD19264_Writedata(x + j,y + i,(*(str ++)));//遇到‘/0’不写
x = x + 16;
if( x>= 185)
{
x = ix - 28;
y += 2; //换下一行
}
}
}
/***********************************************************************
* 名 称:
* 功 能:画点画直线
* 入口参数:若干
* 出口参数:无
* 说明 :,
* R/S -- P0.3 // RS
* R/W -- P0.4 // RW
* E -- P0.5 // E
* CS1 -- P0.6 //CS1
* CS2 -- P0.7 //CS2
* CS3 -- P0.8 //CS3
* D0 -- P0.9 // DB0
* . -- .
* . -- .
* . -- .
* D7 -- P0.16 // DB7
***********************************************************************/
/***********************************************************************************************
*** 清单列
*********************************************************************************************/
void LCD19264_single_cls(uint8 x)//X为要清的X坐标列
{ uint8 i;
for ( i =0 ; i< 8; i++)
{
LCD19264_Writedata(x,i,0x00);
}
}
/***********************************************************************************************
*** 画一个点,真正的Y,非上面的Y,上面的Y是页地址,在该列上只有该点
*********************************************************************************************/
void LCD19264_Point_cls (uint8 px,unsigned char py)//输入坐标
{ uint8 ny = 0; //业内地址
LCD19264_single_cls(px);//清楚该列上的点
ny = py & 0X07;
ny = 0X01 << ny;
py = py >> 3; //字节内位计算
LCD19264_Writedata( px, py, ny);
}
/***********************************************************************************************
*** 擦一个点,真正的Y,非上面的Y,上面的Y是页地址,在该列上只有该点
*********************************************************************************************/
void LCD19264_Cls_Point (uint8 px,unsigned char py)//输入坐标
{ uint8 ny = 0,Rdata; //业内地址
ny = py & 0X07; //取出所要
py = py >> 3;
Rdata = LCD19264_RDatalcd19264(px,py);//读原来该业上的数据
ny = ~(0X01 << ny); //字节内位计算
ny = Rdata & ny; //保留原来数据,不影响其他数据
LCD19264_Writedata( px, py, ny);
}
/***********************************************************************************************
*** 画一个点,真正的Y,非上面的Y,上面的Y是页地址,保留该列上所有点
*********************************************************************************************/
void LCD19264_Point_save(uint8 px,uint8 py)//输入坐标
{ uint8 ny = 0,Rdata; //业内地址
ny = py & 0X07; //取出所要
py = py >> 3;
Rdata = LCD19264_RDatalcd19264(px,py);//读原来该业上的数据
ny = 0X01 << ny; //字节内位计算
ny |= Rdata; //保留原来数据,不影响其他数据
LCD19264_Writedata( px, py, ny);
}
/***********************************************************************************************
*** 画一个直线
*********************************************************************************************/
void LCD19264_Linehv(uint8 p1x,uint8 p1y, uint8 p2x,uint8 p2y)//输入起始坐标,结束坐标
{
if (p1y == p2y)
{ for (; p1x <= p2x ; p1x++) LCD19264_Point_save(p1x,p1y);//输入坐标
}
if (p1x == p2x)
{ for (; p1y <= p2y ; p1y++)
{
LCD19264_Point_save(p1x,p1y);//输入坐标
}
}
}
/***********************************************************************************************
*** 擦除一直线
*********************************************************************************************/
void LCD19264_Cls_Linehv(uint8 p1x,uint8 p1y, uint8 p2x,uint8 p2y)//输入起始坐标,结束坐标
{
if (p1y == p2y)
{ for (; p1x <= p2x ; p1x++) LCD19264_Cls_Point(p1x,p1y);//输入坐标
}
if (p1x == p2x)
{ for (; p1y <= p2y ; p1y++)
{
LCD19264_Cls_Point(p1x,p1y);//输入坐标
}
}
}
/***********************************************************************************************
*** 画斜线
*********************************************************************************************/
/*void Lcd19264_Oblique(unsigned char p1x,unsigned char p1y, unsigned char p2x,unsigned char p2y)//输入起始坐标,结束坐标
{
int intpx,intpy; //中转变量,用于处理数据
char incx,incy; //增量算法用变量
unsigned char i; //循环用变量
intpx = p2x - p1x; //求偏移量
intpy = p2y - p1x;
}
*/
/***********************************************************************************************
*** 画一方框68*19
*********************************************************************************************/
void LCD19264_Squrt(uint8 p1x,uint8 p1y)//输入起始坐标
{
LCD19264_Linehv(p1x,p1y,(p1x+64),p1y);//画第一条横线
LCD19264_Linehv(p1x,(p1y+16),(p1x+64),(p1y+16));//画第二条横线
LCD19264_Linehv(p1x,p1y,p1x,(p1y+16));//画第一条竖线
LCD19264_Linehv((p1x+64),p1y,(p1x+64),(p1y+16));//画第二条竖线
}
/***********************************************************************************************
*** 擦除一方框68*19
*********************************************************************************************/
void LCD19264_Cls_Squrt(uint8 p1x,uint8 p1y)//输入起始坐标
{
LCD19264_Cls_Linehv(p1x,p1y,(p1x+64),p1y);//画第一条横线
LCD19264_Cls_Linehv(p1x,(p1y+16),(p1x+64),(p1y+16));//画第二条横线
LCD19264_Cls_Linehv(p1x,p1y,p1x,(p1y+16));//画第一条竖线
LCD19264_Cls_Linehv((p1x+64),p1y,(p1x+64),(p1y+16));//画第二条竖线
}
/***********************************************************************************************
*** 画一立体方框68*19
*********************************************************************************************/
void LCD19264_3DSqurt(uint8 p1x,uint8 p1y)//输入起始坐标
{
LCD19264_Linehv(p1x,p1y,(p1x+64),p1y);//画第一条横线
LCD19264_Linehv(p1x,(p1y+16),(p1x+64),(p1y+16));//画第二条横线
LCD19264_Linehv((p1x+2),(p1y+17),(p1x+64),(p1y+17));//画第二条横线
LCD19264_Linehv(p1x,p1y,p1x,(p1y+16));//画第一条竖线
LCD19264_Linehv((p1x+64),p1y,(p1x+64),(p1y+16));//画第二条竖线
LCD19264_Linehv((p1x+65),(p1y+2),(p1x+65),(p1y+17));//画第二条竖线
}
/***********************************************************************************************
*** 擦除一立体方框68*19
*********************************************************************************************/
void LCD19264_Cls_3DSqurt(uint8 p1x,uint8 p1y)//输入起始坐标
{
LCD19264_Cls_Linehv(p1x,p1y,(p1x+64),p1y);//画第一条横线
LCD19264_Cls_Linehv(p1x,(p1y+16),(p1x+64),(p1y+16));//画第二条横线
LCD19264_Cls_Linehv((p1x+2),(p1y+17),(p1x+64),(p1y+17));//画第二条横线
LCD19264_Cls_Linehv(p1x,p1y,p1x,(p1y+16));//画第一条竖线
LCD19264_Cls_Linehv((p1x+64),p1y,(p1x+64),(p1y+16));//画第二条竖线
LCD19264_Cls_Linehv((p1x+65),(p1y+2),(p1x+65),(p1y+17));//画第二条竖线
}
/***********************************************************************
* 名 称:
* 功 能:画圆
* 原 理? 计算圆点在(0,0)处,的第一象限处的4份一圆的点的坐标,在有对称得的方法计算出其余
* 4个象限上的点, 然后用平移计算出不同原点,的圆上的点
* 入口参数:若干
* 出口参数:无
* 说明 :,
* R/S -- P0.3 // RS
* R/W -- P0.4 // RW
* E -- P0.5 // E
* CS1 -- P0.6 //CS1
* CS2 -- P0.7 //CS2
* CS3 -- P0.8 //CS3
* D0 -- P0.9 // DB0
* . -- .
* . -- .
* . -- .
* D7 -- P0.16 // DB7
***********************************************************************/
void LCD19264_Cricle(uint8 px,uint8 py,uint8 r)//输入起始坐标,半径
{ fp32 ix , iy;
uint8 rx , ry , i;
ix = 0; //计算用的XY坐标
iy = r;
rx = 0; //写上液晶的XY坐标
ry = 0;
for ( i = 0 ; i <= r ; i++)
{
iy = sqrt( r*r - i*i ) + 0.55; //计算圆上Y轴的值.加上调节数
ry = (uint8)iy; //去掉小数点
rx = i; //确定在第一象素点的坐标
if ( ( rx + px ) < 192 && ( ry + py ) < 64) LCD19264_Point_save(( rx + px ),( ry + py ));
//向19264液晶写入第一象限的点,并且越界的点不显示
if ( ( rx + px ) < 192 && ( py - ry ) >= 0) LCD19264_Point_save(( rx + px ),( py - ry ));
//向19264液晶写入第四象限的点,并且越界的点不显示
if ( ( px - rx ) >= 0 && ( py - ry ) >= 0) LCD19264_Point_save(( px - rx ),( py - ry ));
//向19264液晶写入第三象限的点,并且越界的点不显示
if ( ( px - rx ) >= 0 && ( ry + py ) < 64) LCD19264_Point_save(( px - rx ),( ry + py ));
//向19264液晶写入第二象限的点,并且越界的点不显示
}
}
/***********************************************************************
* 名 称:uint8 LCD19264_Number(uint8 x,uint8 y,uint16 integral)
* 功 能:将数字输出
* 入口参数:输入,x,y坐标,整数部分
* 出口参数:
* 说明 :X,Y坐标是倒过来的,也就是按个位为输出相对位置,留意要
* R/S -- P0.3 // RS
* R/W -- P0.4 // RW
* E -- P0.5 // E
* CS1 -- P0.6 //CS1
* CS2 -- P0.7 //CS2
* CS3 -- P0.8 //CS3
* D0 -- P0.9 // DB0
* . -- .
* . -- .
* . -- .
* D7 -- P0.16 // DB7
***********************************************************************/
void LCD19264_OnlyNumber(uint8 x,uint8 y,uint16 integral)
{
Lcd19264_8X16(x,y,(ynumber+integral*16),1);
}
/***********************************************************************
* 名 称:uint8 LCD19264_16BNumber(uint8 x,uint8 y,uint16 integral)
* 功 能:将4位的16进制数输出
* 入口参数:输入,x,y坐标,整数部分,有效数字个数
* 出口参数:
* 说明 :X,Y坐标是倒过来的,也就是按个位为输出相对位置,留意要
* R/S -- P0.3 // RS
* R/W -- P0.4 // RW
* E -- P0.5 // E
* CS1 -- P0.6 //CS1
* CS2 -- P0.7 //CS2
* CS3 -- P0.8 //CS3
* D0 -- P0.9 // DB0
* . -- .
* . -- .
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -