www.pudn.com > TG12864.rar > spi_master.c


#include "reg932.h" 
#include "stdio.h" 
#include "intrins.h" 
#include "math.h" 
#include "stdlib.h" 
 
#define uchar unsigned char 
#define uint  unsigned int 
#define ulong unsigned long 
 
code uchar hz1[32]= 
{ 
///*--  ÎÄ×Ö:  Ôç  --*/ 
///*--  ËÎÌå12;  ´Ë×ÖÌå϶ÔÓ¦µÄµãÕóΪ£º¿íx¸ß=16x16   --*/ 
0x04,0x04,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 
0x00,0x00,0x00,0xFE,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0x92,0xFE,0x00,0x00,0x00, 
}; 
  
uchar xdata RecivedDataBuffer[32];//½ÓÊÜ»º³åÇø 
uchar xdata TXDataBuffer[32]; //·¢ËÍ»º³åÇø 
  
 
//¹Ü½Å¶¨Òå//////////////////////////////////////////////////////////////// 
sbit A0=P2^1; 
sbit CS=P2^4; 
sbit SS_MASTER = P2^7; 
 
//º¯ÊýÁбí////////////////////////////////////////////////////////////////// 
void spi_maser_init(void); 
void wcode(uchar i);  
void wdata(uchar i); 
void Read_slave(uchar Rd_Number,uchar *Payload); 
void Write_slave(uchar Wr_Number, uchar *Data);  
void init_12864(void); 
void Delay(uint Count) ; 
void Spi_Write(uchar Write_Data); 
uchar Spi_Read(); 
//void startline (uchar i); 
//void setxy (uchar x1,uchar x2,uchar y); 
//void disoff (uchar o) ; 
//void lw(uchar x, uchar y, uchar dd); 
void showhz(uchar lin,uchar col,uchar hz1[]) ; 
void clrsrc(void); 
///**************************************************** 
//º¯ÊýÃû³Æ£º 
//º¯Êý¹¦ÄÜ 
//´«µÝ²ÎÊý£º 
//*****************************************************/ 
void Delay(uint Count) 
{ 
   uint i,Timer_Count; 
   Timer_Count = Count; 
   for(;Timer_Count > 0;Timer_Count--) 
      for(i = 100;i > 0;i--) 
	     {;} 
} 
///**************************************************** 
////º¯ÊýÃû³Æ£º 
//º¯Êý¹¦ÄÜ 
//´«µÝ²ÎÊý£º 
//*****************************************************/ 
void Spi_Write(uchar Write_Data) 
{    
    SPSTAT = 0xc0;  
	SPDAT = Write_Data;  
    Delay(3);                                  // Move byte to send to SPI data register 
    while((SPSTAT)&0x80 == 0) ;                // Wait until SPI hs finished transmitting    
    SPSTAT = 0xc0;  
} 
///**************************************************** 
//º¯ÊýÃû³Æ£º 
//º¯Êý¹¦ÄÜ 
//´«µÝ²ÎÊý£º 
//*****************************************************/ 
uchar Spi_Read() 
{ 
    SPSTAT = 0xc0;  
    SPDAT  = 0x00;  
    Delay(3);                                  // Move byte to send to SPI data register 
    while((SPSTAT)&0x80 == 0) ;                // Wait until SPI hs finished transmitting   
    SPSTAT = 0xc0; 
	return SPDAT;    
} 
///**************************************************** 
//º¯ÊýÃû³Æ£º 
//º¯Êý¹¦ÄÜ 
//´«µÝ²ÎÊý£º 
//*****************************************************/ 
/*void Write_slave(uchar Wr_Number, uchar *Data)  
{ 
  	uchar i; 
      
    Delay(1);     
     
    for(i = 0;i < Wr_Number;i++) 
	   { 
           Spi_Write(*Data); 
	       Data++; 
       } 
  
}*/ 
///**************************************************** 
//º¯ÊýÃû³Æ£º 
//º¯Êý¹¦ÄÜ 
//´«µÝ²ÎÊý£º 
//*****************************************************/ 
void Read_slave(uchar Rd_Number,uchar *Payload) 
{ 
    uchar j; 
  
    Delay(1);     
     
    for(j = 0;j < Rd_Number;j++) 
       { 
           *Payload= Spi_Read(); 
		    Payload++; 
       } 
     
} 
///**************************************************** 
//º¯ÊýÃû³Æ
//º¯Êý¹¦ÄÜ 
//´«µÝ²Î
//*****************************************************/ 
/////д¿ØÖÆÃüÁîµ½lcd                   
void wcode (uchar i)    //A0=0£¬CS=0 
{   
   SPSTAT=0xc0; 
   CS=1;//_nop_(); 
   A0=0;_nop_(); 
   CS=0;_nop_(); 
   SPDAT=i; 
   while(1) 
   { 
     if(SPSTAT&0x80) break; 
   } 
   CS=1;//_nop_(); 
    
}  
   
///**************************************************** 
//º¯ÊýÃû³Æ  
//º¯Êý¹¦Ä  
//´«µÝ²Î
//*****************************************************/ 
//дÏÔʾÊý¾Ýµ½lcd                  //A0=1£¬CS=0 
void wdata (uchar i)             
{    
   SPSTAT=0xc0; 
   CS=1;//_nop_(); 
   A0=1;_nop_(); 
   CS=0;_nop_(); 
   SPDAT=i;  
   while(1) 
   { 
     if(SPSTAT&0x80) break; 
   } 
   CS=1;//_nop_(); 
    
}  
  
/* 
////////////////////////////////////////////////////////////////////// 
void startline (uchar i) //ÉèÖÃÏÔʾÆðʼÐÐ 
{ 
 i=i+0x40; 
 wcode(i); 
} 
/////////////////////////////////////////////////////////////////////// 
void setxy (uchar x1,uchar x2,uchar y)    //¶¨Î»x·½Ïò¡¢y·½ÏòµÄ×Óº¯Êý 
{ 
  y=y+0xb0; 
  x2=x2+0x10; 
  x1=x1+0x00; 
  wcode(x1); 
  wcode(x2); 
  wcode(y); 
} 
/////////////////////////////////////////////////////////////////////// 
void disoff (uchar o)//ÏÔʾÆÁ¹Ø×Óº¯Êý 
{ 
  o=o+0xae; 
  wcode(o); 
} 
///////////////////////////////////////////////////////////// 
///*-----------------------------------дÊý¾ÝÖÁLCM×Óº¯Êý----------------------------------*/ 
/*void lw (uchar x, uchar y, uchar dd) ///*º¯ÊýÃûΪlw µÄдÊý¾ÝÖÁLCM×Óº¯Êý¡£¶¨Òåx¡¢y¡¢ddΪÎÞ·ûºÅ 
                                           //  ×Ö·ûÐ;ֲ¿±äÁ¿*/ 
/*{uchar temp,x1,x2;                                //   //lw×Óº¯Êý¿ªÊ¼	  
 temp=x; 
 x=x&0x0f; 
 x1=x; 
 x=temp; 
 x=x&0xf0; 
 x=x/16; 
 x=x&0x0f; 
 x2=x; 
 setxy(x1,x2,y);				  
 wdata(dd);			 					  
				 				  
}								  
 
////////////////////////////////////////////////////////// 
//*void showsing (uchar xx, uchar yy, uchar team[], uchar fb) ///*º¯ÊýÃûΪshowsingµÄÏÔʾµ¥¸öºº×Ö×Óº¯Êý¡£ 
///¶¨Òåxx¡¢yy¡¢n¡¢fbΪÎÞ·ûºÅ×Ö·ûÐ;ֲ¿±äÁ¿¡£ÆäÖÐxx¡¢yyΪÁС¢Ò³¶¨Î»Öµ.´øÊý×éÏÔʾ*/ 
  
//{								//showsing×Óº¯Êý¿ªÊ¼ 
//uchar i,dx;                        //¶¨Òåi¡¢dxΪÎÞ·ûºÅ×Ö·ûÐ;ֲ¿±äÁ¿ 
//  for(i=0;i<16;i++)					//forÑ­»·Ì壬ÓÃÓÚɨÃ躺×ÖµÄÉϰ벿·Ö 
//   {dx=team[i];					//È¡µÃµÚn¸öºº×ÖµÄÉϰ벿·ÖÊý¾Ý´úÂë 
//     if(fb)dx=255-dx;					//Èôfb²»Îª0£¬»ñµÃ·´°×Êý¾Ý´úÂë 
//     lw(xx+i+2,yy+1,dx); 
//   }			                    //½«Êý¾Ý´úÂëдÈëLCd 
//  for(i=0;i<16;i++)	 
//   {dx=team[i+16];				//È¡µÃµÚn¸öºº×ÖµÄϰ벿·ÖÊý¾Ý´úÂë 
//     if(fb)dx=255-dx;					//Èôfb²»Îª0£¬»ñµÃ·´°×Êý¾Ý´úÂë 
//     lw(xx+i+2,yy,dx);				//½«Êý¾Ý´úÂëдÈëLCM 
//   }								//forÑ­»·Ìå½áÊø 
//}								//dh×Óº¯Êý½áÊø  
//********************************************************/ 
//void clear(void) 
//{ 
//    uchar x,y; 
//    for(y=0;y<8;y++) 
//     { 
//       for(x=0;x<=131;x++)  
//		     lw(x,y,0x00);   
//     } 
//} 
////////////////////////////////////////////////////////////////////// 
void showhz(uchar lin,uchar col,uchar hz1[])  
{                                        
   uchar i; 
   uchar temp,temp_h,temp_l; 
   lin=lin*2; 
   temp_l=(col*16+2)&0x0f; 
   temp=((col*16)&0xf0)>>4; 
   temp_h=temp&0x0f;    
     
   wcode(0xB0|lin+1); 
   wcode(temp_h|0x10); 
   wcode((temp_l)|0x00); 
   for(i=0;i<16;i++) 
	    {  
	     wdata(hz1[i]); 
	    } 
   wcode(0xB0|lin); 
   wcode(temp_h|0x10); 
   wcode((temp_l)|0x00);    
   for(i=0;i<16;i++) 
	    {  
	     wdata(hz1[i+16]); 
	    } 
}   
/////////////////////////////////////////////////////////////////////// 
//Òº¾§ÆÁ³õʼ»¯ 
void init_12864(void) 
{ 
         //  /*º¯ÊýÃûΪlcd_init µÄLCM³õʼ»¯×Óº¯Êý*/ 
 wcode(0xae);//¿ªÏÔʾÆÁ//0x00¹ØÏÔʾ£»0x01¿ªÏÔʾ////1				  
 wcode(0xa1);  //ÉèÖÃADC ΪÕý³£0---64 ///8 
 wcode(0xa6);//ÉèÖÃÕý³£µÄ¿ª¹Ø×´Ì¬/////9 
 wcode(0x2f);//ÉèÖÃÄÜÁ¿¿ØÖÆ16 
 wcode(0x81);wcode(0x00);//Electronic volume control  setting 18 
 wcode(0xa3);//ÉèÖÃlcd bias///////11 
 wcode(0xc8);///Ñ¡ÔñÊä³ö״̬¼Ä´æÆ÷////15 
 wcode(0xa5);//È«ÆÁÁÁ///10 
 Delay(4);		//////			  
 wcode(0xa4); //Õý³£ÏÔʾ//////	10 
 wcode(0x40);//´ÓµÚÒ»ÐпªÊ¼ÏÔʾ//////2 
 clrsrc() ; 
 wcode(0xaf);//¿ªÏÔʾÆÁ//0x00¹ØÏÔʾ£»0x01¿ªÏÔʾ////1 
 		 
}  
void clrsrc(void) /* ÇåÏÔʾÆÁ*/ 
{ 
uchar i,j; 
uchar temp,temp_h,temp_l; 
for(i=0;i<8;i++) 
    { wcode(0xB0|i); 
	  for(j=0;j<132;j++) 
	   { temp_l=j&0x0f; 
         temp=(j&0xf0)>>4; 
         temp_h=temp&0x0f;   
	     wcode(temp_h|0x10); 
	     wcode(temp_l|0x00); 
	     wdata(0x00); 
	   } 
    } 
}  
/**************************************************** 
º¯ÊýÃû³Æ
º¯Êý¹¦ÄÜ 
´«µÝ
*****************************************************/ 
void reciverdata(uchar command ,uchar ack,uchar Rd_Number,uchar *Payload)  
{ 
    uchar j; 
	uchar ack_spi; 
 	Spi_Write(command); 
		  
	ack_spi=Spi_Read(); 
	if(ack_spi==ack) 
	  { 
       Delay(1);     
     
       for(j = 0;j < Rd_Number;j++) 
          { 
           *Payload= Spi_Read(); 
		    Payload++; 
          } 
       } 
}   
/**************************************************** 
º¯ÊýÃû³Æ
º¯Êý¹¦ÄÜ 
´«µÝ
*****************************************************/ 
void spi_maser_init(void) 
{ 
    P2M1=0x00;  
	P2M2=0x00; 
    SS_MASTER = 1 ; 
    SPSTAT = 0xc0; //Çå³ýSPSTATÖеıê־λ 
    SPCTL  = 0xdc;//Ö÷»ú£¬spiʹÄÜ  
} 
/**************************************************** 
º¯ÊýÃû³Æ
º¯Êý¹¦ÄÜ 
´«µÝ²Î
*****************************************************/ 
void main(void) 
{ 
//     uchar ack_spi; 
	 spi_maser_init();                                                                                                                    	 spi_maser_init(); 
     init_12864(); 
	 SS_MASTER = 0;  
 
     while(1) 
        { 
//        Spi_Write(0xff); 
//		ack_spi=Spi_Read(); 
//	    if(ack_spi==0xff) 
//	      { 
//	        Read_slave(0x20,RecivedDataBuffer); 
			reciverdata(0xff ,0xff,32,RecivedDataBuffer) ; 
            showhz(0,0,RecivedDataBuffer); 
//          } 
         
		showhz(1,0,hz1) ; 
		while(1);  
       } 
     
}