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


#include               
#include                               
#include                
////////////////////////////////////////////////////////////////////////////////// 
#define uchar unsigned char 
#define uint unsigned int 
#define ulong unsigned long 
///////////////////////////////////////////////////////////////////////////////////  
code uchar hz[]= 
{ 
/*--  文字:  早  --*/ 
/*--  宋体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, 
 
/*--  文字:  辞  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x7E,0x22,0x23,0x22,0x7E,0x00,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x00, 
0x24,0x24,0x24,0xFC,0x22,0x22,0xA0,0x84,0x94,0xA5,0x86,0x84,0xA4,0x94,0x84,0x00, 
 
/*--  文字:  白  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x7F,0x00,0x00,0x00, 
0x00,0x00,0xF8,0x08,0x08,0x0C,0x0B,0x08,0x08,0x08,0x08,0x08,0xF8,0x00,0x00,0x00, 
 
/*--  文字:  帝  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x3F,0x01,0x01,0x01,0xFF,0x01,0x11,0x21,0x1F,0x00,0x00,0x00,0x00, 
0x80,0x64,0x24,0x24,0x2C,0x34,0x25,0xE6,0x24,0x24,0x34,0x2C,0xA4,0x64,0x24,0x00, 
 
/*--  文字:  彩  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x20,0x10,0x08,0x06,0xFF,0x02,0x04,0x58,0x48,0x20,0x22,0x11,0x08,0x07,0x02,0x00, 
0x82,0x8A,0xB2,0x86,0xDB,0xA1,0x91,0x8D,0x88,0x20,0x10,0x08,0x86,0x64,0x40,0x00, 
 
/*--  文字:  云  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x20,0x70,0x38,0x2C,0x27,0x23,0x31,0x10,0x12,0x14,0x18,0x70,0x20,0x00,0x00, 
0x40,0x40,0x44,0x44,0x44,0x44,0xC4,0xC4,0x44,0x44,0x46,0x46,0x64,0x60,0x40,0x00, 
 
/*--  文字:  间  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0xFF,0x00,0x00,0x00,0x07,0x04,0x04,0x04,0x04,0x07,0x40,0x80,0x7F,0x00,0x00, 
0x00,0xF8,0x01,0x06,0x00,0xF0,0x92,0x92,0x92,0x92,0xF2,0x02,0x02,0xFE,0x00,0x00, 
 
/*--  文字:  ,  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
 
/*--  文字:  千  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x40,0x40,0x44,0x44,0x44,0x44,0x44,0xFC,0x42,0x42,0x42,0x43,0x42,0x60,0x40,0x00, 
 
/*--  文字:  里  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x40,0x44,0x44,0x44,0x44,0x44,0x7F,0x44,0x44,0x44,0x44,0x44,0x40,0x40,0x00, 
0x00,0x00,0xFF,0x91,0x91,0x91,0x91,0xFF,0x91,0x91,0x91,0x91,0xFF,0x00,0x00,0x00, 
 
/*--  文字:  江  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0x04,0x7E,0x01,0x20,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x00, 
0x10,0x60,0x01,0xC6,0x30,0x00,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00,0x00, 
 
/*--  文字:  陵  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0xFF,0x02,0x04,0x43,0x48,0x24,0x22,0x15,0x09,0x15,0x23,0x60,0xC0,0x40,0x00, 
0x00,0xFE,0x22,0x5A,0x86,0x10,0x94,0x74,0x94,0x1F,0x34,0x54,0x94,0x94,0x10,0x00, 
 
/*--  文字:  一  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xC0,0x80,0x00, 
 
/*--  文字:  日  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x00,0x3F,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,0x00,0x00, 
0x00,0x00,0x00,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0xFE,0x00,0x00,0x00,0x00, 
 
/*--  文字:  还  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x1F,0x20,0x42,0x41,0x40,0x40,0x5F,0x40,0x40,0x40,0x47,0x42,0x40,0x00, 
0x40,0x41,0xCE,0x04,0x00,0x02,0x82,0x42,0xF2,0x0E,0x42,0x82,0x02,0x02,0x00,0x00, 
 
/*--  文字:  。  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
 
/*--  文字:  两  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x7F,0x08,0x04,0x03,0x00,0x10,0x09,0x06,0x01,0x01,0x26,0x40,0x3F,0x00,0x00, 
0x02,0xF2,0x12,0x12,0x12,0xFE,0x92,0x12,0x12,0xFE,0x12,0x12,0x12,0xFB,0x12,0x00, 
 
/*--  文字:  岸  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x1F,0x04,0x04,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x00, 
0x00,0x00,0xE0,0x2E,0xA8,0xA8,0xA8,0xA8,0xAF,0xA8,0xA8,0xA8,0xA8,0xAE,0x20,0x00, 
 
/*--  文字:  猿  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x04,0x42,0x81,0x40,0x3F,0x10,0x08,0xFD,0x43,0x27,0x09,0x11,0x69,0xC4,0x44,0x00, 
0x20,0x12,0x0C,0x9C,0xE3,0x10,0x14,0xD4,0x54,0x5F,0x54,0x54,0xD4,0x14,0x10,0x00, 
 
/*--  文字:  声  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x30,0x0F,0x02,0x02,0x02,0x02,0x03,0x02,0x02,0x02,0x02,0x07,0x00,0x00,0x00, 
0x02,0x12,0xD2,0x52,0x52,0x52,0x52,0xDF,0x52,0x52,0x52,0x52,0xD2,0x12,0x02,0x00, 
 
/*--  文字:  啼  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x0F,0x02,0x02,0x07,0x00,0x00,0x3F,0x01,0x01,0xFF,0x11,0x21,0x1F,0x00,0x00,0x00, 
0xFC,0x04,0x04,0xFC,0x80,0x64,0x24,0x2C,0x35,0xE6,0x24,0x34,0xAC,0x66,0x24,0x00, 
 
/*--  文字:  不  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x08,0x04,0x02,0x01,0x00,0x00,0x7F,0x00,0x00,0x00,0x01,0x07,0x02,0x00,0x00, 
0x00,0x02,0x02,0x02,0x02,0x82,0x42,0xFE,0x06,0x42,0xC2,0x82,0x02,0x03,0x02,0x00, 
 
/*--  文字:  住  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x7F,0x00,0x20,0x21,0x21,0x21,0x21,0x3F,0x21,0x21,0x21,0x31,0x20,0x00, 
0x40,0x20,0xF0,0x0C,0x03,0x08,0x08,0x09,0x0A,0xFC,0x08,0x08,0x8C,0x08,0x00,0x00, 
 
/*--  文字:  ,  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x58,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
 
/*--  文字:  轻  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x08,0x08,0x08,0xFF,0x04,0x44,0x41,0x41,0x41,0x41,0x7F,0x41,0x41,0x41,0x41,0x00, 
0xC4,0xB4,0x8F,0xF4,0x84,0x84,0x04,0x82,0x42,0x22,0x12,0x2A,0x46,0xC2,0x00,0x00, 
 
/*--  文字:  舟  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x80,0x40,0x30,0x0F,0x00,0x02,0x04,0x0C,0x40,0x80,0x7F,0x00,0x00,0x00,0x00, 
0x80,0x80,0x80,0x80,0xFC,0x84,0x86,0x95,0xA4,0x84,0x84,0xFC,0x80,0x80,0x80,0x00, 
 
/*--  文字:  已  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x00,0x3F,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x3C,0x10,0x00, 
0x00,0x00,0xE2,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x7E,0x00,0x00,0x00,0x00, 
 
/*--  文字:  过  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x20,0x1F,0x20,0x20,0x40,0x40,0x43,0x41,0x48,0x50,0x4F,0x40,0x40,0x40,0x00, 
0x80,0x81,0x8E,0x04,0x00,0x10,0x50,0x90,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x00, 
 
/*--  文字:  万  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x40,0x20,0x10,0x0C,0x03,0x00,0x00,0x20,0x60,0x20,0x1F,0x00,0x00,0x00,0x00, 
0x00,0x02,0x02,0x02,0x02,0x82,0x7E,0x22,0x22,0x22,0x22,0xF2,0x22,0x02,0x02,0x00, 
 
/*--  文字:  重  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x40,0x40,0x48,0x4B,0x4A,0x4A,0x4A,0x7F,0x4A,0x4A,0x4A,0x4B,0x48,0x40,0x40,0x00, 
0x08,0x08,0x0A,0xEA,0xAA,0xAA,0xAA,0xFF,0xA9,0xA9,0xA9,0xE9,0x08,0x08,0x08,0x00, 
 
/*--  文字:  山  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x20,0x7F,0x20,0x20,0x20,0x20,0x3F,0x20,0x20,0x20,0x20,0x20,0x7F,0x00,0x00, 
0x00,0x00,0xE0,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0xE0,0x00,0x00, 
 
/*--  文字:  。  --*/ 
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/ 
0x00,0x18,0x24,0x24,0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 
}; 
//管脚定义//////////////////////////////////////////////////////////////// 
sbit A0=P2^1; 
sbit CS=P2^4; 
//函数列表////////////////////////////////////////////////////////////////// 
void wcode(uchar i);  
void wdata(uchar i); 
//void lcd_busy(void); 
//void rdata(uchar i); 
void init_12864(void); 
void startline(uchar i); 
void disoff(uchar o); 
void delay(ulong v) ; 
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 clear(void); 
////////////////////////////////////////////////////////////////////////// 
//写控制命令到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(0xa0);  //设置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(0xc0);///选择输出状态寄存器////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); 
} 
////////////////////////////////////////////////////////////////////// 
 void delay (ulong v) 
 { 
    while(v!=0)v--; 
 } 
  
///////////////////////////////////////////////////////////// 
/*-----------------------------------写数据至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 dh (uchar xx, uchar yy, uchar n, uchar fb) /*函数名为dh的显示汉字子函数。 
定义xx、yy、n、fb为无符号字符型局部变量。其中xx、yy为列、页定位值, 
n为汉字库中的第n个汉字,fb为反白显示选择*/ 
{								//dh子函数开始 
uchar i,dx;                        //定义i、dx为无符号字符型局部变量 
  for(i=0;i<16;i++)					//for循环体,用于扫描汉字的上半部分 
   {dx=hz[i+n*32];					//取得第n个汉字的上半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx*8+i+2,yy+1,dx); 
   }			//将数据代码写入LCd 
  for(i=0;i<16;i++)	 
   {dx=hz[(i+16)+n*32];				//取得第n个汉字的下半部分数据代码 
     if(fb)dx=255-dx;					//若fb不为0,获得反白数据代码 
     lw(xx*8+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 main(void) 
{ 
  uchar loop;//定义字符型局部变量loop 
  P2M1=0xc0;P2M2=0xc0; 
  SPCTL=0xdc; 
  SPSTAT=0xc0; 
  init_12864();		 
					//延时一会 
while(1)						//无限循环 
{ 
/************显示第一行(8个字)***********/ 
  
 for(loop=0;loop<8;loop++) 
	{dh(2*loop,0,loop,0); 
	//dh(2*loop,0,loop,0); 
//	dh(2*loop,0,loop,0); 
	//dh(2*loop,0,loop,0); 
	//dh(2*loop,0,loop,0); 
	//dh(2*loop,0,loop,0); 
	//dh(2*loop,0,loop,0); 
	//dh(2*loop,0,loop,0); 
	} 
/*************显示第二行(8个字)**********/ 
for(loop=0;loop<8;loop++) 
	{dh(2*loop,2,loop+8,0); 
	//dh(2*loop,2,loop+8,0); 
//	dh(2*loop,2,loop+8,0); 
//	dh(2*loop,2,loop+8,0); 
	//dh(2*loop,2,loop+8,0); 
	//dh(2*loop,2,loop+8,0); 
	//dh(2*loop,2,loop+8,0); 
	//dh(2*loop,2,loop+8,0); 
	} 
/**************显示第三行(8个字)*************/ 
for(loop=0;loop<8;loop++) 
	{dh(2*loop,4,loop+16,0); 
	//dh(2*loop,4,loop+16,1); 
	//dh(2*loop,4,loop+16,1); 
	//dh(2*loop,4,loop+16,1); 
	//dh(2*loop,4,loop+16,1); 
//	dh(2*loop,4,loop+16,1); 
	//dh(2*loop,4,loop+16,1); 
	//dh(2*loop,4,loop+16,1); 
	} 
/*************显示第四行(8个字)*************/ 
for(loop=0;loop<8;loop++) 
	{dh(2*loop,6,loop+24,0); 
	//dh(2*loop,6,loop+24,1); 
	//dh(2*loop,6,loop+24,1); 
	//dh(2*loop,6,loop+24,1); 
	//dh(2*loop,6,loop+24,1); 
	//dh(2*loop,6,loop+24,1); 
	//dh(2*loop,6,loop+24,1); 
	//dh(2*loop,6,loop+24,1); 
	} 
/*************************/ 
while(1) 
    { 
	_nop_(); 
	} 
} 
}