📄 汉字时钟.lst
字号:
254 void SelectScreen(unsigned char screen)
255 //清屏
256 //screen: 0-全屏,1-左屏,2-右
257 void ClearScreen(unsigned char screen)
258 //显示8*8点阵
259 //旋转90度:字模被竖着切分
260 //lin:行(0-7), column: 列(0-15)
261 //address : 字模区首地址
262 void Show88(unsigned char lin,unsigned char column,unsigned int address)
263 //显示8*16字符
264 //旋转90度:字模被竖着切分
265 //lin:行(0-3), column: 列(0-15)
266 //character:字符代码(标准ASCII码)
267 void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
268 //显示8*16字符串
269 //!!!只能显示在一行上即: 串长+column <=15
270 //旋转90度:字模被竖着切分
271 //lin:行(0-3), column: 列(0-15)
272 //address : 字模区首地址
273 void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
274 //显示一个汉字
275 //旋转90度:字模被竖着切分
276 //lin:行(0-3), column: 列(0-15)
277 //hzcode: 汉字代码(自定义的)
278 void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
279 //显示图片
280 //旋转90度 :字模被竖着切分
281 //startline :开始行
282 //startcolumn:开始列
283 //linechar :图片行点除8(图片以8*8点阵为单位)
284 //columnchar :图片列点除8(图片以8*8点阵为单位)
285 //address : 字模区首地址
286 void ShowPicture(unsigned char startline,unsigned char startcolumn,unsigned char linechar,unsigned char co
-lumnchar,unsigned int address)
287 //!!问题大户
288 //显示一行汉字
289 //lin:行
290 //lineheadaddr: 此行汉字代码区首地址
291 void ShowLine(unsigned char lin,unsigned int lineheadaddr)
292 //显示一屏汉字
293 //pageheadaddr:此屏汉字代码地址区首地址
294 void ShowPage(unsigned int pageheadaddr)
295 //反显一个8*8字块
296 //lin:行(0-3), column: 列(0-7)
297 void ReverseShow88(unsigned char lin,unsigned char column)
298
299 //反显一个字符
300 //lin:行(0-4), column: 列(0-15)
301 void ReverseShowChar(unsigned char lin,unsigned char column)
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 6
302
303 //反显一个汉字
304 //lin:行(0-3), column: 列(0-7)
305 ReverseShowHZ(unsigned char lin,unsigned char column)
306 //反显一行汉字
307 //lin:行
308 ReverseShow(unsigned char lin)
309 //初始化LCD
310 void InitLCD()
311 ****函数列表结束**** */
312 /*----------------------------------------------------------------------------------------------------*/
313 /*--基本函数源程序------------------------------------------------------------------------------------*/
314 //延时
315 Lcd12864delay()
316 {
317 1 unsigned int i=500;
318 1 while(i--) {;}
319 1 }
320 void delay(void)
321 {
322 1 unsigned char m,n,s;
323 1 for(m=50;m>0;m--)
324 1 for(n=40;n>0;n--)
325 1 for(s=248;s>0;s--);
326 1 }
327 /*----------------------------------------------------------------------------------------------------*/
328 //状态检查
329 void CheckState()
330 {
331 1 unsigned char dat;
332 1 di=0;
333 1 rw=1;
334 1 do{
335 2 LCD12864DataPort=0xff;
336 2 en=1; dat=LCD12864DataPort; en=0;
337 2 dat=0x90 & dat; //仅当第4,7位为0时才可操作
338 2 }while(!(dat==0x00));
339 1 }
340 /*----------------------------------------------------------------------------------------------------*/
341 //ASCII码转换
342 asc(uchar a)
343 {uint b;
344 1 b=(a-0x20)<<4;
345 1 return(b);}
346 /*----------------------------------------------------------------------------------------------------*/
347 //写显示数据
348 //dat:显示数据
349 void WriteByte(unsigned char dat)
350 {
351 1 CheckState();
352 1 di=1; rw=0;
353 1 LCD12864DataPort=dat;
354 1 en=1; en=0;
355 1 }
356 /*-----------------------------------------------------------------------------------------------------*/
357 //向LCD发送命令
358 //command :命令
359 SendCommandToLCD(unsigned char command)
360 {
361 1 CheckState();
362 1 rw=0;
363 1 LCD12864DataPort=command;
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 7
364 1 en=1; en=0;
365 1 }
366 /*----------------------------------------------------------------------------------------------------*/
367 //设定行地址(页)--X 0-7
368 void SetLine(unsigned char line)
369 {
370 1 line=line & 0x07; // 0<=line<=7
371 1 line=line|0xb8; //1011 1xxx
372 1 SendCommandToLCD(line);
373 1 }
374 //设定列地址--Y 0-63
375 void SetColumn(unsigned char column)
376 {
377 1 column=column &0x3f; // 0=<column<=63
378 1 column=column | 0x40; //01xx xxxx
379 1 SendCommandToLCD(column);
380 1 }
381 //设定显示开始行--XX
382 void SetStartLine(unsigned char startline) //0--63
383 {
384 1 startline=startline & 0x07;
385 1 startline=startline|0xc0; //1100 0000
386 1 SendCommandToLCD(startline);
387 1 }
388 //开关显示
389 void SetOnOff(unsigned char onoff)
390 {
391 1 onoff=0x3e | onoff; //0011 111x
392 1 SendCommandToLCD(onoff);
393 1 }
394 /*---------------------------------------------------------------------------------------------------*/
395 //选择屏幕
396 //screen: 0-全屏,1-左屏,2-右屏
397 void SelectScreen(unsigned char screen)
398 { //北京显示器:负有效 cs1: 0--右; cs2: 0--左
399 1 switch(screen)
400 1 { case 0: cs1=1;//全屏
401 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
402 2 cs2=1;
403 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
404 2 break;
405 2 case 1: cs1=1;//左屏
406 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
407 2 cs2=0;
408 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
409 2 break;
410 2 case 2: cs1=0;//右屏
411 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
412 2 cs2=1;
413 2 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_();
414 2 break;
415 2 }
416 1 }
417 /*---------------------------------------------------------------------------------------------------*/
418 //清屏
419 //screen: 0-全屏,1-左屏,2-右
420 void ClearScreen(unsigned char screen)
421 { unsigned char i,j;
422 1 SelectScreen(screen);
423 1
424 1 for(i=0;i<8;i++)
425 1 { SetLine(i);
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 8
426 2 for(j=0;j<64;j++)
427 2 {
428 3 WriteByte(0x00);
429 3 }
430 2 }
431 1 }
432 /*--------------------------------------------------------------------------------------------------*/
433 //显示8*8点阵
434 //旋转90度:字模被竖着切分
435 //lin:行(0-7), column: 列(0-15)
436 //address : 字模区首地址
437 void Show88(unsigned char lin,unsigned char column,unsigned int address)
438 { unsigned char i;
439 1 if(column>16) {return;}
440 1 if(column<8) SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
441 1 else {
442 2 SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
443 2 column=column & 0x07; //防止越界
444 2 }
445 1 SetLine(lin);
446 1 SetColumn(column<<3);//*8
447 1 for(i=0;i<8;i++) WriteByte( CBYTE[address+i] );
448 1 }
449 /*------------------------------------------------------------------------------------------------*/
450 /*--------------------------------------------------------------------------------------------------*/
451 //显示8*8点阵
452 //旋转90度:字模被竖着切分
453 //lin:行(0-7), column: 列(0-15)
454 //address : 字模区首地址
455 void Show8x8(unsigned char lin,unsigned char column,unsigned int address)
456 { unsigned char i;
457 1 if(column>16) {return;}
458 1 if(column<8) SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
459 1 else {
460 2 SelectScreen(2); //否则 (8,9,10,11,12,13,14,15)写在第二屏上
461 2 column=column & 0x07; //防止越界
462 2 }
463 1 SetLine(lin);
464 1 SetColumn(column<<3);//*8
465 1 for(i=0;i<8;i++) WriteByte( ASCII816[address+i] );
466 1 }
467 //显示8*16字符
468 //旋转90度:字模被竖着切分
469 //lin:行(0-3), column: 列(0-15)
470 //character:字符代码(标准ASCII码)
471 void ShowChar(unsigned char lin,unsigned char column,unsigned char character)
472 {uint a;
473 1 a=asc( character);
474 1 lin=lin<<1;
475 1 Show8x8(lin ,column,a );
476 1 Show8x8(lin+1,column,a+8 );
477 1 }
478 /*-----------------------------------------------------------------------------------------------*/
479
480 //显示8*16字符串
481 //!!!只能显示在一行上即: 串长+column <=15
482 //旋转90度:字模被竖着切分
483 //lin:行(0-3), column: 列(0-15)
484 //address : 字模区首地址
485 void ShowString(unsigned char lin,unsigned char column, unsigned char *string)
486 { unsigned char ch;
487 1 unsigned char i=0;
C51 COMPILER V7.50 汉字时钟 02/01/2006 16:45:00 PAGE 9
488 1 while(*string!='\0')
489 1 {
490 2 ch=*string;
491 2 if(i+column >15) break; //(只能显示在一行上即: 串长+column <=15)
492 2 ShowChar(lin,i+column,ch);
493 2 string++; i++;
494 2 }
495 1 }
496
497 /*----------------------------------------------------------------------------------------------*/
498 //显示一个汉字
499 //旋转90度:字模被竖着切分
500 //lin:行(0-3), column: 列(0-7)
501 //hzcode: 汉字代码(自定义的)
502 //uchar code HZtable
503 void ShowHZ(unsigned char lin,unsigned char column,unsigned int hzcode)
504 {
505 1 uint a;
506 1 a=hzcode*32;
507 1 lin=lin<<1; //lin*2
508 1 Show88(lin,column,a);
509 1 Show88(lin,column+1,a+8);
510 1 Show88(lin+1,column,a+16);
511 1 Show88(lin+1,column+1,a+24);
512 1 }
513 /*----------------------------------------------------------------------------------------------*/
514 //显示图片
515 //旋转90度 :字模被竖着切分
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -