www.pudn.com > TG12864.rar > spi_master1.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,
};
//#define Wry_command 1
//#define Wrn_command 0
uchar xdata RecivedDataBuffer[32];//½ÓÊÜ»º³åÇø
uchar xdata TXDataBuffer[32]; //·¢ËÍ»º³åÇø
uchar bdata flag;
sbit showflag = flag^0;
//sbit Wr_full = flag^1;
//¹Ü½Å¶¨Òå////////////////////////////////////////////////////////////////
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 lcd_busy(void);
//void rdata(uchar i);
void init_12864(void);
void startline(uchar i);
void disoff(uchar o);
void Delay(uint Count) ;
void setxy (uchar x1,uchar x2,uchar y) ;
void lw(uchar x, uchar y, uchar dd) ;
void dh(uchar xx, uchar yy, uchar n, uchar fb);
void showsing (uchar xx, uchar yy, uchar team[], uchar fb);
void clear(void);
/****************************************************
º¯ÊýÃû³Æ£
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊ
*****************************************************/
void spi_maser_init(void)
{
P2M1=0x00;
P2M2=0x00;
SS_MASTER = 1 ;
SPSTAT = 0xc0; //Çå³ýSPSTATÖеıê־λ
SPCTL = 0xdd;//Ö÷»ú£¬spiʹÄÜ
IT1=1;
EX1=1;
EA=1;
}
/****************************************************
º¯ÊýÃû³Æ£º
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊý£º
*****************************************************/
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(2); // Move byte to send to SPI data register
while((SPSTAT)&0x80 == 0) ; // Wait until SPI hs finished transmitting
}
/****************************************************
º¯ÊýÃû³Æ£º
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊý£º
*****************************************************/
uchar Spi_Read()
{
SPSTAT = 0xc0;
SPDAT = 0x00;
Delay(2); // Move byte to send to SPI data register
while((SPSTAT)&0x80 == 0) ; // Wait until SPI hs finished transmitting
return SPDAT;
}
/****************************************************
º¯ÊýÃû³Æ£º
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊý£º
*****************************************************/
void Write_command(uchar Write_Data)
{
SS_MASTER = 0;
Delay(1);
Spi_Write(Write_Data);
SS_MASTER = 1;
}
/****************************************************
º¯ÊýÃû³Æ£º
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊý£º
*****************************************************/
uchar Read_ack(void)
{
uchar ack;
SS_MASTER = 0;
Delay(1);
ack=Spi_Read();
SS_MASTER = 1;
return(ack);
}
/****************************************************
º¯ÊýÃû³Æ£º
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊý£º
*****************************************************/
void Write_slave(uchar Wr_Number, uchar *Data)
{
uchar i;
SS_MASTER = 0;
Delay(1);
//Spi_Write(Command);
for(i = 0;i < Wr_Number;i++)
{
Spi_Write(*Data);
Data++;
}
SS_MASTER = 1;
}
/****************************************************
º¯ÊýÃû³Æ£º
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊý£º
*****************************************************/
void Read_slave(uchar Rd_Number,uchar *Payload)
{
uchar j;
SS_MASTER = 0;
Delay(1);
//Spi_Write(Command);
for(j = 0;j < Rd_Number;j++)
{
*Payload= Spi_Read();
Payload++;
}
SS_MASTER = 1;
//Wr_full = 1;
}
/****************************************************
º¯ÊýÃû³Æ£
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊ
*****************************************************/
//д¿ØÖÆÃüÁîµ½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_();
//SPSTAT=0xc0;
}
/****************************************************
º¯ÊýÃû³Æ
º¯Êý¹¦Ä
´«µÝ²ÎÊ
*****************************************************/
//дÏÔʾÊý¾Ýµ½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_();
//SPSTAT=0xc0;
}
/****************************************************
º¯ÊýÃû³Æ£
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊ
*****************************************************/
//Òº¾§ÆÁ³õʼ»¯
void init_12864(void)
{
/*º¯ÊýÃûΪlcd_init µÄLCM³õʼ»¯×Óº¯Êý*/
disoff(0x00);//¿ªÏÔʾÆÁ//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
startline(0x00);//´ÓµÚÒ»ÐпªÊ¼ÏÔʾ//////2
clear();//ÇåÆÁ ///
disoff(0x01);//¿ªÏÔʾÆÁ//0x00¹ØÏÔʾ£»0x01¿ªÏÔʾ////1
}
/****************************************************
º¯ÊýÃû³Æ£
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊ
*****************************************************/
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 int1_int() interrupt 2
{
EA=0;
Read_slave(0x20,RecivedDataBuffer);
showflag=1;
EA=1;
}
/****************************************************
º¯ÊýÃû³Æ£
º¯Êý¹¦ÄÜ
´«µÝ²ÎÊ
*****************************************************/
void main(void)
{
//uchar ack_spi;
showflag = 0;
//Wr_full = 0;
spi_maser_init();
init_12864();
while(1)
{
Write_command(0xff);
// ack_spi=Read_ack();
if(showflag==1)
{
// Read_slave(0x20,RecivedDataBuffer);
showsing(0,0,RecivedDataBuffer,0);
// while(1);
//Write_command(0x0f);
// while(1);
}
showsing(0,2,hz1,0);
}
// while(1);
}