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

📄 lcd.c.bak

📁 基于S3C44B0X的单色LCD12864工程项目源码
💻 BAK
📖 第 1 页 / 共 2 页
字号:
0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,
0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
0x55,0xaa,0x55,0xaa,0x55,0xaa,0x55,0xaa,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,
0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe,0xfe
}; 

unsigned char ASCII90[2016];

unsigned char line0=0,column0,startline0;
unsigned char curse=0;

/*--基本函数源程序------------------------------------------------------------------------------------*/
//延时
void Lcd12864delay()
{
unsigned char i=200;
while(i--) {;}
}
//初始化LCD

void InitLCD(void) 

{ 

SelectScreen(0);
SetOnOff(0); //关显示

ClearScreen(1);//清屏
ClearScreen(2);

SelectScreen(0);
SetOnOff(1); //开显示
SelectScreen(0);
SetStartLine(0); //开始行:0
Change90();
}
/*----------------------------------------------------------------------------------------------------*/
//状态检查
void CheckState()
{
unsigned char dat;
rPCOND= 0x0;
RS_L();
RW_H();
do{

EN_H();
dat=rPDATD; 
EN_L();
dat=0x80 & dat; //仅当
}while(!(dat==0x00));
}
/*----------------------------------------------------------------------------------------------------*/
//写显示数据
//dat:显示数据
void WriteByte(unsigned char dat)
{
unsigned char dat1;
dat1=dat;
CheckState();
rPCOND= 0x5555;
RS_H(); 
RW_L();
rPDATD=dat1;
EN_H(); 
Lcd12864delay();
EN_L();
}
/*-----------------------------------------------------------------------------------------------------*/
//向LCD发送命令
//command :命令
void SendCommandToLCD(unsigned char command)
{
unsigned char command1;
command1=command;
CheckState();
rPCOND= 0x5555;
RS_L();
RW_L();
rPDATD=command1;
EN_H(); 
Lcd12864delay();
EN_L();
}
/*----------------------------------------------------------------------------------------------------*/
//设定行地址(页)--X 0-7
void SetLine(unsigned char line)
{
unsigned char line1;
line1=line;
line1=line1 & 0x07; // 0<=line<=7
line1=line1|0xb8; //1011 1xxx
SendCommandToLCD(line1);
}
//设定列地址--Y 0-63
void SetColumn(unsigned char column)
{
unsigned char column1;
column1=column;
column1=column1 &0x3f; // 0=<column<=63
column1=column1 | 0x40; //01xx xxxx
SendCommandToLCD(column1);
}
//设定显示开始行--XX

void SetStartLine(unsigned char startline)
 //0--63
{
unsigned char startline1;
startline1=startline;	
startline1=startline1 &0x3f;
startline1=startline1 | 0xc0; //1100 0000
SendCommandToLCD(startline1);
}

//开关显示
void SetOnOff(unsigned char onoff)
{
unsigned char onoff1;
onoff1=onoff;
onoff1=0x3e | onoff1; //0011 111x
SendCommandToLCD(onoff1);
}
/*---------------------------------------------------------------------------------------------------*/
//选择屏幕
//screen: 0-全屏,1-左屏,2-右屏
void SelectScreen(unsigned char screen1)
{ 
	//正有效 cs1: 1--左; cs2: 1--右
unsigned char screen2;
screen2=screen1;
if(screen2==0)
{
CS1_H();//全屏
CS2_H(); 
} 
else if(screen2==1)
{
CS1_H();//左屏
CS2_L();
}

else
{ 
CS1_L();//右屏
CS2_H();
}

}
/*---------------------------------------------------------------------------------------------------*/
//清屏
//screen: 0-全屏,1-左屏,2-右
void ClearScreen(unsigned char screen)
{ 
unsigned char screen1;
unsigned char i,j;

screen1=screen;
SelectScreen(screen1);
for(i=0;i<8;i++)
 { 
 SetLine(i);
 for(j=0;j<64;j++)
   {
   WriteByte(0x00);
   }
 }
}

unsigned char ShowChar(unsigned char lin,unsigned char column,char character)
{ 
unsigned char i;
unsigned char lin1;
unsigned char column1;
char character1;

column1=column;
lin1=lin;
character1=character;

if(column1>16) 
{
return;
}
if(column1<8) 
{
SelectScreen(1); //如果列数<8(0,1,2,3,4,5,6,7)则写在第一屏上
}
else 
{
SelectScreen(2);
}
 //否则 (8,9,10,11,12,13,14,15)写在第二屏上
column1=column1 & 0x07; //防止越界

SetLine(lin1);
SetColumn(column1<<3);

for(i=0;i<8;i++) 
{
	
WriteByte(ASCII90[character1*16+2*i]);
}
SetLine(lin1+1);
SetColumn(column1<<3);
for(i=0;i<8;i++) 
{

WriteByte(ASCII90[character1*16+i*2+1]);
}

}

unsigned char ShowString(unsigned char lin,unsigned char column,char *character)
{
//line0=lin;	
//column0=column;
while(*character)
 {
  if(*character=='\n')
  {
  	SetLine(lin+2);
  }	
  ShowChar(lin,column,*character);
  SetLine(lin+1);
  SetColumn((column++)<<3);
  character++;
 }
}
/*void Slcd_Printf(unsigned char *fmt,unsigned char lin,unsigned char column) 
{
  va_list ap;
  unsigned char string[16];

  va_start(ap,fmt);
  vsprintf(string,fmt,ap);
  ShowString(lin,column,string);
  va_end(ap);
  //Reflash_LCD();
}*/
void Change90()
{
unsigned char i,j,m,character;
unsigned char aa[8][8],bb[8][8],a[8],b[8];

for(character=32;character<128;character++)
{

for(i=0;i<8;i++)
{ 
 for(j=0;j<8;j++)
 {	
   aa[i][j]=((Ascii[character*16+i*2])>>j)&0x1;
   bb[i][j]=((Ascii[character*16+i*2+1])>>j)&0x1;
 }  	
}
for(m=0;m<8;m++)
{
a[m]=(aa[0][7-m])*1+(bb[0][7-m])*2+(aa[1][7-m])*4+(bb[1][7-m])*8
+(aa[2][7-m])*16+(bb[2][7-m])*32+(aa[3][7-m])*64+(bb[3][7-m])*128 ;

b[m]=(aa[4][7-m])*1+(bb[4][7-m])*2+(aa[5][7-m])*4+(bb[5][7-m])*8
+(aa[6][7-m])*16+(bb[6][7-m])*32+(aa[7][7-m])*64+(bb[7][7-m])*128 ;

ASCII90[2*m+character*16]=a[m];
ASCII90[2*m+1+character*16]=b[m];	
}


}

}


⌨️ 快捷键说明

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