📄 mgls240128t.c
字号:
uchar i;
for(i=10;i>0;i--) {
if((LCMCW & 0x04) == 0x04)
break;
}
return i; /* 若返回零,说明错误 */
}
/*************************** * 状态位ST3判断函数 ************************
* 功能:数据自动写
************************************************************************/
uchar fnST3(void) {
uchar i;
for(i=10;i>0;i--) {
if((LCMCW & 0x08) == 0x08)
break;
}
return i; /* 若返回零,说明错误 */
}
/***************************** 状态位ST6判断函数 ************************
* 功能:屏读/屏拷贝
************************************************************************/
uchar fnST6(void) {
uchar i;
for(i=10;i>0;i--) {
if((LCMCW & 0x40) == 0x40)
break;
}
return i; /* 若返回零,说明错误 */
}
/***************************** 写双参数命令函数 **************************/
uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2) {
if(fnST01() == 0)
return 1;
LCMDW = uPar1;
if(fnST01() == 0)
return 2;
LCMDW = uPar2;
if(fnST01() == 0)
return 3;
LCMCW = uCmd;
return 0; /* 返回0 成功 */
}
/***************************** 写单参数命令函数 **************************/
uchar fnPR11(uchar uCmd,uchar uPar1) {
if(fnST01() == 0)
return 1;
LCMDW = uPar1;
if(fnST01() == 0)
return 2;
LCMCW = uCmd;
return 0; /* 返回0 成功 */
}
/***************************** 写无参数命令函数 **************************/
uchar fnPR12(uchar uCmd) {
if(fnST01() == 0)
return 1;
LCMCW = uCmd;
return 0; /* 返回0 成功 */
}
/***************************** 写数据函数 **************************/
uchar fnPR13(uchar uData) {
if(fnST3() == 0)
return 1;
LCMDW = uData;
return 0; /* 返回0 成功 */
}
/******************************* 读数据函数 ****************************/
uchar fnPR2(void) {
if(fnST01() == 0)
return 1;
return LCMDW;
}
/************************** 设置当前地址函数 ***************************/
void fnSetPos(uchar urow, uchar ucol) {
uint iPos;
iPos = urow * 30 + ucol;
fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
gCurRow = urow;
gCurCol = ucol;
}
/************************ 设置当前显示行、列函数 ************************/
void cursor(uchar uRow, uchar uCol) {
fnSetPos(uRow * 16, uCol);
}
/******************************* 清屏函数 ********************************/
void cls(void) {
uint i;
fnPR1(LC_ADD_POS,0x00,0x00); /* 置地址指针 */
fnPR12(LC_AUT_WR); /* 自动写 */
for(i=0;i<240*30;i++) {
fnST3();
fnPR13(0x00); /* 写数据 */
}
fnPR12(LC_AUT_OVR); /* 自动写结束 */
fnPR1(LC_ADD_POS,0x00,0x00); /* 重置地址指针 */
gCurRow = 0; /* 置地址指针存储变量 */
gCurCol = 0;
}
/************************** 液晶模块初始化函数 ***************************/
char fnLCMInit(void) {
if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) /* 文本显示区首地址 */
return -1;
fnPR1(LC_TXT_WID,0x1E,0x00); /* 文本显示区宽度 */
fnPR1(LC_GRH_STP,0x00,0x00); /* 图形显示区首地址 */
fnPR1(LC_GRH_WID,0x1E,0x00); /* 图形显示区宽度 */
fnPR12(LC_CUR_SHP | 0x01); /* 光标形状 */
fnPR12(LC_MOD_OR); /* 显示方式设置 */
fnPR12(LC_DIS_SW | 0x08); /* 显示开关设置 */
return 0;
}
/**************** ASCII码(8×16)及汉字(16×16)显示函数 ******************/
uchar dprintf(char *fmt, ...) {
va_list arg_ptr;
char c1,c2,cData;
char tmpBuf[64]; /* LCD显示数据缓冲区 */
uchar i=0,j,uLen,uRow,uCol;
uint k;
va_start(arg_ptr, fmt);
uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
va_end(arg_ptr);
while(i<uLen) {
c1 = tmpBuf[i];
c2 = tmpBuf[i+1];
uRow = fnGetRow();
uCol = fnGetCol();
if(c1 >= 0) { /* ASCII码 */
if(c1 < 0x20) {
switch(c1) {
case CR:
case LF: i++; /* 回车或换行 */
if(uRow < 112)
fnSetPos(uRow+16,0);
else
fnSetPos(0,0);
continue;
case BS: /* 退格 */
if(uCol > 0) uCol--;
fnSetPos(uRow,uCol);
cData = 0x00;
break;
default: /* 其他 */
c1 = 0x1f;
}
}
for(j=0;j<16;j++) {
fnPR12(LC_AUT_WR); /* 写数据 */
if(c1 >= 0x1f) {
if(j < (16-ASC_CHR_HEIGHT)) fnPR13(0x00);
else
fnPR13(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+
j-(16-ASC_CHR_HEIGHT)]);
}
else
fnPR13(cData);
fnPR12(LC_AUT_OVR);
fnSetPos(uRow+j+1,uCol);
}
if(c1 != BS) uCol++; /* 非退格 */
}
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;
}
/********************************* 主函数 ********************************/
void main(void) {
fnLCMInit();
cls();
cursor(0,0);
dprintf("%s","This is a test:中文测试");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -