📄 vfd.c
字号:
#include <iom128v.h>
#include "vfd.h"
/*等待VFD空闲就返回,这个调用都是在SRE置位的情况下*/
void wait_free(void)
{
while((PVFD & 0x80));
}
/*向VFD写入一个字节*/
void write_data(BYTE data)
{
SSRE();
wait_free();
PVFD=data;
wait_free();
CSRE();
}
/*清VFD屏幕,current window*/
void display_clear(void)
{
write_data(0x0c);
}
/*初始化VFD模块*/
void init_vfd(void)
{
write_data(0x1b);
write_data(0x40);
}
/*设置亮度级别*/
void brightness_control(BYTE level)
{
write_data(0x1f);
write_data(0x58);
write_data(level);
}
/*显示字符*/
void put_char(BYTE ch)
{
write_data(ch);
}
/*选择当前窗口
winNO=0表示base window
winNO=1~4表示user window
*/
void select_current_window(BYTE winNO)
{
write_data(0x1f);
write_data(0x28);
write_data(0x77);
write_data(0x01);
write_data(winNO);
}
/*设置光标为置
0<=x<=512
0<=y<=1
*/
void set_cursor_pos(U16 x,U16 y)
{
write_data(0x1f);
write_data(0x24);
write_data(x & 0xFF);
write_data((x >> 8) & 0xFF);
write_data(y & 0xFF);
write_data((y >> 8) & 0xFF);
}
/*用户自定义窗口*/
void set_user_window(BYTE winNO,BOOL bDefine,U16 x,U16 y,U16 width,U16 height)
{
write_data(0x1f);
write_data(0x28);
write_data(0x77);
write_data(0x02);
write_data(winNO);
write_data(bDefine);
write_data(x & 0xFF);
write_data((x >> 8) & 0xFF);
write_data(y & 0xFF);
write_data((y >> 8) & 0xFF);
write_data(width & 0xFF);
write_data((width >> 8) & 0xFF);
write_data(height & 0xFF);
write_data((height >> 8) & 0xFF);
}
/*设置字符方式下的x,y方向上的放大倍数*/
void set_magnify_scale(BYTE xScale,BYTE yScale)
{
write_data(0x1f);
write_data(0x28);
write_data(0x67);
write_data(0x40);
write_data(xScale);
write_data(yScale);
}
/*16*16字符的定义*///////////////////////////////////////////////////////////////////
/*-- 文字: 0 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
const unsigned char h16[16][32]={{0x00,0x00,0x00,0x1F,0x20,0x40,0x40,0x40,0x40,0x40,0x20,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x04,0x02,0x02,0x02,0x02,0x02,0x04,0xF8,0x00,0x00,0x00,0x00},
/*-- 文字: 1 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x10,0x20,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x02,0x02,0xFE,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: 2 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x18,0x20,0x40,0x40,0x40,0x41,0x41,0x21,0x1E,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x1E,0x22,0x42,0x82,0x82,0x02,0x02,0x02,0x0E,0x00,0x00,0x00,0x00},
/*-- 文字: 3 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x30,0x40,0x40,0x40,0x41,0x41,0x42,0x44,0x38,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x0C,0x02,0x02,0x02,0x02,0x02,0x82,0x44,0x38,0x00,0x00,0x00,0x00},
/*-- 文字: 4 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x01,0x06,0x38,0x40,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x50,0x90,0x10,0x12,0x12,0xFE,0x12,0x12,0x10,0x00,0x00,0x00,0x00},
/*-- 文字: 5 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x7F,0x41,0x42,0x42,0x42,0x42,0x42,0x41,0x40,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x8C,0x02,0x02,0x02,0x02,0x02,0x02,0x04,0xF8,0x00,0x00,0x00,0x00},
/*-- 文字: 6 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x1F,0x20,0x41,0x41,0x41,0x41,0x41,0x20,0x18,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xF8,0x84,0x02,0x02,0x02,0x02,0x02,0x84,0x78,0x00,0x00,0x00,0x00},
/*-- 文字: 7 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x70,0x40,0x40,0x40,0x40,0x41,0x42,0x4C,0x70,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x0E,0x70,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
/*-- 文字: 8 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x1C,0x22,0x41,0x41,0x41,0x41,0x41,0x22,0x1C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x78,0x84,0x02,0x02,0x02,0x02,0x02,0x84,0x78,0x00,0x00,0x00,0x00},
/*-- 文字: 9 --*/
/*-- 宋体12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x1E,0x21,0x40,0x40,0x40,0x40,0x40,0x21,0x1F,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x18,0x04,0x82,0x82,0x82,0x82,0x82,0x04,0xF8,0x00,0x00,0x00,0x00},
/*-- 文字: A --*/
/*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x1F,0x03,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x04,0x1C,0x70,0xA0,0x20,0x20,0xE0,0xF0,0x3C,0x0C,0x00,0x00,0x00},
/*-- 文字: B --*/
/*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x08,0x08,0x08,0x0F,0x0F,0x02,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x44,0x44,0xC4,0xC4,0xFC,0x38,0x00,0x00,0x00},
/*-- 文字: C --*/
/*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x01,0x07,0x0E,0x08,0x08,0x10,0x10,0x08,0x08,0x0E,0x00,0x00,0x00,
0x00,0x00,0x00,0xF0,0xF8,0x1C,0x04,0x06,0x02,0x02,0x02,0x04,0x04,0x00,0x00,0x00},
/*-- 文字: D --*/
/*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x08,0x08,0x08,0x08,0x0E,0x07,0x03,0x00,0x00,
0x00,0x00,0x00,0x04,0xFC,0xFC,0x04,0x04,0x04,0x04,0x04,0x0C,0xF8,0xF0,0x00,0x00},
/*-- 文字: E --*/
/*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x0F,0x0F,0x08,0x08,0x08,0x08,0x09,0x0C,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0xFC,0xFC,0x84,0x84,0x84,0x84,0xE4,0x0C,0x00,0x00,0x00,0x00},
/*-- 文字: F --*/
/*-- 隶书12; 此字体下对应的点阵为:宽x高=16x16 --*/
{0x00,0x00,0x00,0x00,0x00,0x0F,0x0F,0x08,0x08,0x08,0x08,0x09,0x08,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFC,0xFC,0x84,0x80,0x80,0x80,0xC0,0x00,0x00,0x00,0x00}};
//unsigned char const *array[16]={h0,h1,h2,h3,h4,h5,h6,h7,h8,h9,ha,hb,hc,hd,he,hf};
unsigned char matrix[32]; /*用于存储自定义的字符*/
/*16*16字符的定义结束*///////////////////////////////////////////////////////////////////
/*8*8字符的定义*///////////////////////////////////////////////////////////////////
/*-- 文字: 0 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h80[]={0x00,0x00,0x7C,0x44,0x38,0x00,0x00,0x00};
/*-- 文字: 1 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h81[]={0x00,0x00,0x00,0x7C,0x00,0x00,0x00,0x00};
/*-- 文字: 2 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h82[]={0x00,0x00,0x6C,0x54,0x64,0x00,0x00,0x00};
/*-- 文字: 3 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
const unsigned char h83[]={0x00,0x00,0x44,0x54,0x28,0x00,0x00,0x00};
/*-- 文字: 4 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
const unsigned char h84[]={0x00,0x00,0x38,0x3C,0x08,0x00,0x00,0x00};
/*-- 文字: 5 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
const unsigned char h85[]={0x00,0x00,0x70,0x54,0x58,0x00,0x00,0x00};
/*-- 文字: 6 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
const unsigned char h86[]={0x00,0x00,0x3C,0x54,0x58,0x00,0x00,0x00};
/*-- 文字: 7 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h87[]={0x00,0x00,0x40,0x78,0x40,0x00,0x00,0x00};
/*-- 文字: 8 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h88[]={0x00,0x00,0x68,0x54,0x28,0x00,0x00,0x00};
/*-- 文字: 9 --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h89[]={0x00,0x00,0x70,0x4C,0x38,0x00,0x00,0x00};
/*-- 文字: A --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h8a[]={0x00,0x0C,0x30,0x68,0x1C,0x04,0x00,0x00};
/*-- 文字: B --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h8b[]={0x00,0x00,0x7C,0x54,0x7C,0x00,0x00,0x00};
/*-- 文字: C --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h8c[]={0x00,0x38,0x44,0x44,0x44,0x00,0x00,0x00};
/*-- 文字: D --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h8d[]={0x00,0x00,0x7C,0x44,0x78,0x00,0x00,0x00};
/*-- 文字: E --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h8e[]={0x00,0x00,0x7C,0x54,0x7C,0x00,0x00,0x00};
/*-- 文字: F --*/
/*-- 新宋体5; 此字体下对应的点阵为:宽x高=8x7 --*/
/*-- 高度不是8的倍数,现调整为:宽度x高度=8x8 --*/
//const unsigned char h8f[]={0x00,0x00,0x7C,0x50,0x70,0x00,0x00,0x00};
//const unsigned char *array8[16]={h80,h81,h82,h83,h84,h85,h86,h87,h88,h89,h8a,h8b,h8c,h8d,h8e,h8f};
unsigned char matrix8[8]; /*用于存储自定义的字符*/
/*8*8字符的定义结束*///////////////////////////////////////////////////////////////////
/*应用编程接口(API)*/
void Disp_Dot_Matrix(const BYTE ar[]) /*显示16*16的点阵*/
{
BYTE i;
write_data(0x1f);
write_data(0x28);
write_data(0x66);
write_data(0x11);
write_data(CHAR_WIDTH);
write_data(0x0);
write_data(CHAR_HEIGHT/8);
write_data(0x0);
write_data(0x01);
for(i=0;i<CHAR_WIDTH;i++)
{
write_data(ar[i]);
write_data(ar[i+CHAR_WIDTH]);
}
}
void Disp_Matrix(BYTE ar[]) /*显示自定义16*16的点阵*/
{
BYTE i;
write_data(0x1f);
write_data(0x28);
write_data(0x66);
write_data(0x11);
write_data(CHAR_WIDTH);
write_data(0x0);
write_data(CHAR_HEIGHT/8);
write_data(0x0);
write_data(0x01);
for(i=0;i<CHAR_WIDTH;i++)
{
write_data(ar[i]);
write_data(ar[i+CHAR_WIDTH]);
}
}
/*显示一个字符*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -