📄 lcd-12864display.lst
字号:
249 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
250 2 break;
251 2 case 1: cs1=0;//左屏
252 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
253 2 cs2=1;
254 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
255 2 break;
256 2 case 2: cs1=1;//右屏
257 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
258 2 cs2=0;
259 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
260 2 break;
261 2 }
262 1 }
263 /*---------------------------------------------------------------------------------------------------*/
264 //清屏
265 //screen: 0-全屏,1-左屏,2-右
266 void ClearScreen(unsigned char screen)
267 { unsigned char i,j;
268 1 SelectScreen(screen);
269 1 for(i=0;i<8;i++)
270 1 { SetLine(i);
271 2 for(j=0;j<64;j++)
272 2 {
273 3 WriteByte(0x00);
274 3 }
275 2 }
276 1 }
277 /*--------------------------------------------------------------------------------------------------*/
278 //显示8*8点阵
279 //旋转90度:字模被竖着切分
280 //lin:行(0-7), column: 列(0-15)
281 //address : 字模区首地址
282 void Show88(unsigned char lin,unsigned char column,unsigned int address)
283 { unsigned char i;
284 1 if(column>16) {return;}
285 1 if(column<8) SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
286 1 else {
287 2 SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
288 2 column=column & 0x07; //防止越界
289 2 }
290 1 SetLine(lin);
291 1 SetColumn(column<<3);
292 1 for(i=0;i<8;i++)
293 1 WriteByte( CBYTE[address+i] );
294 1 }
295 /*------------------------------------------------------------------------------------------------*/
296 //显示8*16字符
297 //旋转90度:字模被竖着切分
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 6
298 //lin:行(0-3), column: 列(0-15)
299 //character:字符代码(标准ASCII码)
300 void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
301 { lin=lin<<1;
302 1 Show88(lin ,column,ASCII816[character-0x20] );
*** WARNING C214 IN LINE 302 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
303 1 Show88(lin+1,column,ASCII816[character-0x20]+8 );
*** WARNING C214 IN LINE 303 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
304 1 }
305 /*-----------------------------------------------------------------------------------------------*/
306 /*
307 //显示8*16字符串
308 //!!!只能显示在一行上即: 串长+column <=15
309 //旋转90度:字模被竖着切分
310 //lin:行(0-3), column: 列(0-15)
311 //address : 字模区首地址
312 void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
313 { unsigned char ch;
314 unsigned char i=0;
315
316 while(*string!='\0')
317 {
318 ch=*string;
319 if(i+column >15) break; //(只能显示在一行上即: 串长+column <=15)
320 ShowChar(lin,i+column,ch);
321 string++; i++;
322 }
323 }
324 */
325 /*----------------------------------------------------------------------------------------------*/
326 //显示一个汉字
327 //旋转90度:字模被竖着切分
328 //lin:行(0-3), column: 列(0-7)
329 //hzcode: 汉字代码(自定义的)
330 //uchar code HZtable
331 void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
332 {
333 1 lin=lin<<1; //lin*2
334 1
335 1 Show88(lin,column,HZTable[hzcode]);
*** WARNING C214 IN LINE 335 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
336 1 Show88(lin,column+1,HZTable[hzcode]+8);
*** WARNING C214 IN LINE 336 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
337 1 Show88(lin+1,column,HZTable[hzcode]+16);
*** WARNING C214 IN LINE 337 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
338 1 Show88(lin+1,column+1,HZTable[hzcode]+24);
*** WARNING C214 IN LINE 338 OF LCD-12864DISPLAY.C: 'Argument': conversion: pointer to non-pointer
339 1 }
340 /*----------------------------------------------------------------------------------------------*/
341 //显示图片
342 //旋转90度 :字模被竖着切分
343 //startline :开始行
344 //startcolumn:开始列
345 //linechar :图片行点除8(图片以8*8点阵为单位)
346 //columnchar :图片列点除8(图片以8*8点阵为单位)
347 //address : 字模区首地址
348 void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
-lumnchar,unsigned int address)
349 { unsigned char i,j;
350 1 for(i=0;i<columnchar;i++)
351 1 for(j=0;j<linechar;j++)
352 1 Show88(startline+i , startcolumn+j , address+(i*linechar+j)*8 );
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 7
353 1 }
354 /*----------------------------------------------------------------------------------------------*/
355 //显示一行字符串(汉字,字母混排,一行16字节)
356 //lin:行
357 //lineheadaddr: 此行汉字代码区首地址
358 void ShowLine(unsigned char lin,unsigned char linehead[])
359 { unsigned char i;
*** WARNING C235 IN LINE 359 OF LCD-12864DISPLAY.C: parameter 2: different types
360 1 unsigned char byte;
361 1 unsigned int hzcode;
362 1 for( i=0; i<16; )
363 1 { byte=linehead[i];
364 2 if(byte < 0x80) //字母
365 2 {
366 3 if(i>15) return; //!!编译器有问题,须强制退出
367 3
368 3 ShowChar(lin, i , byte);
369 3 i=i+1;
370 3
371 3 }
372 2 else // byte >= 0x80(汉字)
373 2 {
374 3 if(i>15) return; //!!编译器有问题,须强制退出
375 3
376 3 byte=byte & 0x7f; //最高位置0,即:减去0x8000
377 3 hzcode=(unsigned int)byte<<8; //?? //高8位
378 3 hzcode=hzcode+linehead[i+1]; //加低8位,组合成整型数地址
379 3 ShowHZ( lin,i,hzcode);
380 3 i=i+2;
381 3 }
382 2 }
383 1 }
384 /*----------------------------------------------------------------------------------------------------*/
385 //显示一屏汉字
386 //pageheadaddr:此屏汉字代码地址区首地址
387 void ShowPage(unsigned char pagehead[][16])
388 { unsigned char i;
*** WARNING C235 IN LINE 388 OF LCD-12864DISPLAY.C: parameter 1: different types
389 1 for(i=0;i<4;i++) ShowLine(i,pagehead[i]); //1行8个汉字,16字节
390 1 }
391 /*----------------------------------------------------------------------------------------------------*/
392 //读显示数据
393 unsigned char ReadByte()
394 {
395 1 unsigned char dat;
396 1 //CheckState();
397 1 di=1; rw=1;
398 1 LCD12864DataPort=0xff;
399 1 en=1; dat=LCD12864DataPort; en=0;
400 1 return(dat);
401 1 }
402
403 /*----------------------------------------------------------------------------------------------------*/
404 //反显一个8*8字块
405 //lin:行(0-3), column: 列(0-7)
406 void ReverseShow88(unsigned char lin,unsigned char column)
407 { unsigned char i;
408 1 unsigned char tab[8];
409 1
410 1 if(column<8) SelectScreen(1); //如果列数<4(0,1,2,3),则写在第一屏上
411 1 else SelectScreen(2); //否则 (4,5,6,7), 写在第二屏上
412 1 //读上部8列
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 8
413 1 column=column<<3; //每个方块8*8大小
414 1 SetLine(lin);
415 1 SetColumn(column);
416 1 tab[0]=ReadByte(); //空读!!!!! //?
417 1 for(i=0;i<8;i++) tab[i]=~ReadByte();
418 1 //写回
419 1 SetLine(lin);
420 1 SetColumn(column);
421 1 for(i=0;i<8;i++) WriteByte(tab[i]);
422 1 }
423 /*----------------------------------------------------------------------------------------------------*/
424 /*----------------------------------------------------------------------------------------------------*/
425 //反显一个字符
426 //lin:行(0-4), column: 列(0-15)
427 void ReverseShowChar(unsigned char lin,unsigned char column)
428 { lin=lin<<1;
429 1 ReverseShow88(lin ,column);
430 1 ReverseShow88(lin+1,column);
431 1 }
432 /*----------------------------------------------------------------------------------------------------*/
433 //反显一个汉字
434 //lin:行(0-3), column: 列(0-7)
435 ReverseShowHZ(unsigned char lin,unsigned char column)
436 {
437 1 lin=lin<<1;
438 1 column=column<<1;
439 1 ReverseShow88(lin ,column );
440 1 ReverseShow88(lin ,column+1);
441 1 ReverseShow88(lin+1,column );
442 1 ReverseShow88(lin+1,column+1);
443 1 }
444 /*----------------------------------------------------------------------------------------------------*/
445 //反显一行汉字
446 //lin:行
447 ReverseShow(unsigned char lin)
448 { unsigned char i;
449 1 for(i=0;i<8;i++) ReverseShowHZ(lin,i);
450 1 }
451 /*----------------------------------------------------------------------------------------------------*/
452 void InitLCD() //初始化LCD
453 {
454 1 unsigned char i=250; //延时
455 1 while(i--);
456 1 //reset=0;//复位
457 1 //reset=1;
458 1 Reset();
459 1 Lcd12864delay();
460 1 SelectScreen(0);
461 1 SetOnOff(0); //关显示
462 1 ClearScreen(1);//清屏
463 1 ClearScreen(2);
464 1 SelectScreen(0);
465 1 SetOnOff(1); //开显示
466 1 SelectScreen(0);
467 1 SetStartLine(0); //开始行:0
468 1 }
469 /*----------------------------------------------------------------------------------------------------*/
470
471 void Reset() //液晶复位
472 {
473 1 //reset 低复位 _|-低电平复位
474 1 reset=0;
C51 COMPILER V8.02 LCD_12864DISPLAY 08/18/2007 09:39:18 PAGE 9
475 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
476 1 reset=1;
477 1
478 1 //全屏
479 1 cs1=1;
480 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
481 1 cs2=1;
482 1 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
483 1 SendCommandToLCD(0x3F);
484 1 }
485
486 /*----------------------------------------------------------------------------------------------------*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1081 ----
CONSTANT SIZE = 3792 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = ---- 38
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 12 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -