⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ts12864a.c

📁 此程序是GPS定位导航程序
💻 C
字号:
/*****************************************************************/
/*****************************************************************/
/*函数名称: TS12864A.c                                          */
/*函数功能: 液晶显示启动                                        */ 
/*入口参数: P6---------------------------------------液晶数据传输
             P3----------------------------------------液晶控制脚*/       
/*有无返回: 无                                                  */
/*修改记录: 无修改记录                                          */
/*编写作者: t483-4-19chenyong                                   */
/*编写日期: 2007-4-06                                           */
/*****************************************************************/

#include  "common.h"
#include  "TS12864A.h"
#include  "ziku.h"
#include  "delay.h"
unsigned char temp;

/*****************************************************************/
/*判断状态                                                       */
/*****************************************************************/				 
void LCD_Busy(void)     
{
    SFRPAGE=0x0f;
	LCD_RS=0;		          // 状态标志位和地址计数读入DB7和DB6-DB0   
	delay_17us();                   
	LCD_RW=1;	
	delay_17us();			                 
	LCD_DATA=0xff;			  //初始化
	while (1) 
	{
	  LCD_EN=1;
	  delay_17us();
	  if (LCD_DATA<0x80)break;//判断是否忙
	  LCD_EN=0;
	  delay_17us();
	} 
	LCD_EN=0;
	delay_17us();
}

/*****************************************************************/
/*写数据                                                         */
/*****************************************************************/
void LCD_Write_Data(uchar ddata)
{
	LCD_Busy();	              //检测是否处于忙的状态
	LCD_RS = 1;
	delay_17us();
	LCD_RW = 0;
	delay_17us();
	temp=ddata;
	SFRPAGE=0x0f; 
	LCD_DATA=temp;
	LCD_EN = 1;
	delay_17us();
	LCD_EN = 0;
	delay_17us();
}
/*****************************************************************/
/*写命令                                                         */
/*****************************************************************/

void LCD_Write_Command(uchar command)
{
	LCD_Busy();	              //检测是否处于忙的状态
	LCD_RS = 0;
	delay_17us();
	LCD_RW = 0;
	delay_17us();
	temp=command;
	SFRPAGE=0x0f; 
	LCD_DATA=temp;
	LCD_EN = 1;
	delay_17us();
	LCD_EN = 0;
	delay_17us();
}

void CleanScreen(void)
{
  	uchar i, j, k;

  	for (i=0;i<8;i++) 			
  	{
  		LCD_CSA = 1;
  		delay_17us();
  		LCD_CSB = 1;
  		delay_17us();
  		LCD_Write_Command(0x40);		  //设置列地址
  		delay_17us();
  		LCD_Write_Command(0xb8+i);	  //设置页地址
  		delay_17us();
  		LCD_CSA = 1;
 	    delay_17us();
  		LCD_CSB = 0;
  		delay_17us();
  		for(j=0;j<128;j++) 
  			LCD_Write_Data(0x00);
  		delay_17us();
 	    LCD_CSA = 0;
  		delay_17us();
  		LCD_CSB = 1;
  		delay_17us();
  		for(k=64;k<128;k++) 
  			LCD_Write_Data(0x00);
  		delay_17us();
  }
}  

/*****************************************************************/
/* 清屏                                                        

   y ------------------------------------------------------纵轴位置
   yy------------按LCD显示4行字来计算,0,代表第一行,3,代表第四行;
   mod---------------------------清屏方式,
   0-------------------------------------------------------按行清屏;
   1-------------------------------------------------------全部清屏;
*/
/*****************************************************************/
/*void LCD_Cls_xy(uchar mod, uchar yy)
{
	uchar x, y;
	uchar value_temp = 0;
	value_temp = 2*yy;
	switch(mod)
	{
		case 0:   	//按行清屏
			{	
			for (y=value_temp;y<value_temp+1;y++)
				for(x=0;x<128;x++) 
	                Dis_Play(x,y,0);
			 }

		case 1:	   //全部清屏
			 {	
				for (y=0;y<8;y++) 			 //清屏
				{
	  				for(x=0;x<128;x++) 
	 				Dis_Play(x,y,0);
				}

			 }  
	}

} 
*/
/*****************************************************************/
/*设置x,y位置                                                   */
/*****************************************************************/
void LCD_Set_xy(unsigned char x,unsigned char y)
{

  LCD_CSA = 1;
  delay_17us();
  LCD_CSB = 1;
  delay_17us();

  LCD_Write_Command(0x40|x);
  delay_17us();
  LCD_Write_Command(0xb8|y);
  delay_17us();

  if (x>=64)		    //判断是否显示半面,如果大于64则全屏显示
    {
	  LCD_CSA=0;
	  delay_17us();
	  LCD_CSB=1;
	  delay_17us();
	} 
	else 			   //小于64则半屏显示
	{
	  LCD_CSA=1;
	  delay_17us();
	  LCD_CSB=0;
	  delay_17us();	  
	}
	LCD_DATA=0xff;	   //IO口将电平拉高
	delay_17us();
}
/*****************************************************************/
/*函数名称: Dis_Play.c                                          */
/*函数功能: 显示汉字,fb==1:反白显示                            */
/*函数说明: 具体说明如下:
             x---------------------------------------------横轴位置 											  
             y---------------------------------------------纵轴位置
			 n-------------------------------------数据在表中的位置 
			 dis_value-----------------------------待显示汉字的代码
                                                                 */
/*修改记录: 无修改记录                                          */
/*编写日期: 2007-3-17                                           */
/*****************************************************************/
void Dis_Play(unsigned char x,unsigned char y,unsigned char dis_value)
{
	LCD_Set_xy(x,y);
	LCD_Write_Data(dis_value);
}

void LCD_Init(void)                            
{

	LCD_CSA = 1;
	delay_17us();
	LCD_CSB = 1;			  //控制器全开
	delay_17us();
	LCD_Write_Command(0x3f);  //开显示
	delay_17us();
	LCD_Write_Command(0xc0);  //设置起始地址
	delay_17us();

}

/*****************************************************************/
/*函数名称: Display_Character.c                                 */
/*函数功能: 显示汉字,fb==1:反白显示                            */
/*函数说明: 具体说明如下:
             x---------------------------------------------横轴位置 											  
             y---------------------------------------------纵轴位置
			 n-------------------------------------数据在表中的位置 
			 dis_table-----------------------------待显示数据代码表
			 dis_value-----------------------------待显示汉字的代码
                                                                 */
/*修改记录: 无修改记录                                          */
/*编写日期: 2007-3-17                                           */
/*****************************************************************/
void Display_Character(unsigned char x,unsigned char y,unsigned char n) 
{
	unsigned char i,dis_value;			  
	for(i=0;i<16;i++)
	{
	  switch(y) 
	  { 
	     case 1: dis_value=dis_table[i+n*32];      //确定显示的值,上半部分
	             Dis_Play(x*8+i,1,dis_value);
	             dis_value=dis_table[i+n*32+16];   //确定显示的值,上半部分
	             Dis_Play(x*8+i,2,dis_value);
				 break;
	     case 3: dis_value=dis_table[i+n*32];      //确定显示的值,上半部分
	             Dis_Play(x*8+i,3,dis_value);
	             dis_value=dis_table[i+n*32+16];   //确定显示的值,上半部分
	             Dis_Play(x*8+i,4,dis_value);
				 break;
	     case 5: dis_value=dis_table[i+n*32];      //确定显示的值,上半部分
	             Dis_Play(x*8+i,5,dis_value);
	             dis_value=dis_table[i+n*32+16];   //确定显示的值,上半部分
	             Dis_Play(x*8+i,6,dis_value);
				 break;
		 default:break;
	  }
	}
}

/*****************************************************************/
/*函数名称: Display_Char.c                                      */
/*函数功能: 显示字符,fb==1:反白显示                            */
/*函数说明: 具体说明如下:
             x---------------------------------------------横轴位置 											  
             y---------------------------------------------纵轴位置
			 n-------------------------------------数据在表中的位置 
			 dis_table-----------------------------待显示数据代码表
			 dis_value-----------------------------待显示汉字的代码
                                                                 */
/*修改记录: 无修改记录                                          */
/*编写日期: 2007-3-17                                           */
/*****************************************************************/
void Display_Char(unsigned char x,unsigned char y,unsigned char n)
{
	unsigned char i,dis_value;
	for (i=0;i<8;i++)
	{
	   dis_value=shuzi_table[i+n*16];
	   Dis_Play(x*8+i+1,y,dis_value);
	   dis_value=shuzi_table[i+n*16+8]; 
	   Dis_Play(x*8+i+1,y+1,dis_value);
	}
} 
void Display_Point(unsigned char px,unsigned char py,unsigned char pn)
{
	unsigned char i,dis_value;
	for (i=0;i<4;i++)
	{
	   dis_value=Point_table[i+pn*8];
	   Dis_Play(px*8+i+1,py,dis_value);
                          	}
}


/*****************************************************************/
/*函数名称: Display_Char.c                                      */
/*函数功能: 清除字符                                            */
/*函数说明: 具体说明如下:
             x---------------------------------------------横轴位置 											  
             y---------------------------------------------纵轴位置
			 n-------------------------------------清除字符的个数*/                                          
/*修改记录: 无修改记录                                          */
/*编写日期: 2007-3-17                                           */
/*****************************************************************/
 
void Clear_Area(unsigned char x,unsigned char y,unsigned char n)
{
	unsigned char ct=0;
	for(ct=0;ct<n;ct++)
		Display_Char(x+ct,y,64);
	delay_nms(10);		
}
 

/*****************************************************************/
/*函数名称: ten_n.c                                             */
/*函数功能: 保留的小数取整                                      */
/*修改记录: 无修改记录                                          */
/*编写日期: 2007-3-17                                           */
/*****************************************************************/

unsigned int ten_n(unsigned char n)
{
	unsigned int k;
	if(n==0) return 1;
	k=ten_n(n-1)*10;
	return( k);
} 

/*****************************************************************/
/*                            : end :                            */
/*****************************************************************/

 void delay_17us()
 {
 
 	 unsigned char t=17;
		 while(--t)
	 {
	 
	    _nop_();
	 
	 }  
 
 }
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -