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

📄 lcd.c

📁 128*64点阵LCD显示程序,串口,适用耀宇等LCD模块.如需电路请联系qudaohong@163.com
💻 C
字号:
/*************************************************************
FUNCTION:              LCD driver Serial Interface
AUTHOR:                
DESCRIPTION:           ST7920
E-mail:                
CREAT DATE:            2007-3-29
MODIFICATION DATE:     串口
***************************************************************/
#include  <reg51.H>
#include <INTRINS.H>
#include <Port.h>	         //端口
#include  <function_map.h>   //函数

unsigned char code Logo[]=
{
//巨,科,光,技
0xbe,0xde,0xbf,0xc6,0xb9,0xe2,0xbc,0xbc,/*巨光科技*/

};

/*unsigned char code pic[]=
{

0xFF,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x81,0x81,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x41,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x81,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x81,0x81,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x08,0x38,0x80,0x81,0xFF,0xA0,0x9C,0x00,0x20,0x25,0xA1,0x81,0x1F,
0x40,0xD2,0x0C,0x08,0x3F,0x01,0x00,0x00,0x00,0x00,0x00,0x60,0x3C,0x08,0x08,0x08,
0x88,0x88,0xC8,0xC9,0x45,0x44,0x44,0x44,0x04,0x04,0x16,0x0C,0x0C,0x08,0x00,0x00,
0x00,0x00,0x80,0x80,0x88,0x88,0xC4,0xC4,0xFA,0x42,0x63,0x00,0x00,0x48,0xC8,0x98,
0x00,0xFF,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x60,0xFF,0x21,
0x20,0x00,0x00,0x20,0x20,0x30,0xFF,0x11,0x10,0x18,0x08,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,

0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x81,0x41,0x21,0x11,0x0C,0x07,0xFF,0xC4,0x20,0x08,0x04,0x02,0xFD,0x00,0x28,
0x29,0xFF,0xA5,0xA5,0x81,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x08,0x18,0x08,0x08,
0x08,0x08,0x08,0x0F,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,0x00,0x00,0x00,
0x00,0x40,0x21,0x31,0x18,0x0C,0x06,0xC1,0x7F,0x03,0x03,0x00,0x08,0x04,0x04,0x04,
0x04,0xFF,0x02,0x02,0x02,0x02,0x02,0x02,0x10,0x30,0x30,0x18,0x08,0x0C,0xFF,0x02,
0x02,0x00,0x02,0x0A,0x92,0xD2,0x61,0x59,0xCF,0x83,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x0E,0x03,0x01,0x01,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x04,0x0C,0x1C,0x0F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x1F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x06,0x07,0x00,
0x00,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x01,0x03,0x03,0x03,0x02,0x02,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,

0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x80,0x00,
0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,
0x80,0x00,0x80,0x80,0x00,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80,
0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,
0x80,0x00,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80,
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x00,0x80,0x80,0x80,
0x00,0x00,0x00,0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0xFC,0x03,0x00,0x00,
0x00,0xF0,0x2C,0x27,0x78,0x80,0x00,0x00,0x7F,0x80,0x00,0x80,0x7F,0x00,0x00,0x00,
0x0F,0xFC,0x03,0x00,0x00,0x00,0x7F,0x80,0x00,0xC0,0x3F,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0xF7,0x88,0x88,0x88,0x81,
0x00,0x00,0x7F,0x80,0x00,0x00,0x81,0x00,0x00,0xFF,0x10,0x10,0x10,0xFF,0x00,0x00,
0xFF,0x03,0x0C,0x30,0xFF,0x00,0x00,0x7F,0x80,0x00,0x80,0x7F,0x00,0x00,0xFF,0x80,
0x80,0x80,0x80,0x00,0x00,0x7F,0x80,0x00,0x80,0x7F,0x00,0x00,0x7F,0x80,0x00,0x13,
0xF0,0x00,0x00,0x00,0x0F,0xFC,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,
0xFF,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xFF,

};*/

/***********************************
** 函数名称: LCD_Delay
** 功能描述: 延时时间=(n*9+17)*12/F
** 输 入: n
** 输 出 : 无
** 全局变量:无
** 调用模块: 无
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
void LCD_Delay(unsigned int n)
{
    while(n--);
	return;
}

/***********************************
** 函数名称: Write_Data
** 功能描述: 传送数据
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块:Delay
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
#pragma disable
void Write_Data(unsigned char idata dat) //6800
{
    unsigned char i;
    SID=1;
	_nop_();
    CLK=0;
    for(i=0;i<0x5;i++)
	{
      _nop_();
	  _nop_();
      CLK=1;
      _nop_();
	  _nop_();
      CLK=0;
    }
	_nop_();
	_nop_();
    SID=0;
	_nop_();
    CLK=1;
	_nop_();
	_nop_();
    CLK=0;
	_nop_();
	_nop_();
    SID=1;
	_nop_();
    CLK=1;
	_nop_();
	_nop_();
    CLK=0;
	_nop_();
	_nop_();
    SID=0;
	_nop_();
    CLK=1;
	_nop_();
	_nop_();
    CLK=0;
    for(i=0;i<0x4;i++)
	{
	  SID=dat&0x80;
	  dat=dat<<1;
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
	SID=0;
    for(i=0;i<0x4;i++)
	{
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
    for(i=0;i<0x4;i++)
	{
	  SID=dat&0x80;
	  dat=dat<<1;
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
	SID=0;
    for(i=0;i<0x4;i++)
	{
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
	LCD_Delay(5);
	return;
}

/***********************************
** 函数名称: Write_Instruction
** 功能描述: 传送命令
** 输 入: cmd
** 输 出 : 无
** 全局变量:无
** 调用模块: Delay
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
#pragma disable
void Write_Instruction(unsigned char idata cmd)
{
    unsigned char i;
    SID=1;
	_nop_();
    CLK=0;
    for(i=0;i<0x5;i++)
	{
      _nop_();
	  _nop_();
      CLK=1;
      _nop_();
	  _nop_();
      CLK=0;
    }
	_nop_();
	_nop_();
    SID=0;
	_nop_();
    CLK=1;
	_nop_();
	_nop_();
    CLK=0;
	_nop_();
	_nop_();
    SID=0;
	_nop_();
    CLK=1;
	_nop_();
	_nop_();
    CLK=0;
	_nop_();
	_nop_();
    SID=0;
	_nop_();
    CLK=1;
	_nop_();
	_nop_();
    CLK=0;
    for(i=0;i<0x4;i++)
	{
	  SID=cmd&0x80;
	  cmd=cmd<<1;
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
	SID=0;
    for(i=0;i<0x4;i++)
	{
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
    for(i=0;i<0x4;i++)
	{
	  SID=cmd&0x80;
	  cmd=cmd<<1;
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
	SID=0;
    for(i=0;i<0x4;i++)
	{
	  _nop_();
	  _nop_();
      CLK=1;
	  _nop_();
	  _nop_();
      CLK=0;
	  _nop_();
	  _nop_();
    }
	LCD_Delay(5);
	return;
}

/***********************************
** 函数名称: SET_CGRAM_ADDRESS
** 功能描述:	
** 输 入:  add
** 输 出 : 无
** 全局变量:无
** 调用模块: Write_Instruction
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
/*void Set_CGRAM_Address(unsigned char idata add)
{
	Write_Instruction(add|0x40);
	return;
}*/

/***********************************
** 函数名称: Set_DDRAM_Address
** 功能描述: 文本显示RAM
** 输 入:  add
** 输 出 : 无
** 全局变量:无
** 调用模块: Write_Instruction
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
void Set_DDRAM_Address(unsigned char idata add)
{
    Write_Instruction((0x80|add));
	return;
}

/***********************************
** 函数名称: Set_GDRAM_Address
** 功能描述: 绘图RAM
** 输 入:  add
** 输 出 : 无
** 全局变量:无
** 调用模块: Write_Instruction
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
/*void Set_GDRAM_Address(unsigned char idata add_page,unsigned char idata add_seg)
{
    Write_Instruction((0x80|add_page));
    Write_Instruction((0x80|add_seg));
	return;
}*/

/***********************************
** 函数名称: LCD_Initial
** 功能描述: LCD初始化
** 输 入:  无
** 输 出 : 无
** 全局变量:无
** 调用模块:CLEAR_DISPLAY_MEMORY,SET_SHIFT_DIRECTION,SET_FUNCTION_BASIC,DISPLAY_ON
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-28
******************************************/
void LCD_Initial(void)
{
    //P1 = 0x00;
	LCD_Delay(500);
    RST=0;   //复位
    LCD_Delay(1000);
    RST=1;   //复位
    LCD_Delay(100);
    LCD_Delay(2000);
	PS_LCD=0;    //选择串口(低电平)
	CS=1;
    LCD_Delay(1000);
	CLEAR_DISPLAY_MEMORY();	///清除显示
    LCD_Delay(3000);
    SET_SHIFT_DIRECTION();  //指针右移,display不变
    LCD_Delay(100);
    SET_FUNCTION_BASIC();	//基本指令集
    LCD_Delay(100);
	DISPLAY_ON();		    //开显示,关游标
    LCD_Delay(100);
}

/***********************************
** 函数名称: Display_Chinese
** 功能描述: 显示汉字
** 输 入:  fnt
** 输 出 : 无
** 全局变量:无
** 调用模块:Write_Data_1,Write_Data_2,Set_DDRAM_Address
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-10
******************************************/
/*void Display_Chinese(unsigned char fnt[])
{
    register unsigned char i,j;
    Set_DDRAM_Address(0x00);
    for(i=0;i<0x08;i+=2)
	{
		for(j=0;j<0x08;j++)
		{
		        Write_Data(fnt[i]);
		        Write_Data(fnt[i+1]);
		}
	}
    return;
} */

/***********************************
** 函数名称: Display_Character
** 功能描述: 显示汉字
** 输 入:  fnt
** 输 出 : 无
** 全局变量:无
** 调用模块:Write_Data_1,Write_Data_2,Set_DDRAM_Address
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-10
******************************************/
/*void Display_Character(unsigned char dat)
{
    register unsigned char i;
    Set_DDRAM_Address(0x00);
    for(i=0;i<0x40;i++)
	{
        Write_Data(dat++);
	}
    return;
}*/
/***********************************
** 函数名称: Disp_HZ_lcd
** 功能描述: 显示单个汉字
** 输 入:  Add,dat1,dat2   -   汉字的地址,汉字的第一个编码,汉字的第二个编码
** 输 出 : 无
** 全局变量:无
** 调用模块:Write_Data,Write_Data,Set_DDRAM_Address
** 
** 作 者: 瞿道宏
** 日 期: 2006-2-10
******************************************/
void Disp_HZ_lcd(unsigned char Add,unsigned char dat1,unsigned char dat2)
{
	LCD_Delay(3000);           //延时防错码
    Set_DDRAM_Address(Add);   //汉字的地址
    Write_Data(dat1);		  //汉字的第一个编码
	Write_Data(dat2);		  //汉字的第二个编码
}

⌨️ 快捷键说明

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