钻石会员
主题
帖子
积分13131
阅读权限50
注册时间2012-10-3
最后登录1970-1-1
在线时间 小时
|
楼主 |
发表于 2013-12-16 22:55
|
显示全部楼层
是有点声音的,灯丝发出的。
用双面海棉胶垫在屏与PCB之间刚好合适。
缕空板影响板的美观。
参考代码(我用的是PIC16F628A,片内4M振荡源,程序中数组和变量的定义与51单片机有一些差异,注意修改)
//-----------------------------------------------------------------------
#define DIN RB0 // 数据输入线
#define CLK RB1 // 时钟信号线
#define STB RB2 // 片选信号线
#define DOUT RB3 // 数据输出线
//-----------------------------------------------------------------------
#define MODE 0x05 // VFD 段位设置( 9位*13段)
#define LIGHT 0x07 // VFD 亮度设置(0x00-0x07)
#define ON 0x08 // 开显示
#define OFF 0x00 // 关显示
//-----------------------------------------------------------------------
const uchar table_A[]=
{
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, // 0-9
0x77,0x7c,0x39,0x5e,0x79,0x71 // A-F
}; // 共阴字码表
uchar DP_Cache[9]; // 显示缓存单元
/*-----------------------------------------------------------------------
函数功能: 写数据
入口参数: 无
出口参数: 无
函数说明:
-----------------------------------------------------------------------*/
void Write_PT6312(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
CLK=0;
DIN=dat&0x01;
dat>>=1;
CLK=1;
}
}
/*-----------------------------------------------------------------------
函数功能: 片选信号
入口参数: 无
出口参数: 无
函数说明:
-----------------------------------------------------------------------*/
void send_cs(void)
{
STB=1;
STB=0;
}
/*-----------------------------------------------------------------------
函数功能: 初始化
入口参数: 无
出口参数: 无
函数说明:
-----------------------------------------------------------------------*/
void VFD_Init(void)
{
uchar i;
send_cs();
Write_PT6312(MODE); // 段位设置
send_cs();
Write_PT6312(0x40); // 设定数据
send_cs();
Write_PT6312(0xc0); // 设定地址
for (i=0;i<9;i++)
{
Write_PT6312(0x00); // 传输显示数据低字节
Write_PT6312(0x00); // 传输显示数据高字节
}
send_cs();
Write_PT6312(0x80|ON|LIGHT); // 显示控制
STB=1;
}
/*-----------------------------------------------------------------------
函数功能: 显示数据
入口参数: 无
出口参数: 无
函数说明:
-----------------------------------------------------------------------*/
void VFD_Display(void)
{
uchar i;
send_cs();
Write_PT6312(0xc0); // 设定地址
for (i=0;i<9;i++)
{
Write_PT6312(DP_Cache); // 传输显示数据低字节
Write_PT6312(0x00); // 传输显示数据高字节
}
send_cs();
Write_PT6312(0x80|ON|LIGHT); // 显示控制
STB=1;
}
/*-----------------------------------------------------------------------
显示
-----------------------------------------------------------------------*/
void DISP_FREQ(void)
{
DP_Cache[0] = table_A[8]; // 显缓中存入要显示的数据
DP_Cache[1] = table_A[7];
DP_Cache[2] = table_A[6]+0x80;// 加入小数点
DP_Cache[3] = table_A[5];
DP_Cache[4] = table_A[4];
DP_Cache[5] = table_A[3]+0x80;
DP_Cache[6] = table_A[2];
DP_Cache[7] = table_A[1];
DP_Cache[8] = table_A[0];
VFD_Display(); // 显示
}
/*-----------------------------------------------------------------------
主程序
-----------------------------------------------------------------------*/
void main (void)
{
uchar i;
Delay_ms(200);
MCU_Init(); // MCU初始化
VFD_Init(); // VFD初始化
while(1)
{
DISP_FREQ();
Delay_ms(100);
}
}
/*-----------------------------------------------------------------------
MCU初始化函数
-----------------------------------------------------------------------*/
void MCU_Init(void)
{
STATUS = 0X00;
INTCON = 0X00;
PCLATH = 0X00;
PORTA = 0X00;
PORTB = 0X00;
CMCON = 0B00000111; // <CM2:CM0>=111(0B00000111=0X07),关掉A口比较器
TRISA = 0B00000000; // 设置I/O方向(1=INPUT 0=OUTPUT)
TRISB = 0B00000000;
OPTION = 0B00100111; // 允许PORTB上拉,预分频器分配给TMR0
// 外部信号上升沿触发,1:256预分频
}
/*-----------------------------------------------------------------------
延时函数
-----------------------------------------------------------------------*/
void Delay_ms(uint i)
{
uint a,b;
for(a=i;a>0;a--)
for(b=110;b>0;b--);
}
|
|