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

📄 sed1520.h

📁 SED1520Driver是用SED1520作为内藏控制芯片的点阵式的可编程液晶显示器,本源码给出它的一些常用的驱动,如:显示汉字,显示图形,显示标点符号等.
💻 H
字号:
/******************************************************************************
模块名称:SED1520驱动12232液晶驱动
---------------------------------------------------------------
|DB0-----P0.0 | DB4-----P0.4 | RW-------P2.2 | A0--------P2.1 |
|DB1-----P0.1 | DB5-----P0.5 | E2-------P2.4 | Vo接10k电位器调整对比度 |
|DB2-----P0.2 | DB6-----P0.6 | E1-------P2.5 |
|DB3-----P0.3 | DB7-----P0.7 | RST-------P2.3|   
---------------------------------------------------------------
******************************************************************************/
#include <reg51.h>

#define DATA P2
sbit A0  = P0^5;
sbit E1  = P3^7;
sbit E2  = P3^6;

//sbit RW = P2^2;
unsigned char code HZ[6][32] = {
{/*--  文字:  常  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x18,0x08,0x09,0xEE,0xAA,0xA8,0xAF,0xA8,0xA8,0xEC,0x0B,0x2A,0x18,0x08,0x00,
0x00,0x00,0x3E,0x02,0x02,0x02,0x02,0xFF,0x02,0x02,0x12,0x22,0x1E,0x00,0x00,0x00},

{/*--  文字:  州  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0xE0,0x00,0x00,0xFF,0x20,0xC0,0x00,0xFE,0x10,0x60,0x80,0x00,0xFF,0x00,0x00,
0x01,0x80,0x60,0x18,0x07,0x00,0x00,0x00,0x7F,0x00,0x00,0x01,0x00,0xFF,0x00,0x00},

{/*--  文字:  华  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x20,0x10,0x08,0xFC,0x03,0x02,0x10,0x10,0x7F,0x88,0x88,0x84,0x86,0xE4,0x00,0x00,
0x00,0x04,0x04,0x05,0x04,0x04,0x04,0xFF,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00},

{/*--  文字:  昌  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x00,0x7E,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x4A,0x7E,0x00,0x00,0x00,0x00,
0x00,0x00,0x7F,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x25,0x7F,0x00,0x00,0x00},

{/*--  文字:  电  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48,0x48,0x48,0x48,0xF8,0x00,0x00,0x00,
0x00,0x00,0x0F,0x04,0x04,0x04,0x04,0x3F,0x44,0x44,0x44,0x44,0x4F,0x40,0x70,0x00},

{/*--  文字:  子  --*/
/*--  宋体12;  此字体下对应的点阵为:宽x高=16x16   --*/
0x00,0x00,0x02,0x02,0x02,0x02,0x02,0xE2,0x12,0x0A,0x06,0x02,0x00,0x80,0x00,0x00,
0x01,0x01,0x01,0x01,0x01,0x41,0x81,0x7F,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00}
};
  
unsigned char code p[112] = {
/*--  调入了一幅图像:C:\Documents and Settings\许李冬\桌面\HCE.bmp  --*/
/*--  宽度x高度=56x16  --*/
0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF8,0xFC,0x00,0xFC,0x00,0xFC,
0x00,0xFC,0xFC,0xFC,0x00,0xFC,0xFC,0x00,0xFC,0x00,0x00,0x00,0x04,0xFC,0xFC,0x84,
0x80,0x84,0xFC,0xFC,0x04,0x00,0x00,0xF8,0xFC,0x0C,0x0C,0x0C,0x0C,0x1C,0x00,0x00,
0x04,0xFC,0xFC,0x8C,0x8C,0x8C,0x8C,0xDC,0x20,0x30,0x38,0x3C,0x3E,0x3F,0x3F,0x3F,
0x3F,0x3F,0x3F,0x3F,0x38,0x3B,0x38,0x3B,0x00,0x3F,0x3F,0x3F,0x00,0x3F,0x3F,0x00,
0x3F,0x00,0x00,0x00,0x20,0x3F,0x3F,0x21,0x01,0x21,0x3F,0x3F,0x20,0x00,0x00,0x1F,
0x3F,0x30,0x30,0x30,0x30,0x38,0x00,0x00,0x20,0x3F,0x3F,0x31,0x31,0x31,0x31,0x3B
};

#define LCD_DISPLAYON 0xaf      //af 开显示,
#define LCD_DISPLAYOFF 0xae     //ae 关显示,
#define LCD_DRIVERON 0xa5       //a5 静态显示驱动
#define LCD_DRIVEROFF 0xa4      //a4正常驱动
#define LCD_DUTY16 0xa8         //占空比1/16
#define LCD_DUTY32 0xa9         //占空比1/32

#define LCD_END 0xee            /*关闭“读-修改-写”模式,并把列地址指针
                                  恢复到打开“读-修改-写”模式前的位置。*/

#define LCD_RESET 0xe2          /*初始化。① 设置显示初始行为第一行;
                                          ②页地址设置为第三页。*/

#define LCD_RWMODE 0xe0         /*“读-修改-写”模式 。执行该指令以后,
                                   每执行一次写数据,指令列地址自动加1;
                                   但执行读数据指令时列地址不会改变。
                                   这个状态一直持续到执行“END”指令。
                                   注意:在“读-修改-写”模式下,
                                   除列地址设置指令之外,其他指令照常执行。*/

#define LCD_STARTLINE0 0xc0     //设置显示起始行 可以加0-31
#define LCD_PAGE0 0xb8          //页地址设置     可以加0-3
#define LCD_COLUMNADDR0 0x00    //列地址设置     可以加0-60

#define LCD_ON()            LCD_Command(LCD_DISPLAYON)
#define LCD_OFF()           LCD_Command(LCD_DISPLAYOFF)
#define LCD_StaticON()      LCD_Command(LCD_DRIVERON)
#define LCD_StaticOFF()     LCD_Command(LCD_DRIVEROFF)
#define LCD_Select16()      LCD_Command(LCD_DUTY16)
#define LCD_Select32()      LCD_Command(LCD_DUTY32)
#define LCD_StartRW()       LCD_Command(LCD_RWMODE)
#define LCD_EndRW()         LCD_Command(LCD_END)
#define LCD_Reset()         LCD_Command(LCD_RESET)
#define LCD_SetStartLine(i) LCD_Command(LCD_STARTLINE0|i)
#define LCD_SetPage(i)      LCD_Command(LCD_PAGE0|i)
#define LCD_SetColumn(i)    LCD_Command(LCD_COLUMNADDR0|i)
 
/******************************************************************************************
* 函数名称    :LCD_Command
* 功能描述    :写命令
******************************************************************************************/
void LCD_Command(unsigned char nCommand)
{                                 
	A0=0;
   	E1=1; 
   	E2=1; 
   	DATA=nCommand;
   	E1=0;
   	E2=0;
}
/******************************************************************************************
* 函数名称    :LCD_SetRam
* 功能描述    :送显示数据ndata,setMS为0主,1从
******************************************************************************************/
void LCD_SetRam(bit setMS,unsigned char ndata)
{
	A0=1; 
    E1=!setMS;
    E2=setMS;  
    
    DATA=ndata;
    E1=0;
    E2=0;
}
/******************************************************************************************
* 函数名称    :LCD_Init
* 功能描述    :液晶初始化
******************************************************************************************/ 
void LCD_Init()
{ 
	LCD_OFF();               //关闭显示
	LCD_Command(LCD_RESET);  //复位
   	LCD_Command(0xa0);       //列与段驱动反方向
   	LCD_Command(LCD_DUTY32); //1/32
   	LCD_Command(0xa4);       //关闭静态显示    打开正常驱动
   	LCD_EndRW();             //关闭自动列加1
   	LCD_SetStartLine(0);     //设置起始行
   	LCD_SetColumn(0);        //起始列
   	LCD_SetPage(0);          //起始页
   	LCD_ON();                //开显示
}

/******************************************************************************************
* 函数名称    :clrscr
* 功能描述    :清屏
******************************************************************************************/   
void LCD_Clrscr(void)
{
	unsigned char i;
  	unsigned char page;
  	for( page = 0; page < 4; page++ )
   	{
    	LCD_SetPage(page);
     	for( i = 0; i < 61; i++ )
       	{
        	LCD_SetColumn(i);
        	LCD_SetRam(0,0X00);
        	LCD_SetRam(1,0X00);
        } 
    }
}

void ClearPageTT(void)
{
	unsigned char i;
  	unsigned char page;
  	for( page = 2; page < 4; page++ )
   	{
    	LCD_SetPage(page);
     	for( i = 0; i < 61; i++ )
       	{
        	LCD_SetColumn(i);
        	LCD_SetRam(0,0X00);
        	LCD_SetRam(1,0X00);
        } 
    }
}
/******************************************************************************************
* 函数名称    :drawword
* 功能描述    ://layer 值为0,2;wenzi 码表中的几个字
******************************************************************************************/ 
void LCD_DispHZ(unsigned char *Dbuf,unsigned char row,unsigned char page)
{
	unsigned char column,x;//layer 值为0,2;wenzi 码表中的几个字
	bit masl; 
   	for( x = 0; x < 16; x++ )
   	{
     	column = row + x;
     	if( column > 60 )
     	{
     		masl = 1;
        	column -= 61;
     	}
     	else 
			masl = 0;

     	LCD_SetStartLine(0);//设置起始行
     	LCD_SetColumn(column);//设置起始列
     	LCD_SetPage(page);
     	LCD_SetRam(masl,Dbuf[x]);

     	LCD_SetStartLine(0);//设置起始行
     	LCD_SetColumn(column);//设置起始列
     	LCD_SetPage(page+1);
     	LCD_SetRam(masl,Dbuf[x+16]);
	}
}

void LCD_DispPicture()
{
	unsigned char row = 34,masl = 0,column = 0;
	unsigned char x;
	for( x = 0; x < 56; x++ )
    {
    	column = row + x;
	    if( column > 60 )
	    {
     		masl = 1;
			column -= 61;
	    }
	    else 
			masl = 0;
        LCD_SetStartLine(0);//设置起始行
	    LCD_SetColumn(column);//设置起始列
	    LCD_SetPage(2);
	    LCD_SetRam(masl,p[x]);

	    LCD_SetStartLine(0);//设置起始行
	    LCD_SetColumn(column);//设置起始列
	    LCD_SetPage(3);
	    LCD_SetRam(masl,p[x+56]);
	}
}

void LCD_DispPD(unsigned char *Dbuf,unsigned char row,unsigned char page)
{
	unsigned char column,x;//layer 值为0,2;wenzi 码表中的几个字
	bit masl; 
   	for( x = 0; x < 8; x++ )
   	{
     	column = row + x;
     	if( column > 60 )
     	{
     		masl = 1;
        	column -= 61;
     	}
     	else 
			masl = 0;

     	LCD_SetStartLine(0);//设置起始行
     	LCD_SetColumn(column);//设置起始列
     	LCD_SetPage(page);
     	LCD_SetRam(masl,Dbuf[x]);

     	LCD_SetStartLine(0);//设置起始行
     	LCD_SetColumn(column);//设置起始列
     	LCD_SetPage(page+1);
     	LCD_SetRam(masl,Dbuf[x+8]);
	}
}

/******************************************************************************************
* 函数名称    :
* 功能描述    :
******************************************************************************************/
void LCD_Ready()
{      
	LCD_Init();  //液晶初始化
	LCD_Clrscr();

	LCD_DispHZ(HZ[0],13,0);
	LCD_DispHZ(HZ[1],29,0);
	LCD_DispHZ(HZ[2],45,0);
	LCD_DispHZ(HZ[3],61,0);
	LCD_DispHZ(HZ[4],77,0);
	LCD_DispHZ(HZ[5],93,0);
	LCD_DispPicture();
}

⌨️ 快捷键说明

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