📄 lcd240128.c
字号:
write_comm(COM_SET_AUTOWRITE);
for(j=0;j<32;j++)
{
for(i=0;i<width*2;i++)
write_auto(data1);
for(i=0;i<width*2;i++)
write_auto(data2);
}
write_comm(COM_SET_AUTORESET);
}
/**********************************************************************
* Name:
* Desc: 在(x0,y0)处显示(8*xl) * yl点阵的图形-
* x0(0,29), y0(0,127)
**********************************************************************/
void disp_img(unsigned int x0, unsigned int y0, unsigned int xl, unsigned int yl, const U8 *img)
{
U16 i, j;
U16 pos;
const U8* pt;
pos = ADDR_G + x0*width + y0;//count the address
pt = img;
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
write_xd(pos+j*width+i, COM_SET_ADDRESSPOINTER);
//write_od( pgm_read_byte(img + j*xl+i), 0xc0);
write_od( (*pt++), COM_SET_WINCADP);
}
}
}
/**********************************************************************
* Name:
* Desc: 在addr处显示row_yl行(每行row_xl个)8xl*yl的文字
**********************************************************************/
// disp_hanzi ( 0x03e5, 4, 32, 4个字, 1行, wel)
void disp_hanzi(U16 addr, U8 xl, U8 yl, U8 row_xl, U8 row_yl, const unsigned char *chn)
{
U16 i, j, k, m;
const U8* pt;
pt = chn;
for(m=0;m<row_yl;m++)
{
for(k=0;k<row_xl;k++)
{
for(j=0;j<yl;j++)
{
for(i=0;i<xl;i++)
{
write_xd(addr+m*yl*width+k*xl+j*width+i, COM_SET_ADDRESSPOINTER);
// write_od((chn + (m*row_xl*xl*yl)+(k*xl*yl)+(j*xl)+i), 0xc0);
write_od((*pt++), COM_SET_WINCADP);
}
}
}
}
}
/**********************************************************************
* Name:
* Desc: 在(x0,y0)处显示xl*yl点阵汉字
* x0 = (0-15), y0 = (0,29)
**********************************************************************/
/**********************************************************************
* Name:
* Desc: 显示字符
**********************************************************************/
void disp_char(U8 *ch)
{
U16 i, j;
write_xd(ADDR_G, COM_SET_ADDRESSPOINTER); //Set address pointer
write_comm(COM_SET_AUTOWRITE); //Set data auto write
for(j=0;j<9;j++)
{
for(i=0;i<width;i++)
write_auto(ch[j*width+i]);
}
write_comm(COM_SET_AUTORESET); //Auto reset
}
/*****************************************************************************
* name : DispString_I()
* desc : 使用LCD内部字体
* parameter: X:line(0-15), Y:column(0-30)
*****************************************************************************/
void DispString_I(U8 x, U8 y, char *string) //use the LCD font
{
char *pt;
U16 pos;
pos = x*width + y;//计算取得显示地址
write_xd(pos, COM_SET_ADDRESSPOINTER);//定位显示地址光标
write_comm(COM_SET_AUTOWRITE); //开自动写
pt = string;
while(*pt!='\0')
write_auto((U8)*pt++-0x20);
write_comm(COM_SET_AUTORESET); //复位自动写
}
/*****************************************************************************
* name : DispString()
* desc : use the font myself defined
* parameters:X:line(0-15), Y:column(0-30)
*****************************************************************************/
void DispString(unsigned char x, unsigned char y, char* string)
{
char* pt;
const unsigned char* p;
unsigned char ch;
unsigned char j;
U16 pos;
pt = string;
// write_comm(COM_SET_AUTOWRITE); //开自动写
pos = ADDR_G + x*width + y ;
do
{
ch = *pt++;
p = &ASCII8X16E[0]+((unsigned char)ch - 0x20) * 16; //8X16
for(j=0;j<16;j++)
{
//for(i=0;i<8/8;i++)
{
write_xd(pos+j*width, COM_SET_ADDRESSPOINTER); // +i/8
write_od((*p++), COM_SET_WINCADP);
}
}
pos++;
} while((*pt)!='\0');
//字符串结束标志ch='\0'
// write_comm(COM_SET_AUTORESET); //复位自动写
}
void DispString6X12(unsigned char x, unsigned char y, char* string)
{
char* pt;
const unsigned char* p;
unsigned char ch;
unsigned char j;
unsigned char y1=0;
U16 pos;
pt = string;
pos = ADDR_G + x*width + y ;
// write_comm(COM_SET_AUTOWRITE); //开自动写
do
{
// pos = ADDR_G + (x+3)*width*8 + y + y1++;
ch = *pt++;
p = &ASCII6X12E[0]+((unsigned char)ch - 0x20) * 12; //6X12
for(j=0;j<12;j++)
{
//for(i=0;i<8/8;i++)
{
write_xd(pos+j*width, COM_SET_ADDRESSPOINTER); // +i/8
write_od((*p++), COM_SET_WINCADP);
}
}
pos++;
} while((*pt)!='\0');
//字符串结束标志ch='\0'
// write_comm(COM_SET_AUTORESET); //复位自动写
}
void PDispString6X12(unsigned char x, unsigned char y, char* string)
{
char* pt;
const unsigned char* p;
unsigned char ch;
unsigned char j;
U16 pos;
U8 buf;
U8 bit;
pt = string;
// write_comm(COM_SET_AUTOWRITE); //开自动写
pos = ADDR_G + x*width + y/8 ;
do
{
bit = y%8;
ch = *pt++;
p = &ASCII6X12E[0]+((unsigned char)ch - 0x20) * 12; //8X16
for(j=0;j<12;j++,p++)
{
buf = *p >> (bit);
write_xd(pos+j*width, COM_SET_ADDRESSPOINTER); // +i/8
write_od(buf|ReadData(pos+j*width), COM_SET_WINCADP);
if(bit)
{
buf = *p << (8-bit);
write_xd(pos+j*width+1, COM_SET_ADDRESSPOINTER); // +i/8
write_od(buf|ReadData(pos+j*width+1), COM_SET_WINCADP);
}
}
pos++;
} while((*pt)!='\0');
//字符串结束标志ch='\0'
// write_comm(COM_SET_AUTORESET); //复位自动写
}
/*****************************************************************************
* name : DispStringP()
* desc : use the font myself defined
* 精确定位于每像素输出
*
* parameters:X:line(0-127), Y:column(0-239)
*****************************************************************************/
void PDispString(unsigned char x, unsigned char y, char* string)
{
char* pt;
const unsigned char* p;
unsigned char ch;
unsigned char j;
U16 pos;
U8 buf;
U8 bit;
pt = string;
// write_comm(COM_SET_AUTOWRITE); //开自动写
pos = ADDR_G + x*width + y/8 ;
do
{
bit = y%8;
ch = *pt++;
p = &ASCII8X16E[0]+((unsigned char)ch - 0x20) * 16; //8X16
for(j=0;j<16;j++,p++)
{
buf = *p >> (bit);
write_xd(pos+j*width, COM_SET_ADDRESSPOINTER); // +i/8
write_od(buf|ReadData(pos+j*width), COM_SET_WINCADP);
if(bit)
{
buf = *p << (8-bit);
write_xd(pos+j*width+1, COM_SET_ADDRESSPOINTER); // +i/8
write_od(buf|ReadData(pos+j*width+1), COM_SET_WINCADP);
}
}
pos++;
} while((*pt)!='\0');
//字符串结束标志ch='\0'
// write_comm(COM_SET_AUTORESET); //复位自动写
}
/**********************************************************************
* Name: Printf
* Desc: 字符格式化输出显示
**********************************************************************/
void Printf(U8 x, U8 y, char *fmt, ...)
{
char szString[40];
va_list ap;
va_start(ap, fmt);
vsprintf(szString, fmt, ap);
DispString(x, y, szString);
va_end(ap);
}
void Printf6X12(U8 x, U8 y, char *fmt, ...)
{
char szString[50];
va_list ap;
va_start(ap, fmt);
vsprintf(szString, fmt, ap);
DispString6X12(x, y, szString);
va_end(ap);
}
void PPrintP(U8 x, U8 y, char *fmt, ...)
{
char szString[40];
va_list ap;
va_start(ap, fmt);
vsprintf(szString, fmt, ap);
PDispString(x, y, szString);
va_end(ap);
}
void PPrintf6X12(U8 x, U8 y, char *fmt, ...)
{
char szString[50];
va_list ap;
va_start(ap, fmt);
vsprintf(szString, fmt, ap);
PDispString6X12(x, y, szString);
va_end(ap);
}
/*****************************************************************************
* name : WriteHz()
* desc : 显示汉字
* param: X:line(0-127)可微调间距, Y:column(0-30)不可缩,除非用点阵输出
*****************************************************************************/
void DispHz(unsigned char x, unsigned char y,unsigned char hz)
{
const unsigned char* p;
unsigned char i, j;
// unsigned char y1=0;
U16 pos;
pos = ADDR_G + x*width + y;
p = &HZST16X16[0]+ hz* 32; //8X16
for(j=0;j<16;j++)
{
for(i=0;i<2;i++)
{
write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER); // +i/8
write_od((*p++), COM_SET_WINCADP);
}
}
}
void DispHz12(unsigned char x, unsigned char y,unsigned char hz)
{
const unsigned char* p;
unsigned char i, j;
// unsigned char y1=0;
U16 pos;
pos = ADDR_G + x*width + y;
p = &ST12X12[0]+ hz* 24; //
for(j=0;j<12;j++)
{
for(i=0;i<2;i++)
{
write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER); // +i/8
write_od((*p++), COM_SET_WINCADP);
}
}
}
void PDispHz12(unsigned char x, unsigned char y,unsigned char hz)
{
const unsigned char* p;
unsigned char i, j;
// unsigned char y1=0;
U16 pos;
pos = ADDR_G + x*width + y;
p = &ST12X12[0]+ hz* 24; //
for(j=0;j<12;j++)
{
for(i=0;i<2;i++)
{
write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER); // +i/8
write_od((*p++)|ReadData(pos+j*width+i), COM_SET_WINCADP);
}
}
}
/*****************************************************************************
* name: void ReDisp(U8 x0, U8 y0, U8 x, U8 y)
* decs: redisplay the lcd
* x(0,16*8-1), Y(0,29)
* while write to the lcd it will read from the lcd ram first
*****************************************************************************/
void ReDisp(U8 x0, U8 y0, U8 x, U8 y)
{
U16 pos;
U8 bit;
U8 i,j;
// if(x<16&&y<30)
{
pos = ADDR_G + x0*width + y0 ;//绝对坐标点
for(i=0;i<(x-x0);i++)
{
for(j=0;j<(y-y0);j++)
{
bit = ~ReadData(pos + i*width+j); //
write_xd(pos + i*width+j, COM_SET_ADDRESSPOINTER);//set address pointer
write_od(bit, COM_SET_WINCADP); //write the data
}
}
}
}
/*****************************************************************************
* name :
* desc :
* param: x:line(0-127)可微调间距, y:column(0-30)点阵输出
*****************************************************************************/
void LCD_ClrRect(U8 x0, U8 y0, U8 x, U8 y)
{
U16 pos;
U8 bit;
U8 i,j;
if(x<16&&y<30)
{
pos = ADDR_G + x0*width*8 + y0 ;//绝对坐标点
for(i=0;i<(x-x0)*8;i++)
{
for(j=0;j<(y-y0);j++)
{
bit = 0x00; //
write_xd(pos + i*width+j, COM_SET_ADDRESSPOINTER);//set address pointer
write_od(bit, COM_SET_WINCADP); //write the data
}
}
}
}
/*****************************************************************************
* name :
* desc : 显示坐标值
* param: y:line(0-127)可微调间距, x:column(0-30)点阵输出
*****************************************************************************/
void DispZuobiao(unsigned char x, unsigned char y,unsigned char dz)
{
const unsigned char* p;
unsigned char i, j;
U16 pos;
pos = ADDR_G + y*width + x;
p = &Zuobiao[0]+ dz * 10; //8X16
for(j=0;j<5;j++)
{
for(i=0;i<2;i++)
{
write_xd(pos+j*width + i, COM_SET_ADDRESSPOINTER); // +i/8
write_od((*p++), COM_SET_WINCADP);
}
}
}
//================================ The end ===================================//
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -