?? lcm240128.c
字號:
fnPR12(LC_AUT_OVR); // 自動寫結(jié)束
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) // 文本顯示區(qū)首地址
return (0xff);
fnPR1(LC_TXT_WID,0x1E,0x00); // 文本顯示區(qū)寬度
fnPR1(LC_GRH_STP,0x00,Addr_High>>8); // 圖形顯示區(qū)首地址(cmd,Low,High)
fnPR1(LC_GRH_WID,0x1e,0x00); // 圖形顯示區(qū)寬度
fnPR12(LC_CUR_SHP | 0x01); // 光標形狀
fnPR12(LC_MOD_OR); // 顯示方式設(shè)置
// fnPR12(LC_MOD_TCH);
fnPR12(LC_DIS_SW | 0x0f); // 顯示開關(guān)設(shè)置
fnPR1(0x21,0,0);
return 0;
}
/********************************************************/
/* ASCII(8*16) 及 漢字(16*16) 顯示函數(shù) */
/********************************************************/
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字符與漢字內(nèi)碼的區(qū)別在于128做分界,大于界線的為漢字碼
uRow = fnGetRow();
uCol = fnGetCol();
if(c1 <=128) // ASCII
{
for(j=0;j<16;j++) //寫16行
{
fnPR12(LC_AUT_WR); // 寫數(shù)據(jù)(命令)
if (c1 >= 0x20)/*為字符*/
{
fnPR13(ptr2[(c1-0x20)*ASC_CHR_HEIGHT+j-(16-ASC_CHR_HEIGHT)] );
}
else
fnPR13(cData);
fnPR12(LC_AUT_OVR); //寫數(shù)據(jù)結(jié)束
fnSetPos(uRow+j+1,uCol);
}
if(c1 != BS) // 非退格
uCol++; // 列數(shù)加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); // 寫數(shù)據(jù)
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字節(jié)計算
}
/*==============================*/
/* 延時 */
/*==============================*/
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;/*結(jié)束字符*/
}
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 + -