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

📄 ts12864a.c

📁 基于8051F实现导纳分析仪,键盘,液晶,功能都全有,其中包含测频,测相,测高电平,测低电平,测幅.等多种算法思想.用C语言实现.绝对原创!
💻 C
字号:
/*===============================================================*/
/*函数名称: TS12864A.c                                          */
/*函数功能: 液晶显示启动                                        */ 
/*入口参数: P2---------------------------------------液晶数据传输
             P3----------------------------------------液晶控制脚*/       
/*有无返回: 无                                                  */
/*修改记录: 无修改记录                                          */
/*编写作者: t483-4-19chenyong                                   */
/*编写日期: 2007-4-06                                           */
/*===============================================================*/
#include  "common.h"
#include  "TS12864A.h"
#include  "String_pixel.h"
/*===============================================================*/
/*判断状态                                                       */
/*===============================================================*/				 
void LCD_Busy(void)     
{
	LCD_RS=0;		    // 状态标志位和地址计数读入DB7和DB6-DB0                      
	LCD_RW=1;				                 
	LCD_DATA=0xff;			//初始化
	while (1) 
	{
	  LCD_EN=1;
	  if (LCD_DATA<0x80)break;//判断是否忙
	  LCD_EN=0;
	} 
	LCD_EN=0;
}

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

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

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

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

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

   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;
  LCD_CSB = 1;

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

  if (x>=64)		   //判断是否显示半面,如果大于64则全屏显示
    {
	  LCD_CSA=0;
	  LCD_CSB=1;
	} 
	else 			   //小于64则半屏显示
	{
	  LCD_CSA=1;
	  LCD_CSB=0;	  
	}
	LCD_DATA=0xff;			//IO口将电平拉高
}
/*===============================================================*/
/*函数名称: 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;
	LCD_CSB = 1;			  //控制器全开
	LCD_Write_Command(0x3f);  //开显示
	LCD_Write_Command(0xc0);  //设置起始地址

}

/*===============================================================*/
/*函数名称: 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);
	}
} 

⌨️ 快捷键说明

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