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);
}
}