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

📄 st7565 12864.c

📁 ST7565P LCM Example Code
💻 C
字号:
128*64(ST7565P控制器)程序参考 
//ST7565P控制器(128*64)
//这些参考程序是在项目中提取出来的,希望能够给大家提供一个参考
//有并行和串行两种接法,我用的是串行输出

//定义LCD显示的全局变量 
#define CS (1<<2) // Out
#define A0 (1<<3) // Out
#define SI (1<<4) // Out
#define SCL (1<<5) // Out
#define RST (1<<6) // Out
#define LCD_LED (1<<7)// Out

#define LCD_DATA 1
#define LCD_COMMAND 0

BYTE gContrast=40; // LCD 对比度0-63
//--------------------------------------------------------------------------
//液晶屏初始化 
//--------------------------------------------------------------------------
void LCDInit(void)
{
CLR(rPDATC,RST); // RST=0;
DelayMS(50);
SET(rPDATC,RST); // RST=1;
DelayMS(50);
LCDWriteByte(0xa2,LCD_COMMAND); //lcd bias select 1/9 BIAS
LCDWriteByte(0xa1,LCD_COMMAND); //ADC select,REVERSE 127-->0(a0,a1)
LCDWriteByte(0xc0,LCD_COMMAND); //com select,NORMAL 0-->63(c8,c0)
LCDWriteByte(0x26,LCD_COMMAND); //RESISTOR RATIO
LCDWriteByte(0x81,LCD_COMMAND); //ELECTRONIC VOLUME mode setting 100B 对比度命令
LCDWriteByte(0x10,LCD_COMMAND); //Set reference voltagel register 对比度数值
LCDWriteByte(0x2f,LCD_COMMAND); //power control(VB,VR,VF=1,1,1)
DelayMS(50);
LCDWriteByte(0xaf,LCD_COMMAND); //set display on
LCDWriteByte(0xf8,LCD_COMMAND); //set booster ratio
LCDWriteByte(0x00,LCD_COMMAND); 
}
//--------------------------------------------------------------------------
//写数据或命令(串行方式)
//--------------------------------------------------------------------------
void LCDWriteByte(char data,BYTE command)
{
CLR(rPDATC,CS); //CS=0
if(command == 0) 
{
CLR(rPDATC,A0); //A0=0,命令
LCDShiftWrite(data);
}
else 
{
SET(rPDATC,A0); //A0=1,数据
LCDShiftWrite(data); 
}
SET(rPDATC,CS); //CS=1;
}
//--------------------------------------------------------------------------
//串口移位输出
//--------------------------------------------------------------------------
void LCDShiftWrite(char data)
{ 
unsigned char i;
unsigned char Series,Temp;

CLR(rPDATC,SCL); //SCL=0
Series = data;
for(i=8;i>0;i--)
{
CLR(rPDATC,SCL); //SCL=0
Temp=Series & 0x80;
if(Temp)
{
SET(rPDATC,SI);//SI=1
}
else 
{
CLR(rPDATC,SI);//SI=0
}
SET(rPDATC,SCL); //SCL=1 
Series = Series << 1; 
}
}
//--------------------------------------------------------------------------
//LCDSetXY: 设置LCD坐标函数
//输入参数:X:0-127 Y:0-8
//
//编写日期:2006-1-17 
//
//最后修改日期:
//--------------------------------------------------------------------------
void LCDSetXY(BYTE x, BYTE y)
{
LCDWriteByte(0xB0|y,LCD_COMMAND);// Page(Row)
LCDWriteByte(0x10|((x+4)>>4),LCD_COMMAND);// Column high
LCDWriteByte((0x00|(x+4))&0x0f,LCD_COMMAND);// Column low
}
//--------------------------------------------------------------------------
//LCD_clear: LCD清屏函数
//
//编写日期:2006-1-17
//
//最后修改日期:
//--------------------------------------------------------------------------
void LCDcls(void)
{
UINT32 i,n;

for(i=0;i<9;i++)
{
LCDSetXY(0,i);

for(n=0;n<128;n++)
{
LCDWriteByte(0x00,LCD_DATA);
}
}

}
//--------------------------------------------------------------------------
// 清屏,窗口范围内清零 
//--------------------------------------------------------------------------
void LCDclsWin(BYTE Row1,BYTE Col1,BYTE Row2,BYTE Col2)
{
UINT32 i,j;

if (Row2>8)
Row2=8;
if (Col2>127)
Col2=127; 
for(i=Row1;i<=Row2;i++)
{
LCDSetXY(Col1,i);
for(j=Col1;j<Col2;j++)
{
LCDWriteByte(0x00,LCD_DATA);
} 
}
}

//--------------------------------------------------------------------------
//液晶屏RESET 
//--------------------------------------------------------------------------
void LCDReset(void)
{
LCDWriteByte(0xe2, LCD_COMMAND);
}
//--------------------------------------------------------------------------
//关液晶屏 
//--------------------------------------------------------------------------
void LCDOff(void)
{
LCDWriteByte(0xae, LCD_COMMAND);
}
//--------------------------------------------------------------------------
//调节对比度
//--------------------------------------------------------------------------
void LCDContrast(BYTE Level)
{
BYTE Num,Temp1,Temp2;
Temp1 = (Level/16)<<4;
switch(Level%16)
{
case 10: 
Temp2 = 0x0a;
break;
case 11: 
Temp2 = 0x0b;
break;
case 12: 
Temp2 = 0x0c;
break;
case 13: 
Temp2 = 0x0d;
break;
case 14: 
Temp2 = 0x0e;
break;
case 15: 
Temp2 = 0x0f; 
break;
default:
Temp2 = Level%16;
break;
}
Num = Temp1|Temp2;
LCDWriteByte(0x81,LCD_COMMAND);
LCDWriteByte(Num,LCD_COMMAND);
}


⌨️ 快捷键说明

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