📄 55555.lst
字号:
229 }
230 return i; // 若返回零,说明错误
231 }
232 */
233 uchar fnPR1(uchar uCmd,uchar uPar1,uchar uPar2) // 写双参数的指令
234 {
235 1 if(fnST01() == 0)
236 1 return 1;
237 1 LCMDW = uPar1;
238 1 if(fnST01() == 0)
239 1 return 2;
240 1 LCMDW = uPar2;
241 1 if(fnST01() == 0)
C51 COMPILER V7.08 55555 08/10/2005 07:11:22 PAGE 5
242 1 return 3;
243 1 LCMCW = uCmd;
244 1 return 0; // 返回0 成功
245 1 }
246 /*
247 uchar fnPR11(uchar uCmd,uchar uPar1) // 写单参数的指令
248
249 {
250 if(fnST01() == 0)
251 return 1;
252 LCMDW = uPar1;
253 if(fnST01() == 0)
254 return 2;
255 LCMCW = uCmd;
256 return 0; // 返回0 成功
257 }
258
259 */
260 uchar fnPR12(uchar uCmd) // 写无参数的指令
261 {
262 1 if(fnST01() == 0)
263 1 return 1;
264 1 LCMCW = uCmd;
265 1 return 0; // 返回0 成功
266 1 }
267 uchar fnPR13(uchar uData) // 写数据
268 {
269 1 if(fnST3() == 0)
270 1 return 1;
271 1 LCMDW = uData;
272 1 return 0; // 返回0 成功
273 1 }
274 /*
275 uchar fnPR2(void) // 读数据
276 {
277 if(fnST01() == 0)
278 return 1;
279 return LCMDW;
280 }
281 */
282 // 设置当前地址
283 void fnSetPos(uchar urow, uchar ucol)
284 {
285 1 uint iPos;
286 1 iPos = urow * 30 + ucol;
287 1 fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
288 1 gCurRow = urow;
289 1 gCurCol = ucol;
290 1 }
291 // 设置当前显示行、列
292 void cursor(uchar uRow, uchar uCol)
293
294 {
295 1 fnSetPos(uRow * 16, uCol);
296 1 }
297 // 清屏
298 void cls(void)
299 {
300 1 uint i;
301 1 fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针
302 1 fnPR12(LC_AUT_WR); // 自动写
303 1 for(i=0;i<240*30;i++)
C51 COMPILER V7.08 55555 08/10/2005 07:11:22 PAGE 6
304 1 {
305 2 fnST3();
306 2 fnPR13(0xf0); // 写数据
307 2 }
308 1 fnPR12(LC_AUT_OVR); // 自动写结束
309 1 fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
310 1 gCurRow = 0; // 置地址指针存储变量
311 1 gCurCol = 0;
312 1 }
313 // LCM 初始化
314 char fnLCMInit(void)
315 {
316 1 if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
317 1 return -1;
318 1 fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
319 1 fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
320 1 fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
321 1 fnPR12(LC_CUR_SHP | 0x01); // 光标形状
322 1 fnPR12(LC_MOD_OR); // 显示方式设置
323 1 fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
324 1 return 0;
325 1 }
326
327 /*
328 // ASCII(8*16) 及 汉字(16*16) 显示函数
329 uchar dprintf(char *fmt,...)
330 {
331 va_list arg_ptr;
332 char c1,c2,cData;
333 char tmpBuf[64]; // LCD显示数据缓冲区
334 uchar i=0,j,uLen,uRow,uCol;
335 uint k;
336
337 va_start(arg_ptr, fmt);
338 uLen = (uchar)vsprintf(tmpBuf, fmt, arg_ptr);
339 va_end(arg_ptr);
340 while(i<uLen)
341 {
342 c1 = tmpBuf[i];
343 c2 = tmpBuf[i+1];
344 uRow = fnGetRow();
345 uCol = fnGetCol();
346 if(c1 >= 0)
347 { // ASCII
348 if(c1 < 0x20)
349 {
350 switch(c1)
351 {
352 case CR:
353 case LF: // 回车或换行
354 i++;
355 if(uRow < 112)
356 fnSetPos(uRow+16,0);
357 else
358 fnSetPos(0,0);
359 continue;
360 case BS: // 退格
361 if(uCol > 0)
362 uCol--;
363 fnSetPos(uRow,uCol);
364 cData = 0x00;
365 break;
C51 COMPILER V7.08 55555 08/10/2005 07:11:22 PAGE 7
366 default: // 其他
367 c1 = 0x1f;
368 }
369 }
370 for(j=0;j<16;j++)
371 {
372 fnPR12(LC_AUT_WR); // 写数据
373 if(c1 >= 0x1f)
374 {
375 if(j < (16-ASC_CHR_HEIGHT))
376 fnPR13(0x00);
377 else
378 fnPR13(ASC_MSK[(c1-0x1f)*ASC_CHR_HEIGHT+j-(16-
379 ASC_CHR_HEIGHT)]);
380 }
381 else
382
383 fnPR13(cData);
384 fnPR12(LC_AUT_OVR);
385 fnSetPos(uRow+j+1,uCol);
386 }
387 if(c1 != BS) // 非退格
388 uCol++;
389 }
390 else
391 { // 中文
392 for(j=0;j<sizeof(GB_16)/sizeof(GB_16[0]);j++)
393 {
394 if(c1 == GB_16[j].Index[0] && c2 == GB_16[j].Index[1])
395 break;
396 }
397 for(k=0;k<sizeof(GB_16[0].Msk)/2;k++)
398 {
399 fnSetPos(uRow+k,uCol);
400 fnPR12(LC_AUT_WR); // 写数据
401 if(j < sizeof(GB_16)/sizeof(GB_16[0]))
402 {
403 fnPR13(GB_16[j].Msk[k*2]);
404 fnPR13(GB_16[j].Msk[k*2+1]);
405 }
406 else // 未找到该字
407 {
408 if(k < sizeof(GB_16[0].Msk)/4)
409 {
410 fnPR13(0x00);
411 fnPR13(0x00);
412 }
413 else
414 {
415 fnPR13(0xff);
416 fnPR13(0xff);
417 }
418 }
419 fnPR12(LC_AUT_OVR);
420 }
421 uCol += 2;
422 i++;
423 }
424 if(uCol >= 30) // 光标后移
425 {
426 uRow += 16;
427 if(uRow < 0x80)
C51 COMPILER V7.08 55555 08/10/2005 07:11:22 PAGE 8
428 uCol -= 30;
429
430 else
431 {
432 uRow = 0;
433 uCol = 0;
434 }
435 }
436 fnSetPos(uRow,uCol);
437 i++;
438 }
439 return uLen;
440 }
441 */
442 void main(void) // 测试用
443 {
444 1 fnLCMInit();
445 1 cls();
446 1 cursor(0,0);
447 1 //dprintf("%s","This is a test:中文测试");
448 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 274 ----
CONSTANT SIZE = 1160 ----
XDATA SIZE = 136 ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -