/*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
unsigned char TempData[12]= {0xff,0xff,0xff,0xff,0xff,0xff,0xff,0,0xff,0,0,0};//第一步全都沒變
unsigned char adr;
unsigned char cmd1;
unsigned char cmd2;
unsigned char cmd3;
unsigned char cmd4;
bit Dat_flag;//data flag 不需要 stb變為hi
//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無效
{
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[ i];
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]
PT6312_Write (cmd4);//CMD4 6/16 pulse width dim control 8a..83 work
}
} |