lcd12864.c

来自「lcd1286显示模块 EWB Quartus2编译 电子综合设计试验箱程序」· C语言 代码 · 共 167 行

C
167
字号
#include "LCD12864.h"

void LCDStatusLeft(void) //判断左边屏幕的状态
{
    while((LCD1_RS&0x80)|(LCD1_RS&0x10));//等待LCD完成复位并且空闲
}


void LCDStatusRight(void) //判断右边屏幕的状态
{
    while((LCD2_RS&0x80)|(LCD2_RS&0x10));//等待LCD完成复位并且空闲
}


void LCD12864WriteCmdLeft(unsigned char cmd)
{
    LCDStatusLeft();
	LCD1_ORG=cmd;
}
void LCD12864WriteCmdRight(unsigned char cmd)
{
    LCDStatusRight();
	LCD2_ORG=cmd;
}

void LCD12864WriteDataLeft(unsigned char lcddata)
{
    LCDStatusLeft();
	LCD1_WD=lcddata;
}
void LCD12864WriteDataRight(unsigned char lcddata)
{
    LCDStatusRight();
	LCD2_WD=lcddata;
}

void LCD12864Init(void)  //LCD初始化
{
    	/*
		delay(100);
		CS2=1; CS1=0;
		delay(100);
		write_cmd(DISP_OFF);
		write_cmd(PAGE);
		write_cmd(START_LINE);
		write_cmd(COL);
		write_cmd(DISP_ON);
		CS2=0; CS1=1;
		delay(100);
		write_cmd(DISP_OFF);
		write_cmd(PAGE);
		write_cmd(START_LINE);
		write_cmd(COL);
		write_cmd(DISP_ON);*/
		//左半屏幕
	    LCD12864WriteCmdLeft(DISP_OFF);
		LCD12864WriteCmdLeft(PAGE);
		LCD12864WriteCmdLeft(START_LINE);
		LCD12864WriteCmdLeft(COL);
		LCD12864WriteCmdLeft(DISP_ON);
	    //右半屏幕
		LCD12864WriteCmdRight(DISP_OFF);
		LCD12864WriteCmdRight(PAGE);
		LCD12864WriteCmdRight(START_LINE);
		LCD12864WriteCmdRight(COL);
		LCD12864WriteCmdRight(DISP_ON);

}



void LCD12864Cls(void)    //清屏函数
{
        /*
		uchar j,k;
        CS2=1;CS1=0;
        for(k=0;k<8;k++)
        {
                write_cmd(PAGE+k);
        	    write_cmd(COL);       //列地址0
	            for(j=0;j<64;j++)     //列地址自动加一
	                    write_data(0x00);
         }
	     CS2=0;CS1=1;
	     for(k=0;k<8;k++)
	     {
	            write_cmd(PAGE+k);
	            write_cmd(COL);           //列地址0
	            for(j=0;j<64;j++)         //列地址自动加一
		                write_data(0x00);
        }*/
    unsigned char j,k;
	for(k=0;k<8;k++)
	{
	     LCD12864WriteCmdLeft(PAGE+k);
         LCD12864WriteCmdLeft(COL);       //列地址0
	     for(j=0;j<64;j++)     //列地址自动加一
	         LCD12864WriteDataLeft(0x00);   
	}


	for(k=0;k<8;k++)
	{
	     LCD12864WriteCmdRight(PAGE+k);
         LCD12864WriteCmdRight(COL);       //列地址0
	     for(j=0;j<64;j++)     //列地址自动加一
	         LCD12864WriteDataRight(0x00);   
	}

}



/**************************************************************************************************
*
*显示12*16点阵的汉字函数
*函数声明:void LCDDisplayChinese(uchar page,uchar col,uchar code *str,uchar n);
*函数参数:page为页地址(0-7),col为列地址(0-127),str为数组名,n为要显示第n个汉字点阵
*函数作用:
*
**************************************************************************************************/
void LCDDisplayChinese(unsigned char page,unsigned char col,unsigned char code *str,unsigned char n)
{
      unsigned char i,j;
	  unsigned char num;
	  if(col<=52)
	  {
			for(j=0;j<2;j++)
	        {
		          LCD12864WriteCmdLeft(PAGE+page+j);LCD12864WriteCmdLeft(COL+col);
		          for(i=0;i<12;i++)
		               LCD12864WriteDataLeft(str[n*24+12*j+i]);
	        }
	  }
	  else if(col>=64)
	  {
		    col=col-64;
			for(j=0;j<2;j++)
	        {
		          LCD12864WriteCmdRight(PAGE+page+j); LCD12864WriteCmdRight(COL+col);
		          for(i=0;i<12;i++)
		                 LCD12864WriteDataRight(str[n*24+12*j+i]);
	        }
	  }

	  
	  else if(col>52&&col<64)    //处理跨屏幕的汉字书写的函数
	  {
	      num=64-col;										  
		  for(j=0;j<2;j++)
		  {
		          LCD12864WriteCmdLeft(PAGE+page+j); LCD12864WriteCmdLeft(COL+col);
		          for(i=0;i<num;i++)
		                 LCD12864WriteDataLeft(str[n*24+12*j+i]);  
		  }
		  col=0;
		  for(j=0;j<2;j++)
		  {
		          LCD12864WriteCmdRight(PAGE+page+j);LCD12864WriteCmdRight(COL+col);
		          for(i=num;i<12;i++)
		                LCD12864WriteDataRight(str[n*24+12*j+i]);  
		  }


	  }

}

⌨️ 快捷键说明

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