📄 vfdtask.lst
字号:
BYTE i;
BYTE i_temp;
//要显示的数的长度
BYTE Number_Length;
//将要显示的数转换成相应的
//BYTE Number_Change[5];
//先求出Number的显示长度
if(Number > 9999)
Number_Length = 5;
else if(Number > 999)
Number_Length = 4;
else if(Number > 99)
Number_Length = 3;
else if(Number > 9)
Number_Length = 2;
else
Number_Length = 1;
//向VFD发送写VFD MEMORY 指令,并设置指定地址模式
//VFD_SendCmd(VFD_ADDRESS_INC);
for(i = 0; i < MAX_8Char*2; i++)
VFD_RAM[i] = 0;
for(i = 0; i < MAX_8Char; i++)
{
if(str_length > 0)
{
if((str[i] >= '0') && (str[i] <= '9'))
VFD_DATA = NUMBER_DISPLAY[str[i] - '0'];
else if((str[i] >= 'A') && (str[i] <= 'Z'))
VFD_DATA = LETTER_DISPLAY[str[i] - 'A'];
else if(str[i] == ' ')
VFD_DATA = CHAR_;
else if(str[i] == '+')
VFD_DATA = CHAR_PLUS;
else if(str[i] == '-')
VFD_DATA = CHAR_MINUS;
str_length--;
}
else
{
if(Number_Length <= (MAX_8Char - i -1) )
VFD_DATA = CHAR_;
C51 COMPILER V7.20 VFDTASK 07/16/2005 13:42:40 PAGE 6
else
{
if(Number_Length == 5)
{
VFD_DATA = NUMBER_DISPLAY[Number / 10000];
Number = Number % 10000;
Number_Length--;
}
else if(Number_Length == 4)
{
VFD_DATA = NUMBER_DISPLAY[Number / 1000];
Number = Number % 1000;
Number_Length--;
}
else if(Number_Length == 3)
{
VFD_DATA = NUMBER_DISPLAY[Number / 100];
Number = Number % 100;
Number_Length--;
}
else if(Number_Length == 2)
{
VFD_DATA = NUMBER_DISPLAY[Number / 10];
Number = Number % 10;
Number_Length--;
}
else if(Number_Length == 1)
{
VFD_DATA = NUMBER_DISPLAY[Number];
Number_Length--;
}
}
}
#if(MAX_Segment == 8)
for(i_temp = 0; i_temp < 8; i_temp++)
{
if(VFD_DATA & (1 << (8 - 1 - i_temp) ))
{
grid_temp = ((VFD_CHAR_SEGMENTS[i][i_temp]) & 0xFF00) >> 8;
VFD_RAM[grid_temp] |= (VFD_CHAR_SEGMENTS[i][i_temp] & 0xFF);
}
}
#else//like as 14-segment
for(i_temp = 0; i_temp < 16; i_temp++)
{
if(VFD_DATA & (1 << (16 - 1 - i_temp) ))
{
grid_temp = (((VFD_CHAR_SEGMENTS[i][i_temp]) & 0xFF00) >> 8)/2;
Gird_Locate = (((VFD_CHAR_SEGMENTS[i][i_temp]) & 0xFF00) >> 8) % 2;
if(Gird_Locate == 0)
VFD_RAM[grid_temp] |= (VFD_CHAR_SEGMENTS[i][i_temp] & 0xFF);
else
VFD_RAM[grid_temp] |= (((VFD_CHAR_SEGMENTS[i][i_temp] & 0xFF)) << 8);
}
}
#endif
C51 COMPILER V7.20 VFDTASK 07/16/2005 13:42:40 PAGE 7
}
VFD_SendCmd(VFD_ADDRESS_INC);
CLEAR_VFD_CS;
Delay5US();
VFD_SendByte(VFD_ADDRESS_MASK);
#if(MAX_Segment == 8)
for(i = 0; i < MAX_8Char*2; i++)
{
VFD_SendByte(VFD_RAM[i]);
}
#else
_nop_();
#endif
Delay5US();
SET_VFD_CS;
}
#endif//NEW_VFD
382
383
384 #ifdef FUT_ZYC25085
385 void VFD_Display(BYTE *str,BYTE str_length, WORD Number, BYTE Need_Dot_On)
386 {
387 1 //要显示的转换数据
388 1 WORD VFD_DATA;
389 1 BYTE i;
390 1
391 1 //要显示的数的长度
392 1 BYTE Number_Length;
393 1
394 1 //将要显示的数转换成相应的
395 1 //BYTE Number_Change[5];
396 1 //先求出Number的显示长度
397 1 if(Number > 9999)
398 1 Number_Length = 5;
399 1 else if(Number > 999)
400 1 Number_Length = 4;
401 1 else if(Number > 99)
402 1 Number_Length = 3;
403 1 else if(Number > 9)
404 1 Number_Length = 2;
405 1 else
406 1 Number_Length = 1;
407 1
408 1 //向VFD发送写VFD MEMORY 指令,并设置指定地址模式
409 1 VFD_SendCmd(VFD_ADDRESS_INC);
410 1
411 1 for(i = 0; i < Max_Segment_Display; i++)
412 1 {
413 2
414 2
415 2 CLEAR_VFD_CS;
416 2 Delay5US();
417 2 VFD_SendByte(VFD_ADDRESS_MASK + VFD_Refresh_Address[i]);
418 2 if(str_length > 0)
419 2 {
420 3 if((str[i] >= '0') && (str[i] <= '9'))
421 3 VFD_DATA = NUMBER_DISPLAY[str[i] - '0'];
422 3 else if((str[i] >= 'A') && (str[i] <= 'Z'))
423 3 VFD_DATA = LETTER_DISPLAY[str[i] - 'A'];
424 3 else if(str[i] == ' ')
425 3 VFD_DATA = CHAR_;
426 3 else if(str[i] == '+')
C51 COMPILER V7.20 VFDTASK 07/16/2005 13:42:40 PAGE 8
427 3 VFD_DATA = CHAR_PLUS;
428 3 else if(str[i] == '-')
429 3 VFD_DATA = CHAR_MINUS;
430 3 str_length--;
431 3 }
432 2 else
433 2 {
434 3 if(Number_Length <= (Max_Segment_Display - i -1) )
435 3 VFD_DATA = CHAR_;
436 3 else
437 3 {
438 4
439 4 if(Number_Length == 5)
440 4 {
441 5 VFD_DATA = NUMBER_DISPLAY[Number / 10000];
442 5 Number = Number % 10000;
443 5 Number_Length--;
444 5 }
445 4 else if(Number_Length == 4)
446 4 {
447 5 VFD_DATA = NUMBER_DISPLAY[Number / 1000];
448 5 Number = Number % 1000;
449 5 Number_Length--;
450 5 }
451 4
452 4 else if(Number_Length == 3)
453 4 {
454 5 VFD_DATA = NUMBER_DISPLAY[Number / 100];
455 5 Number = Number % 100;
456 5 Number_Length--;
457 5 }
458 4 else if(Number_Length == 2)
459 4 {
460 5 VFD_DATA = NUMBER_DISPLAY[Number / 10];
461 5 Number = Number % 10;
462 5 Number_Length--;
463 5 }
464 4 else if(Number_Length == 1)
465 4 {
466 5 VFD_DATA = NUMBER_DISPLAY[Number];
467 5 Number_Length--;
468 5 }
469 4
470 4 if((Need_Dot_On == 1) && (i == 3))
471 4 VFD_DATA |= 0x8000;
472 4
473 4 }
474 3
475 3 }
476 2
477 2 VFD_SendByte(LowByte(VFD_DATA));
478 2 VFD_SendByte(HighByte(VFD_DATA));
479 2
480 2 Delay5US();
481 2 SET_VFD_CS;
482 2 }
483 1 }
484 #endif
485
486
487
488
C51 COMPILER V7.20 VFDTASK 07/16/2005 13:42:40 PAGE 9
489
490 /*===================================================================
491 描述: 将要显示的内容拷贝到BUFFER中, 内容长度=Grid_Size
492 参数: VFD_MSG *msg, 指向VFD_MSG结构常量的指针,包括长度和消息字符
493 返回: 无
494 ===================================================================*/
495 void VFD_WriteLedPort(BYTE LedPort)
496 {
497 1 CLEAR_VFD_CS;
498 1 Delay5US();
499 1 VFD_SendByte(VFD_WRITE_LED);
500 1 VFD_SendByte(LedPort);
501 1 Delay5US();
502 1 SET_VFD_CS;
503 1 }
504 /*===================================================================
505 描述: 设置VFD的模式 8G x 14P
506 参数: 无
507 返回: 无
508 ===================================================================*/
509 void VFD_ModeSet(void)
510 {
511 1 VFD_SendCmd(VFD_MODE);
512 1 }
513 /*===================================================================
514 描述: 设置VFD的显示打开,display on
515 参数: 无
516 返回: 无
517 ===================================================================*/
518 void VFD_DisplayOn(void)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -