📄 t6963.lst
字号:
260 0x06,0x0C,0x18,0x18,0x18,0x30,0x00,0x00,
261 0x00,0x00,0x00,0x00,0x00,0x00,0x71,0xDB, /*-- ~ --*/
262 0x8E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
263 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*-- . --*/
264 0x00,0x00,0x1C,0x1C,0x00,0x00,0x00,0x00
265 };
266
267 typedef struct typFNT_GB16 // 汉字字模数据结构
268 {
269 char Index[2];
270 char Msk[32];
271 };
272
273
274 code struct typFNT_GB16 GB_16[] =
275 { // 显示为16*16
276 "中", 0x01,0x00,0x01,0x00,0x21,0x08,0x3F,0xFC,
277 0x21,0x08,0x21,0x08,0x21,0x08,0x21,0x08,
278 0x21,0x08,0x3F,0xF8,0x21,0x08,0x01,0x00,
279 0x01,0x00,0x01,0x00,0x01,0x00,0x01,0x00,
280 "文", 0x02,0x00,0x01,0x00,0x01,0x00,0xFF,0xFE,
281 0x08,0x20,0x08,0x20,0x08,0x20,0x04,0x40,
282 0x04,0x40,0x02,0x80,0x01,0x00,0x02,0x80,
283 0x04,0x60,0x18,0x1E,0xE0,0x08,0x00,0x00,
284 "测", 0x40,0x02,0x27,0xC2,0x24,0x42,0x84,0x52,
285 0x45,0x52,0x55,0x52,0x15,0x52,0x25,0x52,
286 0x25,0x52,0x25,0x52,0xC5,0x52,0x41,0x02,
287 0x42,0x82,0x42,0x42,0x44,0x4A,0x48,0x04,
288 "试", 0x00,0x20,0x40,0x28,0x20,0x24,0x30,0x24,
289 0x27,0xFE,0x00,0x20,0xE0,0x20,0x27,0xE0,
290 0x21,0x20,0x21,0x10,0x21,0x10,0x21,0x0A,
291 0x29,0xCA,0x36,0x06,0x20,0x02,0x00,0x00
292 };
293 uchar gCurRow,gCurCol; // 当前行列存储行高16 点列宽8点
294 /************************************************/
295 /* 取当前行数据*/ // 当前行列存储行高16 点列宽8点
296 /************************************************/
297 uchar fnGetRow(void)
298 {
299 1 return(gCurRow);
300 1 }
301 /************************************************/
302 /* 取当前列数据*/
303 /************************************************/
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 6
304 unsigned char fnGetCol(void)
305 {
306 1 return(gCurCol);
307 1 }
308
309
310 /************************************************/
311 /* 状态位STA1,STA0判断读写指令和读写数据*/
312 /* 在读写数据或者写入命令前必须保证均为1 */
313 /************************************************/
314 unsigned char fnSTA01(void)
315 {
316 1 uchar i;
317 1 for(i=10;i>0;i--)
318 1 {
319 2 if((LCMCW & 0x03) == 0x03) // 读取状态
320 2 {
321 3 break;
322 3 }
323 2 }
324 1 return(i); // 若返回零说明错误
325 1 }
326 /********************************************/
327 /* 检查STA2,如果STA2=1 为自动读状态*/
328 /*****************************************/
329 uchar fnSTA2(void)
330 {
331 1 unsigned char i;
332 1 for(i=10;i>0;i--)
333 1 {
334 2 if((LCMCW & 0x04) == 0x04)
335 2 {
336 3 break;
337 3 }
338 2 }
339 1 return(i); // 若返回零说明错误
340 1 }
341 /***********************************************/
342 /* 状态位STA3 判断STA3 = 1 数据自动写状态*/
343 /***********************************************/
344 unsigned char fnSTA3(void)
345 {
346 1 unsigned char i;
347 1 for(i=10;i>0;i--)
348 1 {
349 2 if((LCMCW & 0x08) == 0x08)
350 2 {
351 3 break;
352 3 }
353 2 }
354 1 return(i); // 若返回零说明错误
355 1 }
356 /************************************************/
357 /* 状态位STA6 判断STA6 =1 屏读/屏拷贝状态*/
358 /************************************************/
359 uchar fnSTA6(void)
360 {
361 1 unsigned char i;
362 1 for(i=10;i>0;i--)
363 1 {
364 2 if((LCMCW & 0x40) == 0x40)
365 2 {
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 7
366 3 break;
367 3 }
368 2 }
369 1 return(i); // 若返回零说明错误
370 1 }
371 /************************/
372 /* 写双参数的指令*/
373 /************************/
374 unsigned char fnPR1(unsigned char uCmd,unsigned char uPar1,unsigned char uPar2)
375 {
376 1 if(fnSTA01() == 0)
377 1 {
378 2 return 1;
379 2 }
380 1 LCMDW=uPar1;
381 1 if(fnSTA01() == 0)
382 1 {
383 2 return 2;
384 2 }
385 1 LCMDW=uPar2;
386 1 if(fnSTA01() == 0)
387 1 {
388 2 return 3;
389 2 }
390 1 LCMCW=uCmd;
391 1 return(0); // 返回0 成功
392 1 }
393 /************************/
394 /* 写单参数的指令*/
395 /************************/
396 unsigned char fnPR11(unsigned char uCmd,unsigned char uPar1)
397 {
398 1 if(fnSTA01() == 0)
399 1 {
400 2 return 1;
401 2 }
402 1 LCMDW=uPar1;
403 1 if(fnSTA01() == 0)
404 1 {
405 2 return 2;
406 2 }
407 1 LCMCW=uCmd;
408 1 return(0); // 返回0 成功
409 1 }
410 /************************/
411 /* 写无参数的指令*/
412 /************************/
413 unsigned char fnPR12(unsigned char uCmd)
414 {
415 1 if(fnSTA01() == 0)
416 1 {
417 2 return 1;
418 2 }
419 1 LCMCW=uCmd;
420 1 return(0); // 返回0 成功
421 1 }
422 /************************/
423 /* 写数据*/
424 /************************/
425 unsigned char fnPR13(unsigned char uData)
426 {
427 1 if(fnSTA3() == 0)
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 8
428 1 {
429 2 return 1;
430 2 }
431 1 LCMDW=uData;
432 1 return(0); // 返回0 成功
433 1 }
434 /************************/
435 /* 读数据*/
436 /************************/
437 unsigned char fnPR2(void)
438 {
439 1 // unsigned char temp;
440 1 if(fnSTA01() == 0)
441 1 {
442 2 return 1; // 获取状态如果状态错
443 2 }
444 1 return(LCMDW); // 返回数据
445 1 }
446
447
448
449 /************************/
450 /* 设置当前地址*/ //RAM里
451 /************************/
452 void fnSetPos(unsigned char urow, unsigned char ucol)
453 {
454 1 unsigned int iPos;
455 1 iPos = (unsigned int)urow * 30 + ucol; //?~~~~~~~~~~~~~~~~~~
456 1 fnPR1(LC_ADD_POS,iPos & 0xFF,iPos / 256);
457 1 gCurRow = urow;
458 1 gCurCol = ucol;
459 1 }
460 /**********************/
461 /* 设置当前显示行列*/
462 /**********************/
463 void cursor(unsigned char uRow, unsigned char uCol)
464 {
465 1 fnSetPos(uRow * 16, uCol);
466 1 }
467 /*********************/
468 /* 清屏*/
469 /*********************/
470 void cls(void)
471 {
472 1 unsigned int i;
473 1 fnPR1(LC_ADD_POS,0x00,0x00); // 置地址指针为从零开始
474 1 fnPR12(LC_AUT_WR); // 自动写
475 1 for(i=0;i<240*128/8;i++) // 清一屏
476 1 {
477 2 fnSTA3();
478 2 fnPR13(0x0); // 写数据实际使用时请将0x55 改成0x0
479 2 }
480 1 fnPR12(LC_AUT_OVR); // 自动写结束
481 1 fnPR1(LC_ADD_POS,0x00,0x00); // 重置地址指针
482 1 gCurRow = 0; // 置地址指针存储变量
483 1 gCurCol = 0;
484 1 }
485 /************************/
486 /* LCM 初始化*/
487 /************************/
488 char fnLCMInit(void)
489 {
C51 COMPILER V7.50 T6963 06/10/2007 18:45:08 PAGE 9
490 1 if(fnPR1(LC_TXT_STP,0x00,0x00) != 0) // 文本显示区首地址
491 1 {
492 2 return (0xff);
493 2 }
494 1 fnPR1(LC_TXT_WID,0x1E,0x00); // 文本显示区宽度
495 1 fnPR1(LC_GRH_STP,0x00,0x00); // 图形显示区首地址
496 1 fnPR1(LC_GRH_WID,0x1E,0x00); // 图形显示区宽度
497 1 fnPR12(LC_CUR_SHP | 0x01); // 光标形状
498 1 fnPR12(LC_MOD_OR); // 显示方式设置
499 1 fnPR12(LC_DIS_SW | 0x08); // 显示开关设置
500 1 return(0);
501 1 }
502 /********************************************************/
503 /* ASCII(8*16) 及 汉字(16*16) 显示函数 */
504 /********************************************************/
505 unsigned char dprintf(unsigned char x,unsigned char y, char *ptr)
506 {
507 1 unsigned char c1,c2,cData;
508 1 unsigned char i,j,uLen,uRow,uCol;
509 1 unsigned int k;
510 1 uLen=0;
511 1 i=0;
512 1 uRow = y;
513 1 uCol = x;
514 1 fnSetPos(uRow*16,uCol); //起点定位
515 1 while (ptr[uLen]!=0) //探测字串长度
516 1 {
517 2 uLen++;
518 2 }
519 1 while(i<uLen)
520 1 {
521 2 c1 = ptr[i];
522 2 c2 = ptr[i+1];
523 2 //ascii字符与汉字内码的区别在于128做分界,大于界线的为汉字码
524 2 uRow = fnGetRow();
525 2 uCol = fnGetCol();
526 2 if(c1 <=128) // ASCII
527 2 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -