📄 122x32点阵驱动.c
字号:
/***************************************************************
功能:实现液晶显示LCD 122*32点阵驱动器为0713
***************************************************************/
/*
#define SOFT_RESET 0xE2
#define DISP_OFF 0xAE
#define START_LINE 0xC0
#define FIRST_PAGE 0xE2
#define START_COL 0x00
#define RIGHT_ADC 0xA0
#define NORMAL_DRV 0xA4
#define DUTY_32_1 0xA9
#define RCW_OFF 0xEE
#define DISP_ON 0xAF
*/
/*------------------------------------------------------------------------------
---
CPU 端口定义
--------------------------------------------------------------------------------
-*/
sfr LCD_PORT = 0x80;
sbit LCD_DI = 0xb3;
sbit LCD_ENA2 = 0xb4;
sbit LCD_ENA1 = 0xb5;
/*------------------------------------------------------------------------------
---
西文字库点阵
--------------------------------------------------------------------------------
-*/
unsigned char code Large_DianZen[]={
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 , //null
0,0,0,0,0,0,0xF8,0x33,0,0x30,0,0,0,0,0,0, //!
/*0x00,0x00,0x80,0x00,0x80,0x00,0xE0,0x1F,0x80,0x20,0x80,0x20,0x00,0x00,0x00,0x0
0, //t
0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,
//e
0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,
//l
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
//:
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,
//8
0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,
//5
0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,
//5
0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00,
//2
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,
//8
0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00,
//6
0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00,
//2
0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00,
//4
*///;-- Tel:13588316485 -- ** 宋体, 12 **
//;-- Tel:13588316485 -- ** 宋体, 12
**
//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=120x16, 调整后为:
120x16
0x18,0x00,0x08,0x00,0x08,0x20,0xF8,0x3F,0x08,0x20,0x08,0x00,0x18,0x00,0x00,0x00,
0x00,0x00,0x00,0x1F,0x80,0x22,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x13,0x00,0x00,
0x00,0x00,0x08,0x20,0x08,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00,
0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,
0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00,
0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00,
0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00,
0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00,
0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00,
0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00,
};
/*------------------------------------------------------------------------------
---
汉字字库点阵
--------------------------------------------------------------------------------
-*/
unsigned char code HanZi[]={
//** 宋体, 12 **
//; 当前所选字体下一个汉字对应的点阵为: 宽度x高度=432x16, 调整后为: 432x16
0x14,0x20,0x24,0x10,0x44,0x4C,0x84,0x43,0x64,0x43,0x1C,0x2C,0x20,0x20,0x18,0x10,
0x0F,0x0C,0xE8,0x03,0x08,0x06,0x08,0x18,0x28,0x30,0x18,0x60,0x08,0x20,0x00,0x00,
0x40,0x40,0x41,0x20,0xCE,0x1F,0x04,0x20,0x00,0x40,0xFC,0x47,0x04,0x42,0x02,0x41,
0x02,0x40,0xFC,0x5F,0x04,0x40,0x04,0x42,0x04,0x44,0xFC,0x43,0x00,0x40,0x00,0x00,
0x40,0x00,0x20,0x00,0xF0,0x7F,0x1C,0x00,0x07,0x40,0xF2,0x41,0x94,0x22,0x94,0x14,
0x94,0x0C,0xFF,0x13,0x94,0x10,0x94,0x30,0x94,0x20,0xF4,0x61,0x04,0x20,0x00,0x00,
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,
0xFE,0xFF,0x22,0x02,0x22,0x02,0x22,0x42,0x22,0x82,0xFE,0x7F,0x00,0x00,0x00,0x00,
0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,
0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,
0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,
0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00,
0x40,0x00,0x42,0x40,0x42,0x20,0x42,0x10,0x42,0x0C,0xFE,0x03,0x42,0x00,0x42,0x00,
0x42,0x00,0x42,0x00,0xFE,0x7F,0x42,0x00,0x42,0x00,0x42,0x00,0x42,0x00,0x00,0x00,
0x00,0x40,0x10,0x20,0x3E,0x10,0x10,0x88,0x10,0x87,0xF0,0x41,0x9F,0x46,0x90,0x28,
0x90,0x10,0x92,0x28,0x94,0x27,0x1C,0x40,0x10,0xC0,0x10,0x40,0x10,0x00,0x00,0x00,
0x10,0x04,0x10,0x03,0xD0,0x00,0xFF,0x7F,0x50,0x00,0x90,0x11,0x00,0x0E,0xFE,0x41,
0x62,0x20,0xA2,0x11,0x22,0x0A,0x21,0x0E,0xA1,0x31,0x61,0x60,0x00,0x20,0x00,0x00,
0x08,0x02,0x08,0x01,0x89,0x00,0xCE,0xFF,0xA8,0x00,0x18,0x83,0x00,0x40,0xFE,0x30,
0x82,0x0F,0x82,0x00,0x82,0x00,0x82,0x7F,0xFE,0x80,0x00,0x80,0x00,0xF0,0x00,0x00,
0x80,0x00,0x40,0x00,0xF0,0x7F,0x2C,0x00,0x43,0x10,0x20,0x0C,0x98,0x03,0x0F,0x21,
0x0A,0x40,0xE8,0x3F,0x08,0x00,0x88,0x00,0x28,0x03,0x1C,0x1C,0x08,0x08,0x00,0x00,
0x00,0x04,0x00,0x04,0x00,0x04,0xFE,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0x92,0xFF,
0x92,0x04,0x92,0x04,0x92,0x04,0x92,0x04,0xFE,0x04,0x00,0x04,0x00,0x04,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0xFE,0x3F,0x42,0x10,0x42,0x10,0x42,0x10,0x42,0x10,
0x42,0x10,0x42,0x10,0x42,0x10,0xFE,0x3F,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x40,0x00,0x30,0xF8,0x0F,0x48,0x00,0x48,0x08,0x48,0x50,0xC8,0x4F,0x08,0x20,
0xFF,0x10,0x08,0x0B,0x09,0x0C,0x0A,0x12,0xC8,0x21,0x88,0x40,0x08,0xF0,0x00,0x00,
0x00,0x00,0x10,0x00,0x10,0x40,0x12,0x20,0x14,0x10,0x1C,0x08,0x10,0x06,0xF0,0x01,
0x9F,0x00,0x10,0x11,0x10,0x26,0x10,0x40,0x10,0x20,0xF8,0x1F,0x10,0x00,0x00,0x00,
0x00,0x08,0x00,0x08,0xF8,0x0B,0x28,0x09,0x29,0x09,0x2E,0x09,0x2A,0x09,0xF8,0xFF,
0x28,0x09,0x2C,0x09,0x2B,0x09,0x2A,0x09,0xF8,0x0B,0x00,0x08,0x00,0x08,0x00,0x00,
0x00,0x80,0x00,0x40,0x00,0x30,0xFE,0x0F,0x10,0x01,0x10,0x01,0x10,0x01,0x10,0x01,
0x10,0x01,0x1F,0x01,0x10,0x01,0x10,0xFF,0x10,0x00,0x18,0x00,0x10,0x00,0x00,0x00,
0x08,0x04,0x08,0x03,0xC8,0x00,0xFF,0xFF,0x48,0x00,0x88,0x41,0x08,0x30,0x00,0x0C,
0xFE,0x03,0x02,0x00,0x02,0x00,0x02,0x00,0xFE,0x3F,0x00,0x40,0x00,0x78,0x00,0x00,
0x04,0x00,0x04,0xFF,0x04,0x01,0x04,0x01,0x74,0x3D,0x54,0x25,0x55,0x25,0x56,0x25,
0x54,0x25,0x54,0x25,0x74,0x3D,0x04,0x41,0x04,0x81,0x04,0x7F,0x04,0x00,0x00,0x00,
0x00,0x02,0x24,0x02,0x24,0x02,0x24,0x02,0x24,0x02,0x24,0x42,0x24,0x82,0xFE,0x7F,
0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,0x22,0x02,0x20,0x02,0x00,0x02,0x00,0x00,
0x00,0x80,0x00,0x70,0xFE,0x0F,0x22,0x41,0x22,0x81,0xFE,0x7F,0x44,0x04,0x58,0x04,
0x40,0x04,0xFF,0xFF,0x40,0x04,0x50,0x04,0x4C,0x04,0x48,0x04,0x00,0x04,0x00,0x00,
0x00,0x80,0x00,0x70,0xFE,0x0F,0x22,0x41,0x22,0x81,0xFE,0x7F,0x44,0x04,0x58,0x04,
0x40,0x04,0xFF,0xFF,0x40,0x04,0x50,0x04,0x4C,0x04,0x48,0x04,0x00,0x04,0x00,0x00,
0x00,0x20,0x00,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0xFE,0x3F,
0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x02,0x20,0x00,0x20,0x00,0x00,
0x80,0x00,0x40,0x00,0x20,0x00,0xF8,0xFF,0x07,0x00,0x22,0x00,0x18,0x00,0x0C,0x00,
0xFB,0xFF,0x48,0x04,0x48,0x04,0x48,0x04,0x68,0x04,0x48,0x06,0x08,0x04,0x00,0x00,
0x00,0x40,0x10,0x40,0x2C,0x48,0x24,0x49,0xA4,0x49,0x64,0x49,0x25,0x49,0x26,0x7F,
0x24,0x49,0x24,0x49,0xA4,0x49,0x24,0x4B,0x34,0x48,0x2C,0x40,0x04,0x40,0x00,0x00,
0x00,0x00,0x42,0x00,0x22,0x80,0x12,0x80,0x8F,0x5F,0xA2,0x40,0xC2,0x20,0xBE,0x10,
0x80,0x0E,0xBE,0x10,0x92,0x20,0x92,0x6F,0x12,0xC0,0x3E,0x40,0x00,0x00,0x00,0x00,
};
unsigned char code LCD_Show_Tab[]={
0x00,0x00,0x00,0x00,0x90,0x00,0x90,0x01,0x90,0x02,0x90,0x03,0x00,0x00,0x00,0x00,
0x00,0x90,0x04,0x90,0x05,0x90,0x06,0x90,0x07,0x90,0x08,0x90,0x09,0x01,0x00,0x000
x00,0x00,0x00,0x00,0x90,0x0a,0x90,0x0b,0x90,0x0c,0x90,0x0d,0x00,0x00,0x00,0x00
0x90,0x0e,0x90,0x0f,0x90,0x10,0x90,0x11,0x90,0x12,0x90,0x13,0x90,0x14,0x01,0x000
x00,0x90,0x15,0x90,0x16,0x90,0x17,0x90,0x18,0x90,0x19,0x90,0x1a,0x01,0x00,0x00
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,0x00,
//tel:85528624
};
/*-----------------------------------------------
LCD接收命令子程序:F为主/从选择0主模块被选中
------------------------------------------------*/
void LCD_Write_Set( unsigned char Com,bit F )
{
unsigned char i;
LCD_PORT = Com;
LCD_DI = 0;
if ( F )
{
LCD_ENA2 = 1;
LCD_ENA2 = 0;
}
else
{
LCD_ENA1 = 1;
LCD_ENA1 = 0;
}
}
/*-----------------------------------------------
LCD接收数据子程序:F为主/从选择0主模块被选中
------------------------------------------------*/
void LCD_Write_Data( unsigned char Com,bit F )
{
unsigned char i;
LCD_PORT = Com;
LCD_DI = 1;
if ( F )
{
LCD_ENA2 = 1;
LCD_ENA2 = 0;
}
else
{
LCD_ENA1 = 1;
LCD_ENA1 = 0;
}
}
/*--------------------------------------------------------------
//设置xPos,yPos(x,y行列坐标)
------------------------------------------------------------*/
void Set_xyPos_LCD(unsigned char xPos,unsigned char yPos) //112*32 0713
xPos(0---112) yPos(0---3)
{
unsigned char i;
if ( yPos < 2 )
i = 0xBA;
else
i = 0xB6;
if ( xPos > 60 )
{
LCD_Write_Set(yPos + i,1); //Page_LCD[i]
i=0 first page i=7 seventh page
// LCD_Write_Set(((xPos - 57)>>4)&0x0F|0x10,1);
//set col address msb
LCD_Write_Set(xPos - 61,1);
//set col address lsb
}
else
{
LCD_Write_Set(yPos + i,0); //Page_LCD[i]
i=0 first page i=7 seventh page
// LCD_Write_Set((xPos>>4)&0x0F|0x10,0); //set col
address msb
LCD_Write_Set(xPos,0);
//set col address lsb
}
}
/*--------------------------------------------------------------
//清除一行子程序
------------------------------------------------------------*/
void Clear_H_LCD(unsigned char H)
{
unsigned char i,j;
Set_xyPos_LCD(0, H << 1 );
//set col address lsb
for( i = 0;i < 2;i++ )
{
for( j = 0;j < 61;j++ )
LCD_Write_Data( 0x55,0 );
Set_xyPos_LCD(0, (H << 1) + 1); //set col
address lsb
}
Set_xyPos_LCD(61, H << 1 );
//set col address lsb
for( i = 0;i < 2;i++ )
{
for( j = 0;j < 61;j++ )
LCD_Write_Data( 0x55,1 );
Set_xyPos_LCD(61, (H << 1) + 1); //set
coladdress lsb
}
}
/*------------------------------------------------------------------------------
---
//延时1MS子程序
--------------------------------------------------------------------------------
-*/
void Delay_xMs(unsigned int xMs)
{
unsigned int i,j;
for(i=0;i<xMs;i++)
{
for(j=0;j<500;j++)
;
}
}
/*------------------------------------------------------------------------------
---
//在X,Y处显示一个16*8的西文sData (0---d)
--------------------------------------------------------------------------------
-*/
void Show_XW_LCD(unsigned char xPos,unsigned char yPos,unsigned char sData)
{
bit F;
unsigned int nTmp;
unsigned char j,x,y;
x = xPos;
y = yPos;
nTmp = sData * 16;
for ( j = 0;j < 16;j+=2 )
{
Set_xyPos_LCD(x,y);
F = 0;
if ( x > 60 )
F = 1;
LCD_Write_Data(Large_DianZen[nTmp + j],F);
x++;
}
y++;
x = xPos;
for ( j = 1;j < 16;j+=2 )
{
Set_xyPos_LCD(x,y);
F = 0;
if ( x > 60 )
F = 1;
LCD_Write_Data(Large_DianZen[nTmp + j],F);
x++;
}
}
/*------------------------------------------------------------------------------
---
//在X,Y处显示一个16*16的汉字
--------------------------------------------------------------------------------
-*/
void Show_HZ_LCD ( unsigned char xPos, unsigned char yPos,unsigned char sData )
{
bit F;
unsigned int nTmp;
unsigned char j,x,y;
x = xPos;
y = yPos;
nTmp = sData * 32;
for ( j = 0;j < 32;j+=2 )
{
Set_xyPos_LCD(x,y);
F = 0;
if ( x > 60 )
F = 1;
LCD_Write_Data(HanZi[nTmp + j],F);
x++;
}
y++;
x = xPos;
for ( j = 1;j < 32;j+=2 )
{
Set_xyPos_LCD(x,y);
F = 0;
if ( x > 60 )
F = 1;
LCD_Write_Data(HanZi[nTmp + j],F);
x++;
}
}
/*------------------------------------------------------------------------------
-------
预先定义内容表为LCD_Show_Tab[]
汉字表为HanZi[]
大西文表为Large_DianZen[]
与90H的分界碰到90H则是汉字,否则是西文
--------------------------------------------------------------------------------
------*/
void Print_LCD ( unsigned char xPos, unsigned char yPos,int nSentenceID )
{
unsigned char i,j=0;
unsigned char Temp;
//存放要显示的数据
for(i=0;i<16;i++)
{
Temp=LCD_Show_Tab[nSentenceID*16+i]; //128 16个西文
if(Temp==0x90)
//汉字
{
i++;
Temp=LCD_Show_Tab[nSentenceID*16+i];
Show_HZ_LCD(xPos+j,yPos,Temp);
//write 1个汉字子程序
j+=16;
}
else
//西文
{
Temp= LCD_Show_Tab[nSentenceID*16+i];
Show_XW_LCD(xPos+j,yPos,Temp);
//write 1个西文子程序
j+=8;
}
}
}
/*-----------------------------------------------
LCD初始化子程序:
------------------------------------------------*/
void LCD_Init( void )
{
LCD_ENA1 = 0;
LCD_ENA2 = 0;
// LCD_Write_Set( 0x00,0 );
LCD_Write_Set( 0xE2,0 );
// LCD_Write_Set( 0xAE,0 );
LCD_Write_Set( 0xC0,0 );
LCD_Write_Set( 0xB8,0 );
LCD_Write_Set( 0xA0,0 );
LCD_Write_Set( 0xA4,0 );
LCD_Write_Set( 0xA9,0 );
LCD_Write_Set( 0xEE,0 );
LCD_Write_Set( 0xE2,1);
// LCD_Write_Set( 0xAE,1 );
LCD_Write_Set( 0xC0,1 );
LCD_Write_Set( 0xB8,1 );
LCD_Write_Set( 0xA0,1 );
LCD_Write_Set( 0xA4,1 );
LCD_Write_Set( 0xA9,1 );
LCD_Write_Set( 0xEE,1 );
LCD_Write_Set( 0xAF,0 );
LCD_Write_Set( 0xAF,1 );
Delay_xMs( 10 );
}
/*----------------------------------------------
主程序
功------------------------------------------------*/
void main()
{
unsigned char i;
LCD_Init();
Clear_H_LCD( 0 ); //清除第一行
Clear_H_LCD( 1 ); //清除第二行
while(1)
{
for( i = 0;i < 5 ;i+=2 )
{
Print_LCD ( 0,0,i );//在第一行上显示汉字
Print_LCD ( 0,2,i+1 );//在第二行上显示汉字
Delay_xMs(1000); //延时一段时间
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -