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

📄 lcddrive.c

📁 采用STC89C51RC单片机
💻 C
📖 第 1 页 / 共 4 页
字号:
    for(i=0; i<m; i++)
        for(j=0; j<109; j++)
            _nop_();
}

/*******************************************************************************************************
** Function name: Lcd_Command
** Descriptions:  写命令函数               
** Input: Com 命令
** Output: 无
********************************************************************************************************/
void Lcd_Command(unsigned char cmdcode)
{ 
   		
   
    DIS_A0  = 1;                // 选择指令写通道

    LCD_DataPort = cmdcode;       // 指令码送数据口

    DIS_CS = 0;                // 选择模块
    DIS_WR = 0;                // 写信号有效 
  	DIS_WR = 1;                 // 写信号无效 
    DIS_CS = 1;                // 封锁模块
 	Delayms(1);              // 延迟,LM2068E、LM1095E使用
}

/*******************************************************************************************************
** Function name: Lcd_DataWrite
** Descriptions:  写数据函数               
** Input: DATA 数据
** Output: 无
********************************************************************************************************/
void  Lcd_DataWrite(int8 Data)
{
	
    DIS_A0  = 0;                // 选择数据写通道 

    LCD_DataPort = Data;         // 数据送数据口
	 
    DIS_CS = 0;                // 选择模块 
    DIS_WR = 0;                // 写信号有效
    DIS_WR = 1;                // 写信号无效 
    DIS_CS = 1;                // 封锁模块	
}


//------数据读取子程序------------------
uint8 LCD_RdData()
{
    uint8 DData;
    DIS_A0= 1;                  // 选择数据读通道
    LCD_DataPort=0xff;
    DIS_CS = 0;                // 选通模块
    DIS_RD = 0;                // 读信号有效
    DData=LCD_DataPort;           // 取数据
    DIS_RD = 1;                // 读信号无效
    DIS_CS = 1;                // 封锁模块
    return(DData);          // 返回读取的数据
}



/*******************************************************************************************************
** Function name: LCD_Initial
** Descriptions:  显示图片              
********************************************************************************************************/
void  LCD_Initial(void)
{ 	

	//-------系统设置指令-----------------------
    Lcd_Command(0x40);           //System Set (带8个参数)
    Lcd_DataWrite(0x30);          // IV=1,W/S=0,M2=0,M0=0
    Lcd_DataWrite(0x87);          // WF=1 FX=8
    Lcd_DataWrite(0x07);          // FY=8
    Lcd_DataWrite(0x28);          // C/R=40个字符/行  LM2068
//    SdData(0x18);        // C/R=24个字符/行  LM1095
    Lcd_DataWrite(0x47);          // TC/R  LM2068/LM1095通用
    Lcd_DataWrite(0xef);          // L/F=240 LM2068
//    SdData(0x7f);        // L/F=128 LM1095
    Lcd_DataWrite(0x30);          // AP=0030H
    Lcd_DataWrite(0x00);          //

//------显示区域设置指令---------------------
    Lcd_Command(0x44);           //Scroll (带10个参数)
    Lcd_DataWrite(0x00);          // SAD1= 0000H
    Lcd_DataWrite(0x00);          //
    Lcd_DataWrite(0xef);          // SL1=240行   LM2068
//    SdData(0x7f);        // SL1=128行   LM1095
    Lcd_DataWrite(0x00);          // SAD2= 1000H
    Lcd_DataWrite(0x10);          //
    Lcd_DataWrite(0xef);          // SL2=240行   LM2068
//    SdData(0x7f);        // SL2=128行   LM1095
    Lcd_DataWrite(0x00);          // SAD3= 6000H
    Lcd_DataWrite(0x60);          //
    Lcd_DataWrite(0x00);          // SAD4= 0000H
    Lcd_DataWrite(0x00);          //

//------显示功能设置----------------------------
    Lcd_Command(0x5a);           // HDOT SCR (带1个参数)
    Lcd_DataWrite(0x00);          //
    Lcd_Command(0x5b);           // OVLAY (带1个参数)
    Lcd_DataWrite(0x01);          // OV=0,DM1=0,DM0=0,MX=01(XOR)
    Lcd_Command(0x5d);           //CSRFORM (带2个参数)
    Lcd_DataWrite(0x07);          // CX=8
    Lcd_DataWrite(0x17);          // CM=1, CY=8

//------显示开关指令-----------------------------
    Lcd_Command(0x59);           // Display ON/OFF(带1个参数)
    Lcd_DataWrite(0x14);          // 第1、2显示区显示开	
}

//-----清屏子程序--------------------------------
void LCD_ClearScreen()
{
	uint16 i;
	Lcd_Command(0x46);             // 设置光标地址
  	Lcd_DataWrite(0x00);
  	Lcd_DataWrite(0x00);
  	Lcd_Command(0x4c);             // 设置光标移动方向
  	Lcd_Command(0x42);             // 写数据指令
    for (i=0;i<0x7fff;i++) // 循环写32K单元
    {
    	Lcd_DataWrite(0x00);          // 写数据0
    }
}

//-------字符写入子程序----------------------
void PrintASCII(uint16 x,y,uint8 *pstr)
// 坐标(x,y),x为水平方向字符位;y为垂直方向字符行;*pstr ASCII字符代码数组名
{
  uint16 addr;              // 第一显示区域为文本属性
  addr=y*0x30+x;          // 计算显示RAM地址
  Lcd_Command(0x46);            // 设置字符显示首地址
  Lcd_DataWrite(addr);
  Lcd_DataWrite(addr>>8);
  Lcd_Command(0x4c);            // 地址水平加1设置
  Lcd_Command(0x42);            // 写数据指令
  while(*pstr>0)
    {
    Lcd_DataWrite(*pstr++);      // 写入字符代码
    }       
}

void PrintGB(uint8 x,y,uint8 *pstr)
// 坐标(x,y),x为水平方向字符位;y为垂直方向像素行;*pstr 中文字符代码数组名
{
 uint16 addr,pter;
 uint8 i,j;               // 第二显示区域为图形属性
 addr=y*0x30+x+0x1000;    // 计算显示RAM地址
 while(*pstr>0)
   {
   pter = *pstr++;
   pter= (pter-1)*32;     // 计算中文字库字符首地址
    for (i=0;i<2;i++)
      {
      Lcd_Command(0x46);        // 设置中文字符显示首地址
      Lcd_DataWrite(addr);
      Lcd_DataWrite(addr>>8);
      Lcd_Command(0x4f);        // 设置地址垂直加1行
      Lcd_Command(0x42);        // 写数据指令
      for (j=0;j<16;j++)
        {
        Lcd_DataWrite(CCTAB[pter+j+16*i]); // 写入字模数据
        }
      addr=addr+1;        // 下一个地址修正?
      }
   }
}

//-----图画写入子程序-----------------------------------
void Lcd_ShowPics(uint16 x,y,width,high,uint8 bmp[])
// 坐标(x,y),x为水平方向像素列;y为垂直方向像素行
//width:图形水平像素点数;high:图形垂直像素点数;bmp[]:图形数组名
{
 uint8 i,j;
 uint16 addr,k=0;           // 第二显示区域为图形属性
 addr=y*0x30+x+0x1000;    // 计算显示RAM地址
 for(i=0;i<high;i++)      // 写入行循环量
    {
    Lcd_Command(0x46);          // 设置图形显示首地址
    Lcd_DataWrite(addr);
    Lcd_DataWrite(addr>>8);
    Lcd_Command(0x4c);          // 设置地址水平加1
    Lcd_Command(0x42);          // 写数据指令
    for(j=0;j<width;j++)  // 写入数据个数/行
        {
        Lcd_DataWrite(bmp[k]);   // 写入图形数据
        k=k+1;
        }
     addr=addr+0x30;      // 地址修正
     }
}

//--------画点子程序----------------------------------------
void Draw_Dot(uint16 x, y)
//坐标X为屏幕上水平位置,以像素点为单位;Y为垂直位置,以像素行为单位
{
    uint8 dotdata,m;
    uint16 addr;              // 第二显示区域为图形属性
    addr=y*0x30+x/8+0x1000; // 计算显示RAM地址
    m=x%8;
    dotdata=0x80;
    dotdata=dotdata>>m;     // 计算显示点数据
    Lcd_Command(0x46);            // 设置点显示地址
    Lcd_DataWrite(addr);
    Lcd_DataWrite(addr>>8);

    Lcd_Command(0x43);            // 读取数据指令
    m=LCD_RdData()|dotdata;     // 当前显示数据“或”点数据
    
	Lcd_Command(0x46);            // 重新设置点显示地址
    Lcd_DataWrite(addr);
    Lcd_DataWrite(addr>>8);
    Lcd_Command(0x42);            // 写数据指令
    Lcd_DataWrite(m);              // 写入绘点数据
}

⌨️ 快捷键说明

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