📄 t6963c.lst
字号:
283 1 uint temp;
284 1 iPos =y * 16 + x + grshome;
285 1 temp=iPos;
286 1 x=iPos>>8;
287 1 y=temp&0x00ff;
288 1 WRCommandTwo(y,x,0x24);
289 1 }
290
291 //**************************************************************************
292 //= 函数原型: void Point(uchar x,uchar y, bit Mode)
293 //= 功 能: 在指定坐标位置显示一个点
294 //= 参 数: 坐标,显示点或清除点
295 //= 返 回 值:
296 //= 函数性质:私有函数
297 //= Mode 1:显示 0:清除该点
298 //**************************************************************************
299 void Point(uchar x,uchar y, bit Mode)
300 {
301 1 uint Address;
302 1 uint temp;
303 1 uchar dat;
C51 COMPILER V7.01 T6963C 04/27/2007 22:08:22 PAGE 6
304 1 Address=(uint)y*16 + (x>>3) + grshome; //地址转化
305 1 dat=0xF0+7-x%8; //产生位操作命令画点的数据
306 1 if(Mode) dat=dat|0x08;
307 1 temp=Address;
308 1 x=Address>>8;
309 1 y=temp&0x00ff;
310 1 WRCommandTwo(y,x,0x24); //设置该点所在单元地址
311 1 WRCommand(dat); // 利用位操作命令画点
312 1 }
313
314 //*****************************************************************************
315 //= 函数原型: void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
316 //= 功 能: 连续写入一个或多个字符
317 //= 参 数: 坐标,要显示的字符数组,显示的单个字符,要显示的字符个数
318 //= 返 回 值:
319 //= 函数性质:私有函数
320 //当n=0一次性写入一个字符,否则一次性写入多个字符
321 //*****************************************************************************
322
323 void char_wr(uchar x,uchar y, uchar *p,uchar dataa,uchar n)
324 {
325 1 uchar i;
326 1 char_addr_Pointer_Set(x,y); //写入地址
327 1 if(n==0)
328 1 WRCommandOne(dataa,0xc0); //一次写入数据
329 1 else
330 1 {
331 2 WRCommand(0xb0);//进入自动写
332 2 for(i=0;i<n;i++)
333 2 WRData(p[i]);
334 2 WRCommand(0xb2); //退出自动写
335 2 }
336 1 }
337
338
339 //******************************************************************************
340 //= 函数原型: void hanzhi(uchar x,uchar y, uchar m,uchar n)
341 //= 功 能: 连续写入一个或多个汉字
342 //= 参 数: 坐标,要显示的第一个汉字的位置,连续显示汉字的个数。
343 //= 返 回 值:
344 //= 函数性质:私有函数
345 //当n=1一次性写入一个字符,否则一次性写入多个字符
346 //*****************************************************************************
347
348 void hanzhi(uchar x,uchar y, uchar m,uchar n)
349 {
350 1 uchar i;
351 1 uchar CGRam;
352 1 CGRam=0x80+4*m; //第m个字符
353 1 for(i=0;i<n;i++)
354 1 {
355 2 char_addr_Pointer_Set(x,y); //汉字左上角写入
356 2 WRCommandOne(CGRam,0xc0); //一次写入数据;
357 2 CGRam++;
358 2 y++;
359 2 char_addr_Pointer_Set(x,y); //汉字左下角写入
360 2 WRCommandOne(CGRam,0xc0);
361 2 CGRam++;
362 2 x++;
363 2 y--;
364 2 char_addr_Pointer_Set(x,y); //汉字右上角写入
365 2 WRCommandOne(CGRam,0xc0);
C51 COMPILER V7.01 T6963C 04/27/2007 22:08:22 PAGE 7
366 2 CGRam++;
367 2 y++;
368 2 char_addr_Pointer_Set(x,y); //汉字右下角写入
369 2 WRCommandOne(CGRam,0xc0);
370 2 CGRam++;
371 2 x++;
372 2 y--;
373 2 if(x==16)
374 2 {
375 3 x=0; //写满一行,从第二行开始
376 3 y++;
377 3 y++;
378 3 }
379 2 }
380 1 }
381
382 //******************************************************************************
383 //= 函数原型: void fill_CGRAM(uchar *p,uchar m,uinit n)
384 //= 功 能: 填充CGRAM数据
385 //= 参 数: 字符数组,写入第m个汉字,循环写入的汉字个数
386 //= 返 回 值:
387 //= 函数性质:私有函数
388 //*//**************************************************************************
389
390 void fill_CGRAM(uchar *p,uchar m,uint n)
391 {
392 1 uchar xx;
393 1 uchar yy;
394 1 uint i;
395 1 uint ADCGram;
396 1 uint temp;
397 1 ADCGram=0x1c00+32*m; //确定CGRAM地址
398 1 temp=ADCGram;
399 1 xx=ADCGram>>8;
400 1 yy=temp&0x00ff;
401 1 WRCommandTwo(yy,xx,0x24);
402 1
403 1 n=n*32;
404 1 WRCommand(0xb0);
405 1 for(i=0;i<n;i++)
406 1 WRData(p[i]);
407 1 WRCommand(0xb2); //退出自动写
408 1 }
409
410 //*******************************************************************************
411 //= 函数原型: void Wr_line(uchar type,uchar x1,uchar y1, uchar Long,uchar mode)
412 //= 功 能: 画一条横线或一条竖线
413 //= 参 数: type=1为横线,否则为竖线,(x1,y1)为起始点,Long为长度,mode=1为显示
414 //= 返 回 值:
415 //= 函数性质:公有函数
416 //*******************************************************************************
417
418 void Wr_line(uchar type,uchar x1,uchar y1, uchar Long,uchar mode){
419 1 uchar i;
420 1 if(type==1)
421 1 {
422 2 for(i=0;i<Long;i++) //画横线
423 2 {
424 3 if(mode==1)
425 3 Point(x1+i,y1,1);
426 3 else
427 3 Point(x1+i,y1,0);
C51 COMPILER V7.01 T6963C 04/27/2007 22:08:22 PAGE 8
428 3 }
429 2 return;
430 2 }
431 1
432 1 else
433 1 {
434 2 for(i=0;i<Long;i++) //画竖线
435 2 {
436 3 if(mode==1)
437 3 Point(x1,y1+i,1);
438 3 else
439 3 Point(x1,y1+i,0);
440 3 }
441 2 return;
442 2 }
443 1 }
444
445 //*****************************************************************************
446 //= 函数原型: void Show_Image(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
447 //= 功 能: 填充区域(x1,y1) (x2,y2)
448 //= 参 数: (x1,y1)为起始点,(x2,y2)为终点 mode=1显示
449 //= 返 回 值:
450 //= 函数性质:私有函数
451 //= 注 意:以点为单位
452 //*****************************************************************************
453
454 void Show_Image(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
455 {
456 1 char temp=x1;
457 1 if(mode)
458 1 {
459 2 for(;y1<=y2;y1++)
460 2 for(x1=temp;x1<=x2;x1++)
461 2 Point(x1,y1,1);
462 2 }
463 1 else
464 1 {
465 2 for(;y1<=y2;y1++)
466 2 for(x1=temp;x1<=x2;x1++)
467 2 Point(x1,y1,0);
468 2 }
469 1 }
470
471 //**********************************************************************************
472 //= 函数原型: void image(uchar x1,uchar y1,uchar x2,uchar y2,uchar *p,bit mode)
473 //= 功 能: 在设定的区域连续写入多个字节,作图形显示用
474 //= 参 数: (x1,y1)为起始点,(x2,y2)为终点 *po为图形数组,mode=1显示 mode=0清除
475 //= 返 回 值:
476 //= 函数性质:私有函数
477 //= 操作方法:当p=0,mode=1时,连续输入0xff,作反显用,当p=0,mode=0时,连续输入0x00,作
478 //= 消除反显用,当p!=0时,作输入图像用,此时mode无效
479 //= 注 意:参数的数据范围
480 //**********************************************************************************
481 void image(uchar x1,uchar y1,uchar x2,uchar y2,uchar *p,bit mode)
482 {
483 1 uchar temp=x1;
484 1 uint i=0;
485 1 for(;y1<=y2;y1++)
486 1 {
487 2 x1=temp;
488 2 image_addr_Pointer_Set(x1,y1); //写入地址
489 2 WRCommand(0xb0); //进入自动写
C51 COMPILER V7.01 T6963C 04/27/2007 22:08:22 PAGE 9
490 2 for(;x1<=x2;x1++)
491 2 {
492 3 if(p==0&&mode==1)
493 3 {
494 4 WRData(0xff);
495 4 }
496 3 else if(p==0&&mode==0)
497 3 {
498 4 WRData(0x00);
499 4 }
500 3 else
501 3 {
502 4 WRData(p[i]);
503 4 i++; //下一个字节
504 4 }
505 3 }
506 2 WRCommand(0xb2); //退出自动写
507 2 }
508 1 }
509
510 //******************************************************************************
511 //= 函数原型: void negShow(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
512 //= 功 能: 反显区域(x1,y1) (x2,y2)
513 //= 参 数: (x1,y1)为起始点,(x2,y2)为终点 mode=1反显
514 //= 返 回 值:
515 //= 函数性质:私有函数
516 //= 注 意:以字节为单位
517 //******************************************************************************
518 void negShow(uchar x1,uchar y1,uchar x2,uchar y2,bit mode)
519 {
520 1 if(mode)
521 1 {
522 2 WRCommand(0x81); //启用内部字符发生器,显示方式是文本与图形逻辑异或
523 2 image(x1,y1,x2,y2,0,1);
524 2
525 2 }
526 1 else
527 1 {
528 2 WRCommand(0x80); //启用内部字符发生器,显示方式是文本与图形逻辑或
529 2 image(x1,y1,x2,y2,0,0);
530 2 }
531 1 }
532
533 //******************************************************************************
534 //= 函数原型: void Show_num(uchar x1,uchar y1,uchar num)
535 //= 功 能: 在设定的位置显示一个数字
536 //= 参 数: (x1,y1)为位置,num为数字
537 //= 返 回 值:
538 //= 函数性质:公有函数
539 //= 注 意:以字节为单位
540 //*****************************************************************************
541 void Show_num(uchar x1,uchar y1,uchar num)
542 {
543 1 uchar number[10]={0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19};
544 1 char_addr_Pointer_Set(x1,y1);
545 1 WRCommandOne(number[num],0xc0); //一次写入数据
546 1 }
547
548 ///////////////////////////初始化LCD////////////////////////////////////////////
549 void Init_LCD()
550 {
551 1 Init_LCD_Graphic();
C51 COMPILER V7.01 T6963C 04/27/2007 22:08:22 PAGE 10
552 1 ClrGraphic();
553 1 fill_CGRAM(CCTable,0,22); //将汉字写入CGRAM
554 1 }
555
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1119 ----
CONSTANT SIZE = 522 ----
XDATA SIZE = ---- ----
PDATA SIZE = 4 61
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- 4
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -