?? 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 + -