📄 lm4229.h
字号:
write_line(x1,y1,x2,y1,flag);
write_line(x2,y1,x2,y2,flag);
write_line(x2,y2,x1,y2,flag);
write_line(x1,y2,x1,y1,flag);
}
//===============================================================
//===============================================================
// LM4229在指定位置画矩形面
// 顶点(x1,y1)(x1,y2)(x2,y1)(x2,y2)
// flag:0-擦除 1-显示
//=================================================================
void write_rectarea(unsigned char x1,unsigned char y1,unsigned char x2,unsigned char y2,bit flag)
{
unsigned char temp;
unsigned char i;
if(x1>x2)
{
temp=x1;x1=x2;x2=temp;
temp=y1;y1=y2;y2=temp;
}
for(i=0;i<=x2-x1;i++)
{
write_line(x1+i,y1,x1+i,y2,flag);
}
}
//========================================================================
//========================================================================
// 在指定位置写汉字 (16*16)
// flag:1-显示,0-反色显示 n: 显示个数
//
//
//========================================================================
void write_hz(uchar x,uchar y,uchar n,uchar *hz_tab,uchar flag)
{
uint place;
uchar i,j,m;
place=x*30+y;
for(m=0;m<n;m++)
{
for(i=0;i<16;i++) //b行数据
{
write_data(place&0xff); //写地址低8位
write_data(place/256); //写地址高8位
write_com(0x24); //设置地址
write_com(0xb0); //设置数据自动写
for(j=0;j<2;j++) //2列数据
{ if(flag)
write_data(*(hz_tab+2*i+j));
else if(!flag)
write_data(~*(hz_tab+2*i+j));
}
write_com(0xb2); //自动复位
place=place+30; //换行
}
place=x*30+y+2*(m+1);//地址偏移
}
}
//==============================================================
//================================================================
//================================================================
//===============================================================
// 指定位置向LCD写入指定字符
// 字符在自制的字库表中
// 用来显示基本的操作界面比较方便
// x:0-120,y:0-29
//================================================================
void write_ASK(uchar x,uchar y,uchar *cha,uchar flag)
{
uint place,i=0;
uchar length,c1,c2,j,k;
for(length=0;cha[length]!=0;length++);
do
{
c1=cha[i]; //取字符串的ASCII码
c2=cha[i+1];
place=x*30+y;
if(c1<=128) //#####小于128为字符,大于128为汉字
{
for(k=0;k<16;++k) //字符设置为16*8
{
write_data(place&0xff); //写入地址高位
write_data(place/256); //写入地址低位
write_com(0x24); //地址设置
write_com(0xb0); //设置数据自动写
if(flag)
write_data(ASC_MSK[(c1-0x20)*16+k]); /*---例如:0的ASCII码为0x30,
在ASC_MSK中的位置为0x10*16 ---16字节字码依次写入LCD---*/
else
write_data(~(ASC_MSK[(c1-0x20)*16+k]));
write_com(0xb2); //自动复位
place=place+30;
}
if(y>28) //y>28时候需要换行
{x=x+16;y=0;}
else //否则,不换行,继续写下一个字符
{y++;}
i++;
}
else //#####c1大于128为汉字
{
for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++) //找到汉字
{
if(c1==GB_16[j].Index[0]&&c2==GB_16[j].Index[1])
break; //汉字找到则跳出
}
if(j<sizeof(GB_16)/sizeof(GB_16[0])) //------如果汉字在子码表内
{
for(k=0;k<16;k++) //字符设置为16*8
{
write_data(place&0xff); //写入地址高位
write_data(place/256); //写入地址低位
write_com(0x24); //地址设置
write_com(0xb0); //设置数据自动写
if(flag)
{write_data(GB_16[j].Msk[k*2]);
write_data(GB_16[j].Msk[k*2+1]);} //16*16,每行2字节
else
{write_data(~GB_16[j].Msk[k*2]);
write_data(~GB_16[j].Msk[k*2+1]);} //16*16,每行2字节
write_com(0xb2); //自动复位
place=place+30; //下一行
}
}
else //-----没找到对应汉字则涂黑
{
for(k=0;k<16;k++) //字符设置为16*8
{
write_data(place&0xff); //写入地址高位
write_data(place/256); //写入地址低位
write_com(0x24); //地址设置
write_com(0xb0); //设置数据自动写
write_data(0x00);
write_data(0x00);
write_com(0xb2); //自动复位
place=place+30; //下一行
}
}
if(y>27) //-------换行
{x+=16;y=0;}
else //--------不用换行,则下一个字
{y+=2;}
i+=2;
}
}
while(i<length);
}
//========================================================================
//========================================================================
/*
//========================================================================
// 在指定位置写汉字 (16*16)
// flag:1-显示,0-反色显示 n: 显示个数
// upline:1-带上划线 0:不带上划线 downline:1-带下划线 0:不带下划线
//=========================================================================
void hz_disp(unsigned char x,unsigned char y,unsigned char n,unsigned char code * hz,bit flag,bit upline,bit underline)
{
uint place;
uchar i,j,m,t;
for (m=0;m<n;m++)
{ 半个汉字
place=x*30+y;
for(i=0;i<16;i++) //b行数据
{
write_data(place&0xff); //写地址低8位
write_data(place/256); //写地址高8位
write_com(0x24); //设置地址
write_com(0xb0); //设置数据自动写
if(upline)
{
if(i=0)
{
for(j=0;j<2;j++) //2列数据
{
if(flag)
{write_data(0xff);}
}
}
else
{
for(j=0;j<2;j++)
{ if(flag)
write_data(hz(2*i+j));
if(!flag)
write_data(~hz(2*i+j));
}
}
}
if(downline)
{
if(i=15)
{
for(j=0;j<2;j++) //2列数据
{
if(flag)
{write_data(0xff);}
}
}
else
{
for(j=0;j<2;j++)
{ if(flag)
write_data(hz(2*i+j));
if(!flag)
write_data(~hz(2*i+j));
}
}
}
write_com(0xb2); //自动复位
place=place+30; //换行
}
}
}
*/
//===================================================
/*
//--------------------------------------------
// LM4229在指定位置显示32*32汉字
//--------------------------------------------
void write_pic(uchar x,uchar y,uchar *tab_pic)
{
uint place;
uchar i,n;
place=x*30+y;
for(n=0;n<5;n++) //5个汉字
{
for(i=0;i<32;i++) //32*32
{
write_data(place&0xff);
write_data(place/256);
write_com(0x24); //设置地址
write_com(0xb0); //设置数据自动写
write_data(~tab_pic[4*i+0+128*n]);
write_data(~tab_pic[4*i+1+128*n]);
write_data(~tab_pic[4*i+2+128*n]);
write_data(~tab_pic[4*i+3+128*n]);
write_com(0xb2); //自动复位
place=place+30;
}
place=x*30+y+4*(n+1);
}
}
//===============================================
*/
///////////////////////////////////////////////////
//=====================================================
// 与后面函数配合显示一个16*16完整汉字
//
//
//
//=======================================================
/*
void write_hz1(uchar x,uchar y,uchar *tab_hz)
{
uint place;
uchar k,temp;
place=30*x+y;
temp=tab_hz[0];
for(k=0;k<16;k++) //字符设置为16*8
{
write_data(place&0xff); //写入地址高位
write_data(place/256); //写入地址低位
write_com(0x24); //地址设置
write_com(0xb0); //设置数据自动写
write_data(tab_hz[k*2+1]);
delay_lcd(2);
tab_hz[2*k]=tab_hz[2*(k+1)];
write_data(tab_hz[k*2]); //16*16,每行2字节
write_com(0xb2); //自动复位
place=place+30; //下一行
}
tab_hz[31]=temp;
}
*/
//========================================================================
//========================================================================
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -