|
發表於 2012-1-22 00:50:35
|
顯示全部樓層
感謝!! 先前我一直找不到相關資料! 你可以使用 PT6312 來驅動,我上次的試驗不知道神麼原因字畫一直有錯誤,有時間再來試看看!!
/*VFD專用IC練習 20111104 顯示問題澄清 全部送0x0f 看是時序問題過快還是字位置 開始的位置從00 開始 另外確認連續位址增加的模式 */
#include<reg52.h>
//--------------------pt6312-----------------------
sbit STB=P3^3; // pt6312 strobe
sbit DIN=P3^4; // pt6312 data
sbit CLK=P3^5; // pt6312 clock
sbit CONF=P2^0;//control display on off
unsigned char TempData[12]= {0xbe,0xfe,0xce,0xde,0x77,0xff,0x7c,0x00,0x00,0x00,0x00,0x00};//第一步全都沒變
unsigned char adr;
unsigned char cmd1;
unsigned char cmd2;
unsigned char cmd3;
unsigned char cmd4;
bit Dat_flag;//data flag 不需要 stb變為hi
bit ONF_flag;// display on off control
//STB動作
#define STB_CLR STB=0//电平置低
#define STB_SET STB=1//电平置高
//DIN 動作
#define DIN_CLR DIN=0//电平置低
#define DIN_SET DIN=1//电平置高
//#define IO_R SDA //电平读取
// CLK信号
#define CLK_CLR CLK=0//时钟信号
#define CLK_SET CLK=1//电平置高
void PT6312_Write(unsigned char qdata)// 適用於命令
{
unsigned char k;
STB_CLR; //初始
for(k=0;k<8;k++)
{
CLK_CLR;
if(qdata & 0x01)
{
DIN_SET;
}
else
{
DIN_CLR;
}
CLK_SET;
qdata>>=1;
}
if (Dat_flag)
{
CLK_CLR;
}
else
{
STB_SET;
}
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
}
/*-------------------------------------------
//----------------------------------------------*/
void PT6312_Init(void)
{
CLK_SET; //初始設為 HI
STB_SET; //初始設為 HI
PT6312_Write (cmd1);//CMD1 設定寫入
}
void main(void)//
{
unsigned char i;
PT6312_Init();
cmd1=0x02;//6 dig 16 segment
cmd2=0x40 ;
Dat_flag=1;//
cmd3=0xc0 ;//start addr 00h
cmd4=0x8a ;//
while(1) //關掉會全亮度power off無效
{
if(CONF)
{
ONF_flag=!ONF_flag;
}
Dat_flag=0;//
PT6312_Write (cmd2);//CMD2 每字需變更位址 48 test mode work but only one word [no work 4c..44]
Dat_flag=1;//
PT6312_Write (cmd3);//CMD3 start address0x01 改變起始位址家1 [no work c1..c3]
// Dat_flag=1;//
for (i=0;i<12;i++)
{
adr=TempData;
PT6312_Write (adr);
}
//-------
STB_SET;
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
CLK_SET;//5 pulse time delay
//--------
Dat_flag=0;//
PT6312_Write (cmd1);//CMD1 6dig 16segment [no work02..01]
if(ONF_flag)
{
cmd4=0x8a;
}
else
{
cmd4=0x82;
}
PT6312_Write (cmd4);//CMD4 6/16 pulse width dim control 8a..83 work
}
}
//指令 2 資料設定參數
//指令 3 位址內資料寫入
//指令 4 顯示輸出以及亮度調整
|
|