📄 lcm240128.c
字号:
fnPR12(LC_AUT_OVR); // 自动写结束
fnSetPos(uRow+j+1,uCol);
}
fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
gCurRow = 0; // 置地址指针存储变量
gCurCol = 0;
}
/********************************************************/
/* LCM 初始化 */
/********************************************************/
char fnLCMInit(void)
{
if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
return (0xff);
fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
fnPR1(LC_GRH_STP,0x00,Addr_High>>8); // 图形显示区首地址(cmd,Low,High)
fnPR1(LC_GRH_WID,0x1e,0x00); // 图形显示区宽度
fnPR12(LC_CUR_SHP | 0x01); // 光标形状
fnPR12(LC_MOD_OR); // 显示方式设置
// fnPR12(LC_MOD_TCH);
fnPR12(LC_DIS_SW | 0x0f); // 显示开关设置
fnPR1(0x21,0,0);
return 0;
}
/********************************************************/
/* ASCII(8*16) 及 汉字(16*16) 显示函数 */
/********************************************************/
uchar dprintf(uchar x,uchar y, char *ptr)
{
uchar c1,c2,cData;
uchar i,j,uLen,uRow,uCol;
uint k;
char *ptr2;
uLen=0;
i=0;
uRow = y;
uCol = x;
fnSetPos(uRow*16,uCol); //起点定位
while (ptr[uLen]!=0){uLen++;}; //探测字串长度
if(DispFlag==1)
ptr2=ASC_MSK;
else
ptr2=ASC_MSK_FAN;
while(i<uLen)
{
c1 = ptr[i];
c2 = ptr[i+1];
//ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
uRow = fnGetRow();
uCol = fnGetCol();
if(c1 <=128) // ASCII
{
for(j=0;j<16;j++) //写16行
{
fnPR12(LC_AUT_WR); // 写数据(命令)
if (c1 >= 0x20)/*为字符*/
{
fnPR13(ptr2[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
}
else
fnPR13(cData);
fnPR12(LC_AUT_OVR); //写数据结束
fnSetPos(uRow+j+1,uCol);
}
if(c1 != BS) // 非退格
uCol++; // 列数加1
}
else // 中文
{
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;
}
for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
{
fnSetPos(uRow+k,uCol);
fnPR12(LC_AUT_WR); // 写数据
if(j < sizeof(GB_16)/sizeof(GB_16[0]))
{
fnPR13(GB_16[j].Msk[k*2]);
fnPR13(GB_16[j].Msk[k*2+1]);
}
else // 未找到该字
{
if(k < sizeof(GB_16[0].Msk)/4)
{
fnPR13(0x00);
fnPR13(0x00);
}
else
{
fnPR13(0xff);
fnPR13(0xff);
}
}
fnPR12(LC_AUT_OVR);
}
uCol += 2;
i++;
};
if(uCol >= 30) // 光标后移
{
uRow += 16;
if(uRow < 0x80)
uCol -= 30;
else
{
uRow = 0;
uCol = 0;
}
}
fnSetPos(uRow,uCol);
i++;
}
return uLen; //返回字串长度,汉字按2字节计算
}
/*==============================*/
/* 延时 */
/*==============================*/
void shortdelay(uint tt)
{
uchar i;
while (tt)
{
i=100;
while (i)i--;
tt--;
};
}
/****************************************************************************
Function:hextobcd
Parameter:unsigned int
Retrun:void
Description:输入一个十六进制,返回BCD码
*****************************************************************************/
void hextobcd(unsigned int hex_data)
{
uchar i,j;
if(hex_data>=10000)
{
j=4;
k[0]=(hex_data)/10000;
k[1]=(hex_data-k[0]*10000)/1000;
k[2]=(hex_data-k[0]*10000-k[1]*1000)/100;
k[3]=(hex_data-k[0]*10000-k[1]*1000-k[2]*100)/10;
k[4]=hex_data-k[0]*10000-k[1]*1000-k[2]*100-k[3]*10;
for(i=0;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=1000)
{
j=3;
k[0]=0x20;
k[1]=(hex_data)/1000;
k[2]=(hex_data-k[1]*1000)/100;
k[3]=(hex_data-k[1]*1000-k[2]*100)/10;
k[4]=hex_data-k[1]*1000-k[2]*100-k[3]*10;
for(i=1;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=100)
{
j=2;
k[0]=0x20;
k[1]=0x20;
k[2]=(hex_data)/100;
k[3]=(hex_data-k[2]*100)/10;
k[4]=hex_data-k[2]*100-k[3]*10;
for(i=2;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=10)
{
j=1;
k[0]=0x20;
k[1]=0x20;
k[2]=0x20;
k[3]=(hex_data)/10;
k[4]=hex_data-k[3]*10;
for(i=3;i<=4;i++)
k[i]=k[i]+0x30;
}
else
{
j=0;
k[0]=0x20;
k[1]=0x20;
k[2]=0x20;
k[3]=0x20;
k[4]=hex_data;
for(i=4;i<=4;i++)
k[i]=k[i]+0x30;
}
k[5]=0x20;
if(Uc_Status2==1)/*Freq*/
{
k[5]=k[4];
k[4]=0x2e;
if(k[3]==0x20)
{
k[3]=0x30;
}
}
else if(Uc_Status2==2)/*Chain*/
{
k[5]=k[4];
k[4]=k[3];
k[3]=k[2];
k[2]=k[1];
k[1]=k[0];
k[0]=0x20;
}
else if(Uc_Status2==3)/*dBm*/
{
k[5]=k[4];
k[4]=0x2e;
if(k[3]==0x20)
{
k[3]=0x30;
}
}
else if(Uc_Status2==4)/*mW*/
{
k[5]=k[4];
k[4]=0x2e;
if(k[3]==0x20)
{
k[3]=0x30;
}
}
else if(Uc_Status2==5)/*SC, 只有三个位*/
{
k[5]=k[4];
k[4]=k[3];
k[3]=k[2];
k[2]=k[1];/*0x20*/
k[6]=0;/*结束字符*/
}
else if(Uc_Status2==6)/*Actural Pwr*/
{
k[5]=k[4];
k[4]=0x2e;
if(k[3]==0x20)
{
k[3]=0x30;
}
}
}
/****************************************************************************
Function:int_hextobcd
Parameter: int
Retrun:void
Description:输入一个十六进制,返回BCD码
*****************************************************************************/
void int_hextobcd(int hex_data)
{
uchar i,j;
uint m;
if(hex_data>=10000)
{
m=hex_data;
j=4;
k[0]=(m)/10000;
k[1]=(m-k[0]*10000)/1000;
k[2]=(m-k[0]*10000-k[1]*1000)/100;
k[3]=(m-k[0]*10000-k[1]*1000-k[2]*100)/10;
k[4]=m-k[0]*10000-k[1]*1000-k[2]*100-k[3]*10;
for(i=0;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=1000)
{
m=hex_data;
j=3;
k[0]=0x20;
k[1]=(m)/1000;
k[2]=(m-k[1]*1000)/100;
k[3]=(m-k[1]*1000-k[2]*100)/10;
k[4]=m-k[1]*1000-k[2]*100-k[3]*10;
for(i=1;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=100)
{
m=hex_data;
j=2;
k[0]=0x20;
k[1]=0x20;
k[2]=(m)/100;
k[3]=(m-k[2]*100)/10;
k[4]=m-k[2]*100-k[3]*10;
for(i=2;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=10)
{
m=hex_data;
j=1;
k[0]=0x20;
k[1]=0x20;
k[2]=0x20;
k[3]=(m)/10;
k[4]=m-k[3]*10;
for(i=3;i<=4;i++)
k[i]=k[i]+0x30;
}
else if(hex_data>=0)
{
m=hex_data;
j=0;
k[0]=0x20;
k[1]=0x20;
k[2]=0x20;
k[3]=0x20;
k[4]=m;
for(i=4;i<=4;i++)
k[i]=k[i]+0x30;
}
else/*小于0*/
{
m=hex_data*(-1);
if(m==100)
{
j=2;
k[0]=0x20;
k[1]=0x2d;
k[2]=(m)/100;
k[3]=(m-k[2]*100)/10;
k[4]=m-k[2]*100-k[3]*10;
for(i=2;i<=4;i++)
k[i]=k[i]+0x30;
}
else
{
j=1;
k[0]=0x20;
k[1]=0x20;
k[2]=0x2d;
k[3]=(m)/10;
k[4]=m-k[3]*10;
for(i=3;i<=4;i++)
k[i]=k[i]+0x30;
}
}
k[5]=0x20;
if(Uc_Status2==3)/*dBm*/
{
k[5]=k[4];
k[4]=0x2e;
if(k[3]==0x20)
{
k[3]=0x30;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -