現今的擴充元件其溝通介面,大都作成串列如i2c或spi等,但如對速度有要求的,當然還有
並列介面,而PT6958就是串列的(EEPROM 24XX 是I2C,93CXX是SPI)
下面是用8X51系列,寫的範例程式,供想用PT6958的人參考,此範例並還未用到PT6958的
按鍵功能,這功能在下一篇再和大家分享吧


//* =======================*//
//*                                                                   *//
//*   PT6958.c                                                *//
//*   DATE:2009 8_25                                *//
//*   Author:Naga Lee                                  *//
//*   Description:PT6958                            *//
//*                                                                     *//
//* ======================  *//
//#include "REG_MPC82G516.H"
#include "REG_MPC89L51-515.H"
#include "INTRINS.H"


#define  dout  P34
#define  din   P35
#define  clk   P36
#define  stb   P37
unsigned char  command1=0x40;
unsigned char  command2=0xc0;
unsigned char  command3=0x88;
unsigned char  disp_data[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00,0x40};
unsigned char  _a_sec=0,i=0,j;
unsigned int   time_cnt=0x0000;
unsigned char  disp_1=10,disp_2=10,disp_3=10,disp_4=10;
unsigned char  data_a,data_b,data_c,data_d;


void send_comm_data ( unsigned char command_data );
void L_Delay(int WAIT_COUNT);
void S_Delay();


void Timer_Interrupt_1() interrupt 3
{
      _a_sec ++ ;
 
   if (_a_sec > 0x28)     // 計算1秒
      { time_cnt ++   ;
       _a_sec=0 ;}
      
   if ( time_cnt>1999)
       { time_cnt=0; }   
     TH1    =  0X3C ;         
     TL1    =  0XB0 ;
 
}
void Timer_Interrupt_2() interrupt 5
{


  T2CON &=  0X7F;    //CLEAR TIMER2 INT_FLAG


}
void Init_IRQ()
{



    ET1     =   0x01; //Enable Timer Interrupt 1
    ET2     =   0x01; //Enable Timer Interrupt 2


    TMOD    =  0X10 ;
    TH1     =  0X3C ;         
    TL1     =  0XB0 ;
    T2CON   =  0X00 ;
    RCAP2H  =  0X15 ;              
    RCAP2L  =  0X00 ;                 
 
    EA      =  0x01 ;         //Enable All Interrupt                   
    TR1     =  0X01 ;       //START TIMER1
    T2CON  |=  0X04 ; //START TIMER2
  
}
void wait_15_nop(void)
{
 
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    _nop_(); 
    _nop_();
    _nop_();
    _nop_();  
    _nop_();
    _nop_();
   
}
void S_Delay(void)
{
  int   S_Loop ;
  int   Null_Var ;


  for   ( S_Loop = 0 ; S_Loop < 20 ; S_Loop ++ )
        Null_Var += 1 ;
  
}
 
// ----------------------------------------------
void L_Delay(int WAIT_COUNT)
{
   int   L_Loop ;


   for   ( L_Loop = 0 ; L_Loop < WAIT_COUNT ; L_Loop ++ )
        S_Delay( ) ;  
}


void send_comm_data ( unsigned char command_data )
{    // 寫入一個 byte


 unsigned char i=0;
     for (i=0;i<8;i++)
      {
           clk=0;
           wait_15_nop();
        if ((command_data&0x01)==0X01) din=1  ; 
               else din=0;
           clk=1;
           wait_15_nop();          
           command_data>>=1;
      }


}
void main(void)
{


   P3=0XFF;
   L_Delay(0x188);


///---- init pt6958
   stb=0;
   wait_15_nop();   
   send_comm_data(command1) ;//位置順序增加
   stb=1;
   wait_15_nop();



   stb=0;
   wait_15_nop();
   send_comm_data(command2) ;
   wait_15_nop();
  
   for (i=0;i>9;i++)
   {
// clear display memory
   send_comm_data(0x00) ;
   wait_15_nop();
   }


   stb=1;
   wait_15_nop();


   stb=0;
   wait_15_nop();
   send_comm_data(command3) ;
   wait_15_nop();


   stb=1;
   wait_15_nop();
 
///---- init pt6958
    Init_IRQ();
   
while (1)
{


     data_a = time_cnt % 10 ; 
     data_b = (time_cnt/10)%10 ; 
     data_c = (time_cnt%1000)/100 ;    
     data_d = time_cnt / 1000 ;


     if (data_d==0)
       {data_d=0x00;}
     if (data_d==1)
       {data_d=0x06;}
/////////////////////////
   stb=0;
   _nop_();
   _nop_();
   send_comm_data(command1) ;//位置順序增加
   stb=1;
   _nop_();
   _nop_();


   stb=0;
   _nop_();
   _nop_();
   send_comm_data(command2) ;
   _nop_();
   _nop_();
  
// write data to display memory
   send_comm_data(disp_data[data_a]) ;
   _nop_();
   _nop_();
   send_comm_data(0x00) ;
   _nop_();
   _nop_(); 
   send_comm_data(disp_data[data_b]) ;
   _nop_();
   _nop_();
   send_comm_data(0x00) ;
   _nop_();
   _nop_(); 
   send_comm_data(disp_data[data_c]) ;
   _nop_();
   _nop_();
   send_comm_data(0x00) ;
   _nop_();
   _nop_(); 
   send_comm_data(data_d) ;
   _nop_();
   _nop_();    
  
   stb=1;
   _nop_();
   _nop_();            
   stb=0;
   _nop_();
   _nop_();
   send_comm_data(command3) ;
   _nop_();
   _nop_();


   stb=1;
   _nop_();
   _nop_(); 
  }
}  
     


 


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 tooru178 的頭像
    tooru178

    電子制作 DIY

    tooru178 發表在 痞客邦 留言(0) 人氣()