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

📄 lcd.c

📁 液晶屏MCG12864的接口程序,它由两片KS0108组成,包括寄存器读写等
💻 C
字号:
#include<reg52.h>
#include<absacc.h>
#include"lcd.h"
#include"zhimo.h"
 
//******写命令***********//////////////////////////////////
void KS0108_writeorder(bit RL,unsigned char order)
{
	if(RL)
	{
		while(KS0108R_status1&0x80!=0) {;}
		KS0108Set1=order;
	}
	else
	{
		while(KS0108R_status2&0x80!=0) {;}
		KS0108Set2=order;
	}
}
//////////////////////////////////////////////////////////

///////**********写数据****************/////////
void KS0108_writedata(bit RL,unsigned char din)
{
	if(RL)
	{
		while(KS0108R_status1&0x80!=0) {;}
		KS0108W_data1=din;
	}
	else
	{
		while(KS0108R_status2&0x80!=0) {;}
		KS0108W_data2=din;
	}
}
////////////////////////////////////////////////////////

////*********初始化*********////////
void KS0108_init()
{
	KS0108_writeorder(0,KS0108_row);
	KS0108_writeorder(0,KS0108_tier);
	KS0108_writeorder(1,KS0108_row);
	KS0108_writeorder(1,KS0108_tier); 
	KS0108_writeorder(1,KS0108_on);
	KS0108_writeorder(0,KS0108_on);

}
///////////////////////////////////////////

/////***********清屏***//////////////////////
void KS0108_clear(bit RL)
{
	unsigned char page,tier;
	KS0108_init();
	if(RL)
	{
		for(page=0;page<8;page++)
		{
			KS0108_writeorder(1,page|LCD_page);
			KS0108_writeorder(1,LCD_tier);
			for(tier=0;tier<64;tier++)
			{
				KS0108_writedata(1,0);
			}
		}
	}
	else
	{
		for(page=0;page<8;page++)
		{
			KS0108_writeorder(0,page|LCD_page);
			KS0108_writeorder(0,LCD_tier);
			for(tier=0;tier<64;tier++)
			{
				KS0108_writedata(0,0);
			}
		}	
	}
	
}

void LCD_init()
{  KS0108_clear(1);
   KS0108_clear(0);
   KS0108_init();
   KS0108_clear(1);
   KS0108_clear(0);
   KS0108_init();
}

//输出8x16数字子程序
void LCD_Numdislay(unsigned char page,unsigned char tier,unsigned char num,bit rev_flag)
{
	unsigned char x,i;
	unsigned char time;
	x=0;
	time=0;
    if(rev_flag)
	{  while(time!=2)
	   {
		if(tier<64)     //选择左半屏显示
		{
			KS0108_writeorder(1,(page+time)|LCD_page);  //设置起始页
			KS0108_writeorder(1,tier|LCD_tier);			//设置起始行
			for(i=0;i<8;i++)                            //从起始列开始输出列
				KS0108_writedata(1,~shu[num][i+x]);
		}
		else           //选择右半屏显示
		{
			KS0108_writeorder(0,(page+time)|LCD_page);
			KS0108_writeorder(0,(tier)|LCD_tier);
			for(i=0;i<8;i++)
				KS0108_writedata(0,~shu[num][i+x]);
		}
		x=8;		   //下次输出从字模代码数组的第8个字节开始
		time++;	
	   }
	}
	else
   	{
	   while(time!=2)
	  {
		if(tier<64)     //选择左半屏显示
		{
			KS0108_writeorder(1,(page+time)|LCD_page);  //设置起始页
			KS0108_writeorder(1,tier|LCD_tier);			//设置起始列
			for(i=0;i<8;i++)                            //从起始列开始输出列
				KS0108_writedata(1,shu[num][i+x]);
		}
		else           //选择右半屏显示
		{
			KS0108_writeorder(0,(page+time)|LCD_page);
			KS0108_writeorder(0,(tier)|LCD_tier);
			for(i=0;i<8;i++)
				KS0108_writedata(0,shu[num][i+x]);
		}
		x=8;		   //下次输出从字模代码数组的第8个字节开始
		time++;	
	 }
   } 
}

//输出8*16字母///////////////
void LCD_letterdisplay(unsigned char page,unsigned char tier,unsigned char code *letter, bit rev_flag)
{ unsigned char i;
  if(rev_flag)
  {
  if(tier<64) 
  { KS0108_writeorder(1,page|LCD_page);  
    KS0108_writeorder(1,tier|LCD_tier);			
    for(i=0;i<8;i++)                            
    { KS0108_writedata(1,~letter[i]);
    }
    KS0108_writeorder(1,(page+1)|LCD_page);  
    KS0108_writeorder(1,tier|LCD_tier);			
    for(i=0;i<8;i++)
    { KS0108_writedata(1,~letter[i+8]);
    }
  }
  if(tier>=64)
  { KS0108_writeorder(0,(page)|LCD_page);  
    KS0108_writeorder(0,(tier-64)|LCD_tier);			
    for(i=0;i<8;i++)                           
    { KS0108_writedata(0,~letter[i]);
    }
    KS0108_writeorder(0,(page+1)|LCD_page);  
    KS0108_writeorder(0,(tier-64)|LCD_tier);			
    for(i=0;i<8;i++)
    { KS0108_writedata(0,~letter[i+8]);
    }
  }
  }
  else
  { if(tier<64) 
  { KS0108_writeorder(1,page|LCD_page);  
    KS0108_writeorder(1,tier|LCD_tier);			
    for(i=0;i<8;i++)                            
    { KS0108_writedata(1,letter[i]);
    }
    KS0108_writeorder(1,(page+1)|LCD_page);  
    KS0108_writeorder(1,tier|LCD_tier);			
    for(i=0;i<8;i++)
    { KS0108_writedata(1,letter[i+8]);
    }
  }
  if(tier>=64)
  { KS0108_writeorder(0,(page)|LCD_page);  
    KS0108_writeorder(0,(tier-64)|LCD_tier);			
    for(i=0;i<8;i++)                           
    { KS0108_writedata(0,letter[i]);
    }
    KS0108_writeorder(0,(page+1)|LCD_page);  
    KS0108_writeorder(0,(tier-64)|LCD_tier);			
    for(i=0;i<8;i++)
    { KS0108_writedata(0,letter[i+8]);
    }
  }
  }
}
 
//16x16汉字显示输出
void LCD_hanzhidisplay(unsigned char page,unsigned char tier,unsigned char code *chinese,bit rev_flag)
{ unsigned char i;
  unsigned char x=0;
  unsigned char time=0;
  if(rev_flag)
  {  while(time!=2)
	{
		if(tier<64)
		{
			KS0108_writeorder(1,(page+time)|LCD_page);  //设置起始页
			KS0108_writeorder(1,tier|LCD_tier);			//设置起始行
			for(i=0;i<16;i++)                            //从起始列开始输出列
				KS0108_writedata(1,~chinese[i+x]);
		}
		else
		{
			KS0108_writeorder(0,(page+time)|LCD_page);
			KS0108_writeorder(0,(tier-64)|LCD_tier);
			for(i=0;i<16;i++)
				KS0108_writedata(0,~chinese[i+x]);
		}
		x=16;		   								//下次输出从字模代码数组的第16个字节开始
		time++;	
	}
  }
  else
  {
  if(tier<64) 
  { KS0108_writeorder(1,page|LCD_page);  
    KS0108_writeorder(1,tier|LCD_tier);			
    for(i=0;i<16;i++)                            
    { KS0108_writedata(1,chinese[i]);
    }
    KS0108_writeorder(1,(page+1)|LCD_page);  
    KS0108_writeorder(1,tier|LCD_tier);			
    for(i=0;i<16;i++)
    { KS0108_writedata(1,chinese[i+16]);
    }
  }
  if(tier>=64)
  { KS0108_writeorder(0,page|LCD_page);  
    KS0108_writeorder(0,(tier-64)|LCD_tier);			
    for(i=0;i<16;i++)                           
    { KS0108_writedata(0,chinese[i]);
    }
    KS0108_writeorder(0,(page+1)|LCD_page);  
    KS0108_writeorder(0,(tier-64)|LCD_tier);			
    for(i=0;i<16;i++)
    { KS0108_writedata(0,chinese[i+16]);
    }
  }
 }
}
  
 

⌨️ 快捷键说明

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