📄 vfd.c
字号:
void VFD_Char(BYTE value)
{
BYTE i;
if(value>=0 && value<=15)
{
Disp_Dot_Matrix(h16[value]);
}
else if(value=='|')
{
for(i=0;i<32;i++) matrix[i]=0;
matrix[6]=0x55;matrix[7]=0x55;
matrix[22]=0x55;matrix[23]=0x55;
Disp_Matrix(matrix);
}
else if(value=='.')
{
for(i=0;i<32;i++) matrix[i]=0;
matrix[22]=0x0c;
matrix[23]=0x0c;
Disp_Matrix(matrix);
}
else if(value==' ')
{
for(i=0;i<32;i++) matrix[i]=0;
Disp_Matrix(matrix);
}
else if(value=='-')
{
for(i=0;i<32;i++) matrix[i]=0;
for(i=2;i<11;i++)
{
matrix[i]=0x01;
matrix[i+CHAR_WIDTH]=0x80;
}
Disp_Matrix(matrix);
}
}
/*显示一个整数*/
void VFD_Number(U16 number,BYTE decPos)
{
BYTE buf[7];
S8 i;
BOOL bSign=FALSE;
if(number>0x7FFF)
{
bSign=TRUE;
number=~number+1;
}
i=0;
while(number!=0 && i<7)
{
if(i==decPos && i>0) {buf[i]='.';i++;}
buf[i]=number % 10;
number = (U16)(number / 10);
i++;
}
if(bSign) buf[i]='-';
else i--;
select_current_window(1);
CLR();
decPos=0;
for(;i>=0;i--)
{
select_current_window(1);
set_cursor_pos(decPos*16,0);
VFD_Char(buf[i]);
decPos++;
}
}
/*以16进制显示一个整数*/
void VFD_Hex(U16 number)
{
BYTE buf[7];
S8 i;
BYTE decPos;
i=0;
while(number!=0)
{
buf[i] = number % 16;
number = (U16)(number / 16);
i++;
}
select_current_window(1);
CLR();
decPos=0;
for(i--;i>=0;i--)
{
select_current_window(1);
set_cursor_pos(decPos*16,0);
VFD_Char(buf[i]);
decPos++;
}
}
/**///////////////////////////////////////////////////////////////////////////////
void Disp_Dot_Matrix8(const BYTE ar[]) /*显示8*8的点阵*/
{
BYTE i;
write_data(0x1f);
write_data(0x28);
write_data(0x66);
write_data(0x11);
write_data(8);
write_data(0x0);
write_data(1);
write_data(0x0);
write_data(0x01);
for(i=0;i<8;i++)
{
write_data(ar[i]);
}
}
/*显示8*8的字符*/
void VFD_Char8(BYTE value)
{
BYTE i;
if(value>=0 && value<=9)
{
//Disp_Dot_Matrix8(array8[value]);
put_char(value+0x30);
}
else if(value>=10 && value<=15)
{
put_char(value-10+'A');
}
else if(value=='|')
{
for(i=0;i<8;i++) matrix8[i]=0;
matrix8[3]=0x92;
Disp_Dot_Matrix8(matrix8);
}
else if(value=='.')
{
/*
for(i=0;i<8;i++) matrix8[i]=0;
matrix8[3]=0x06;
matrix8[4]=0x06;
Disp_Dot_Matrix8(matrix8);
*/
put_char('.');
}
else if(value==' ')
{
for(i=0;i<8;i++) matrix8[i]=0;
Disp_Dot_Matrix8(matrix8);
}
else if(value=='-')
{
/*
for(i=0;i<8;i++) matrix8[i]=0;
for(i=2;i<7;i++)
{
matrix8[i]=0x08;
}
Disp_Dot_Matrix8(matrix8);
*/
put_char('-');
}
}
/*以下是扫描VFD屏幕的程序*////////////////////////////////////////////////////
/*-- 文字: 高 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
const unsigned char hz[19][32]={{0x20,0x20,0x20,0x20,0x2E,0x2A,0xAA,0x6A,0x2A,0x2A,0x2E,0x20,0x20,0x20,0x20,0x00,
0x00,0xFF,0x80,0x80,0xBC,0xA4,0xA4,0xA4,0xA4,0xA4,0xBC,0x82,0x81,0xFE,0x00,0x00},
/*-- 文字: 炉 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x01,0x06,0x00,0xFF,0x04,0x18,0x00,0x1F,0x11,0x91,0x71,0x11,0x11,0x3F,0x10,0x00,
0x02,0x04,0x18,0xE0,0x21,0x12,0x0C,0xF0,0x00,0x00,0x00,0x00,0x00,0x80,0x00,0x00},
/*-- 文字: 卷 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x02,0x02,0x12,0x52,0x32,0x13,0x16,0xFA,0x12,0x12,0x33,0xD2,0x52,0x12,0x02,0x00,
0x10,0x00,0x20,0x40,0x80,0xFC,0x82,0x92,0x8A,0xF2,0x02,0x8E,0xC0,0x60,0x40,0x00},
/*-- 文字: 扬 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x10,0x10,0x10,0xFF,0x11,0x12,0x40,0x42,0x46,0x4B,0x52,0x63,0x42,0x02,0x03,0x00,
0x40,0x42,0x81,0xFE,0x00,0x10,0x12,0x22,0xC4,0x08,0x30,0xC2,0x01,0x02,0xFC,0x00},
/*-- 文字: 上 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x02,0x02,0x02,0x02,0x02,0x00,0x00,0x00,
0x00,0x02,0x02,0x02,0x02,0x02,0x02,0xFE,0x02,0x02,0x02,0x02,0x02,0x06,0x02,0x00},
/*-- 文字: 料 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x04,0x24,0x15,0x0E,0xFF,0x16,0x25,0x04,0x42,0x31,0x00,0x00,0xFF,0x00,0x00,0x00,
0x10,0x60,0x80,0x00,0xFF,0x00,0x80,0x40,0x40,0xC0,0x40,0x40,0xFF,0x80,0x80,0x00},
/*-- 文字: 系 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x40,0x44,0x4D,0x55,0x66,0x46,0x44,0x88,0xB2,0x81,0x80,0x80,0x00,0x00,
0x00,0x02,0x84,0xC8,0x90,0xA0,0x82,0x81,0xFE,0x80,0xA0,0x90,0xC8,0x46,0x00,0x00},
/*-- 文字: 统 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x04,0x0C,0x34,0xC5,0x06,0x08,0x21,0x23,0x25,0xB9,0x61,0x21,0x25,0x23,0x21,0x00,
0x04,0x44,0xC4,0x48,0x48,0x49,0x02,0x0C,0xF0,0x00,0x00,0xFC,0x02,0x82,0x0E,0x00},
/*-- 文字: , --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x1A,0x1C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: 内 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x1F,0x10,0x10,0x10,0x11,0xFE,0x12,0x11,0x10,0x10,0x10,0x1F,0x00,0x00,
0x00,0x00,0xFF,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x80,0x62,0x01,0xFE,0x00,0x00},
/*-- 文字: 蒙 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x40,0x59,0x51,0x51,0x55,0xF5,0x55,0x55,0x55,0x55,0xF5,0x55,0x51,0x59,0x50,0x00,
0x00,0x2A,0x2A,0x4A,0x54,0x94,0xAA,0x49,0x3E,0x10,0x28,0xE4,0x46,0x03,0x02,0x00},
/*-- 文字: 古 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x10,0x10,0x10,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x00,
0x00,0x00,0x00,0xFE,0x84,0x84,0x84,0x84,0x84,0x84,0x84,0xFE,0x00,0x00,0x00,0x00},
/*-- 文字: 科 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x08,0x48,0x49,0x4E,0x7F,0x8A,0x89,0x00,0x44,0x33,0x00,0x00,0xFF,0x00,0x00,0x00,
0x20,0x40,0x80,0x00,0xFF,0x00,0x20,0x20,0x20,0x40,0x40,0x40,0xFF,0x80,0x80,0x00},
/*-- 文字: 技 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x10,0x10,0x11,0xFF,0x12,0x14,0x00,0x13,0x12,0x12,0xFE,0x12,0x13,0x12,0x10,0x00,
0x80,0x82,0x01,0xFE,0x00,0x02,0x02,0x04,0xC8,0x30,0x30,0x48,0x84,0x06,0x04,0x00},
/*-- 文字: 大 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x04,0x04,0x04,0x04,0x04,0x04,0x05,0xFE,0x05,0x04,0x04,0x04,0x04,0x04,0x04,0x00,
0x00,0x01,0x02,0x04,0x08,0x30,0xC0,0x00,0x80,0x60,0x10,0x0C,0x06,0x03,0x02,0x00},
/*-- 文字: 学 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x02,0x0C,0x08,0x48,0x3A,0x2A,0x0A,0x8A,0x7A,0x2B,0x0A,0x18,0xEA,0x4C,0x08,0x00,
0x00,0x40,0x40,0x40,0x40,0x40,0x42,0x41,0xFE,0x40,0x40,0x40,0x40,0x40,0x40,0x00},
/*-- 文字: 研 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x40,0x43,0x4F,0x72,0x43,0x40,0x02,0x42,0x7F,0x42,0x42,0x42,0x7F,0x42,0x42,0x00,
0x80,0x00,0xFC,0x08,0xF9,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0xFF,0x00,0x00,0x00},
/*-- 文字: 制 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x0A,0xF2,0x52,0x12,0xFF,0x12,0x12,0x12,0x00,0x3F,0x00,0x00,0xFF,0x00,0x00,
0x00,0x00,0xFC,0x80,0x80,0xFF,0x84,0x86,0xFC,0x00,0xF0,0x02,0x01,0xFE,0x00,0x00},
/*-- 文字: 。 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}};
void VFD_Scroll(void) //VFD的滚屏功能
{
write_data(0x1f);
write_data(0x28);
write_data(0x61);
write_data(0x10);
write_data(0x4);
write_data(0x0);
write_data(0xD0);
write_data(0x01);
write_data(0x2);
}
void VFD_Scan_Screen(void) //滚动屏幕显示字幕,该方法使用VFD的滚屏功能
{
U8 i;
for(i=0;i<19;i++)
{
select_current_window(1);
set_cursor_pos((i+7)*16,0);
Disp_Dot_Matrix(hz[i]);
}
VFD_Scroll();
}
void VFD_Scan_Screen1(void) //该方法没有使用VFD的滚屏功能
{
BYTE i,j,s,e;
I16 x;
x=111;
for(s=0;s<=19;s++)
{
select_current_window(1);
set_cursor_pos(0,0);
VFD_Char(' ');
repL00:
for(j=0;j<16;j+=2)
{
for(i=s;i<s+7;i++)
{
select_current_window(1);
set_cursor_pos(x-j+i*16,0);
if(i>=19) VFD_Char(' ');
else Disp_Dot_Matrix(hz[i]);
}
}
x-=16;
if(x>0) goto repL00;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -