文档库 最新最全的文档下载
当前位置:文档库 › ocm12864-9

ocm12864-9

//====================LcmInterface.h文件==========================
#ifndef __LDMINTERFACE_H__
#define __LDMINTERFACE_H__
#include

//-----------------------------------------------------------------------------
// I/O port
//-----------------------------------------------------------------------------
sbit ioLcdRES = P3^3;
sbit ioLcdCS = P3^4;
sbit ioLcdA0 = P3^5;
sbit ioLcdWR = P3^6;
sbit ioLcdRD = P3^7;

//-----------------------------------------------------------------------------
// constant define
//-----------------------------------------------------------------------------
#define LCD_ON 0XAF
#define LCD_OFF 0XAE
#define LCD_START_LINE_SET 0X40
#define LCD_PAGE_SET 0XB0
#define LCD_COLUME_SET_H 0X10
#define LCD_COLUME_SET_L 0X00
#define LCD_ADC_NORMAL 0XA0
#define LCD_ADC_REVERSE 0XA1
#define LCD_DISPLAY_NORMAL 0XA6
#define LCD_DISPLAY_REVERSE 0XA7
#define LCD_ALL_POINT_ON 0XA5
#define LCD_ALL_POINT_NORMAL 0XA4
#define LCD_BIAS_1DIV9 0XA2
#define LCD_BIAS 1DIV7 0XA3
#define LCD_RMW 0XE0
#define LCD_END 0XEE
#define LCD_RESET 0XE2
#define LCD_COMMON_NORMAL 0XC0
#define LCD_COMMON_REVERSE 0XC8

#define LCD_POWER_CONTROL 0X28
#define LCD_POWER_ALL_OFF 0X00
#define LCD_POWER_ALL_ON 0X07
#define LCD_BOOSTER_ON 0X04
#define LCD_REGULATOR_ON 0X02
#define LCD_FOLLOWER_ON 0X01


#define LCD_RESISTOR_RATIO 0X20
#define LCD_ELEC_VOLUME_SET 0X81

#define LCD_STATIC_INDICATOR_ON 0XAD
#define LCD_STATIC_INDICATOR_OFF 0XAC

#define LCD_NOP 0XE3 //command for non-operation
#define LCD_TEST 0XF0 //command for IC test
//-----------------------------------------------------------------------------
// variable define
//-----------------------------------------------------------------------------
xdata unsigned char lcdData ;
xdata unsigned char lcdCommand;



//-----------------------------------------------------------------------------
// interface output
//-----------------------------------------------------------------------------
extern void LcdWriteCmdData(unsigned char cmd, unsigned char cmdData);
extern void LcdWriteDspData(unsigned char DspData);
extern void LcdClrScreen(void);
extern void LcdInit (void);
extern void DspPicture(char page, char Column, char x, char y, unsigned char *dspData);
extern void TestLcd(void);

#endif


//====================LcmInterface.c文件==========================

#include
#include

//char code Page_table[] = { 0x00, 0x00, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01 };
char code Page_table[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };

void wait(unsigned char i)
{
while(i)
{
i--;
}
}

//*****************************************************************************
// write control command data to st7565p
// MCU interface -> parallel
//**********************************************

*******************************
void LcdWriteCmdData(unsigned char cmd, unsigned char cmdData)
{
ioLcdA0 = 0;
ioLcdCS = 0;
lcdCommand = cmd | cmdData;
ioLcdCS = 1;
}

//*****************************************************************************
// write display data to st7565p
// MCU interface -> parallel
//*****************************************************************************
void LcdWriteDspData(unsigned char DspData)
{
ioLcdA0 = 1;
ioLcdCS = 0;
lcdCommand = DspData;
ioLcdCS = 1;
}

//*****************************************************************************
// clear screen
// MCU interface -> parallel
//*****************************************************************************
void LcdClrScreen(void)
{
unsigned char i,j;

for(i=0; i<9; i++) //clear page 0~8
{
LcdWriteCmdData(LCD_PAGE_SET,i); //set page
LcdWriteCmdData(LCD_COLUME_SET_L,0); //set column
LcdWriteCmdData(LCD_COLUME_SET_H,0); //set column
// LcdWriteCmdData(LCD_RMW,0); //begin modify
for(j=0; j<132; j++) //clear colum
{
LcdWriteDspData(0);
}
// LcdWriteCmdData(LCD_END,0); //end of modify
}
}

//*****************************************************************************
// Init lcd
// MCU interface -> parallel
//*****************************************************************************
void LcdInit (void)
{
//io口初始化
ioLcdCS = 1;
ioLcdA0 = 1;
ioLcdWR = 1;
ioLcdRD = 1;

//复位st7565p
ioLcdRES = 0;
wait(0xa0);
ioLcdRES = 1;
wait(0xa0);


/*
LcdWriteCmdData(LCD_RESISTOR_RATIO, 0X07); //Set built-in resistance radio
LcdWriteCmdData(LCD_DISPLAY_NORMAL,0); //display normal
LcdWriteCmdData(LCD_STATIC_INDICATOR_ON,0);//static indicator
LcdWriteCmdData(0x02,0);//flash mode on
LcdWriteCmdData(LCD_TART_LINE_SET, 0x08);//display start line set
LcdWriteCmdData(LCD_ADC_NORMAL, 0); //ADC mode select
LcdWriteCmdData(LCD_COMMON_NORMAL, 0); //Common mode select
LcdWriteCmdData(LCD_ON, 0); //display ON
LcdWriteCmdData(0x24,0);// RB/RA RATIO (4) 9.0V EV=17h VRS=2.35V
LcdWriteCmdData(LCD_ELEC_VOLUME_SET, 0); //Electronic volume control
LcdWriteCmdData(0, 0X3f); //Electronic volume control
LcdWriteCmdData(LCD_BIAS_1DIV9, 0); //lcd bias set
LcdWriteCmdData(LCD_POWER_CONTROL,LCD_POWER_ALL_ON); //Power control set
*/


LcdWriteCmdData(LCD_BIAS_1DIV9, 0); //lcd bias set
LcdWriteCmdData(LCD_ADC_NORMAL, 0); //ADC mode select
// LcdWriteCmdData(LCD_DISPLAY_NORMAL,0); //display normal
LcdWriteCmdData(LCD_COMMON_NORMAL, 0); //Common mode select
LcdWriteCmdData(LCD_RESISTOR_RATIO, 0X07); //Set built-in resistance radio
LcdWriteCmdData(LCD_ELEC_VOLUME_SET, 0); //Electronic volume control
LcdWriteCmdData(0, 0X2f); //Electronic volume control
LcdWriteCmdData(LCD_POWER_CONTROL,LCD_POWER_ALL_ON); //Power control set

LcdWriteCmdData(LCD_ON, 0); //Display on
// LcdClrScreen();
// LcdWriteCmdData(LCD_ALL_POINT_ON,0); //all point on
}

//*******

**********************************************************************
// test lcd
// MCU interface -> parallel
//*****************************************************************************
void TestLcd(void)
{
unsigned char code Butterfly[] =
/*-- 宽度x高度=32x32 --*/
{
0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x03,0x01,0x00,0x00,0x04,0x03,0x00,0x00,
0x00,0x00,0x01,0x02,0x00,0x00,0x01,0x01,0x03,0x03,0x03,0x03,0x03,0x01,0x01,0x00,
0xF8,0xF9,0xFD,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0x8F,0x7F,
0x7F,0x9F,0x3F,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xF9,0xF1,0xF0,
0xF8,0xF8,0xFC,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,0xF8,0xF0,0xF0,
0x00,0x00,0x00,0x00,0x80,0xE0,0xF8,0xF8,0xFC,0xFE,0xFE,0xFC,0xFC,0xF8,0xF0,0xC0,
0xC0,0xF8,0xFC,0xFE,0xFE,0xFE,0xFE,0xFC,0xF8,0xE0,0xC0,0x80,0x00,0x00,0x00,0x00
};
LcdClrScreen();
DspPicture(1, 1, 32, 32, Butterfly);
}


//*****************************************************************************
// Des cription: 显示图形
// parameter:
// 1. page: 图形左顶点
// 2. Column: 图形左顶点
// 3. x: 图形的长度
// 4. y: 图形的宽度
// 5. *dspData: 图形的数据
//*****************************************************************************
void DspPicture(char page, char Column, char x, char y, unsigned char *dspData)
{
unsigned char i,j;
for(i=0; i<(y/8); i++)
{
LcdWriteCmdData(LCD_START_LINE_SET, 0); //start line address
LcdWriteCmdData(LCD_PAGE_SET, Page_table[page]); //page address set
LcdWriteCmdData(LCD_COLUME_SET_L, (Column&0xf0)>>4);//column address set
LcdWriteCmdData(LCD_COLUME_SET_L, (Column & 0x0f)); //column address set
// LcdWriteCmdData(LCD_RMW, 0); //begin modify
for(j=0; j{
LcdWriteDspData(*dspData);
dspData++;
}
// LcdWriteCmdData(LCD_END,0); //end of modify
}
}























void init_devices(void)
{
//stop errant interrupts until set up
CLI(); //disable all interrupts
port_init();
timer0_init();
spi_init();
MCUCR = 0x00;
GICR = 0x00;
TIMSK = 0x01; //timer interrupt sources
SEI(); //re-enable interrupts
}



//=====延时==============
void delays(uchar t)
{
uchar a,i;
for(a=0;a{
for(i=0;i<100;i++)
;
}
}


//=====延时N微秒==============
void delay_nus(uint n)
{
while(n--);

}
//=====延时N毫秒==============
void delay_nms(uint n)
{
uchar i;
for(i=0;idelay_nus(1325);
}
//=====忙检测=================
void check_busy(void)
{
uchar read_data=0xff;
data_bus=0xff;
LCD_AO_0();
LCD_RW_1(); //读命令
LCD_CS1_0(); //片使能
while((read_data&0x80)==0x80)
{
LCD_E_1();
asm(" nop");
asm(" nop");
DDRD=0x00;

read_data=PIND;
//
LCD_E_0();
}
DDRD=0xFF;
LCD_E_0();
LCD_CS1_1(); //片禁能
}
//=====写命令到寄存器=========
void send_cmd(uchar cmd)
{
check_busy();
LCD_AO_0();
LCD_RW_0(); //写命令
LCD_CS1_0(); //片使能
data_bus=cmd;
LCD_E_1();
asm(" nop");
asm(" nop");
LCD_E_0();
asm(" nop");
asm(" nop");
LCD_CS1_1(); //片禁能
}
//=====写数据到DDRAM=========
void send_dat(uchar dat)
{
check_busy();
LCD_AO_1();
LCD_RW_0(); //写数据
LCD_CS1_0(); //片使能
data_bus=dat;
LCD_E_1();
asm(" nop");
asm(" nop");
LCD_E_0();
asm(" nop");
asm(" nop");
LCD_CS1_1(); //片禁能
}//=======初始化==============
void lcd_initial(void)
{
LCD_RES_1();
LCD_E_0();
delay_nms(3);
send_cmd(0xA1);
send_cmd(0xC0);
send_cmd(0xA2);
send_cmd(0x2C);
send_cmd(0x2E);
send_cmd(0x2F);
send_cmd(0x25);
send_cmd(0x81);
send_cmd(0x14);
send_cmd(0xAF);
send_cmd(0xE0);
send_cmd(0x40);
}

//=======清屏==============
void Display_clr(uchar data1)
{
uchar i,j;

Set_Page_Address(0);
Set_Colume_Address(0x00);
for(i=0;i<8;i++)
{
Set_Page_Address(i);
Set_Colume_Address(0x00);
for(j=0;j<0x80;j++)
{
send_dat(data1);

}
}
}

//=======写页地址==============
void Set_Page_Address(unsigned char dat)
{
send_cmd(0xb0|dat);
}
//=======写列地址==============
void Set_Colume_Address(unsigned char dat)
{
unsigned char tmp;
tmp=dat>>4;
send_cmd(0x10|tmp); //送列地址高三位
tmp=(0x0f&dat)|0x04;
send_cmd(tmp); //送列地址低四位
}

//=======显示字==============
void Display_world(uchar x,uchar y, const uchar *data1)
{
uchar i,j;

Set_Page_Address(x);
Set_Colume_Address(y);
for(j=0;j<16;j++)
{
send_dat(*data1);
data1++;
}
Set_Page_Address(x+1);
Set_Colume_Address(y);
for(j=0;j<16;j++)
{
send_dat(*data1);
data1++;
}

}

//=======显示点阵==============
void Display_Grid(uchar data1,uchar data2)
{
uchar i,j;
for(i=0;i<8;i++)
{
Set_Page_Address(i);
Set_Colume_Address(0x00);
for(j=0;j<64;j++)
{
send_dat(data1);
send_dat(data2);
}
}
}
//=======显示图形===============
void Display_Picture(const uchar *pic)
{
unsigned char i,j;
for(i=4;i<8;i++)
{
Set_Page_Address(i);
Set_Colume_Address(0x00);
for(j=0;j<0x80;j++)
{
send_dat(*pic);
pic++;
}


}
}



//=======显示字符==============//
void Display_Char(uchar x,uchar y, const uchar *data1)
{
uchar i,j;

Set_Page_Address(x);
Set_Colume_Address(y);
for(

j=0;j<8;j++)
{
send_dat(*data1);
data1++;
}
Set_Page_Address(x+1);
Set_Colume_Address(y);
for(j=0;j<8;j++)
{
send_dat(*data1);
data1++;
}

}







/*
控制器:st7565
串行驱动方式,唯一要注意的一点就是WR和RD这两个引脚虽然用不到,但是要接地,
否则无法正常显示。当时调了很久。不知道其他厂家的是否也这样。

*/
#include
#include

#include "LCD_Driver.h"
//字库
#include "hzk.h"

//当前字符显示的位置
//unsigned char Lcd_Charcter_CurrentX,Lcd_Charcter_CurrentY;
//当前像素显示位置
unsigned char Lcd_CurrentX,Lcd_CurrentY;
//图像反色显示 0 否 1是
bit LCD_DisplayReserve_Driver;

//定义LCD显示的全局变量
#define CS_Port P3_0
#define A0_Port P3_1
#define SI_Port P3_2
#define SCL_Port P3_3
#define RST_Port P3_4
enum PINDefine{CS,A0,SI,SCL,RST};

//设置某一位
void SETBit(unsigned char PIN)
{

switch (PIN)
{
case CS :
CS_Port=1;
break;

case A0 :
A0_Port=1;
break;

case SI :
SI_Port=1;
break;

case SCL :
SCL_Port=1;
break;

case RST :
RST_Port=1;
break;
}


}

//清某一位
void CLRBit(unsigned char PIN)
{
switch (PIN)
{
case CS :
CS_Port=0;
break;

case A0 :
A0_Port=0;
break;

case SI :
SI_Port=0;
break;

case SCL :
SCL_Port=0;
break;

case RST :
RST_Port=0;
break;
}
}


/***********************************
** 函数名称: Delay
** 功能描述: 延时时间=(n*9+17)*12/F
** 输 入: n
** 输 出 : 无
** 全局变量:无
** 调用模块: 无
******************************************/

void LCD_DelayMS(unsigned int n)
{
while(n--);
return;
}

//--------------------------------------------------------------------------
//串口移位输出
//--------------------------------------------------------------------------
void LCDShiftWrite(char datain)
{
unsigned char i;
unsigned char Series,Temp;
Series = datain;

for(i=8;i>0;i--)
{
CLRBit(SCL); //SCL=0
Temp=Series & 0x80;
if(Temp)
{
SETBit(SI);//SI=1
}
else
{
CLRBit(SI);//SI=0
}
SETBit(SCL); //SCL=1
Series = Series << 1;
}

}
/***********************************
** 函数名称: Write_Data
** 功能描述: 传送数据
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块: Busy,
******************************************/

void Write_Data(unsigned char dat)
{

CLRBit(CS); //CS=0
SETBit(A0); //A0=1,数据
LCDShiftWrite(dat);
SETBit(CS); //CS=1;
return;
}

/***********************************
** 函数名称: Write_Instruction
** 功能描述: 传送命令
** 输 入: dat
** 输 出 : 无
** 全局变量:无
** 调用模块: Busy,
******************************************/

void Write_Instruction(unsigned char cmd)
{
CLRBit(CS); //CS=0
CLRBit(A0); //A0=0,命令
LCDShiftWrite(cmd);
SETBit(CS); //CS=1;
return;
}

//==============================================================================高一级函数
//设置像素显示坐标(x:0-127,y:0-7)
void LCD_setpos_Driver(unsigned char Lx,unsigned char Ly)
{
Write_Instruction(0xB0|Ly);// Page(Row)
Write_Instruction((0x10|(Lx>>4)));
Write_Instruction((0x0f&Lx));
Lcd_CurrentX=Lx;
Lcd_CurrentY=Ly;

}
/*
//设置像素显示坐标(x:0-127)
void LCD_setposX_Driver(unsigned char Lx)
{
Write_Instruction((0x10|(Lx>>4)));
Write_Instruction((0x0f&Lx));
}
//设置像素显示坐标(y:0-7)
void LCD_setposY_Driver(unsigned char Ly)
{
Write_Instruction(0xB0|Ly);// Page(Row)
}
*/

//设置字符位置(x:0-8,y:0-3)
void LCD_setCharpos_Driver(unsigned char Lx,unsigned char Ly)
{
//当前像素显示位置
Lcd_CurrentX=Lx*16;
Lcd_CurrentY=Ly*2;
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
}


//清屏
void LCD_CLS_Driver(char value)
{
unsigned char i,n;

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

for(n=0;n<128;n++)
{
Write_Data(value);
}
}

}
//显示BMP图片
void LCD_DisplayBMP_Driver(unsigned char *PicData) //信息显示
{
unsigned char BMPwithLen,BMPheightLen;
unsigned char BMPwith;
unsigned char BMPheight;
BMPwith=*PicData;
PicData++;
BMPheight=(*PicData)/8;
PicData++;

//BMPLen=BMPheight/8*BMPwith

for(BMPheightLen=0;BMPheightLen0;PicLen--)
{

//图像反色显示 0 否 1是
if (LCD_DisplayReserve_Driver==0)
{
Write_Data(*PicData);
}
else
{
Write_Data(~(*PicData));
}


PicData++;
};

}




//显示一个Unicode
void LCD_disp_Putchar_Driver(unsigned int uChar)
{
unsigned int i;
unsigned char *p;
if(uChar<128)
{
//for(i=0;i != ENGLISHCHARNUMBER;i++)
//

{
//if(uChar==EnglishCode[i][0])
//{
p=(uChar-0x20)*(ENGLISHCHARLegth)+&nAsciiDot[0];

LCD_disp_DisplayImage_Driver(p, ENGLISHCHARLegth/2);
Lcd_CurrentY++;
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
LCD_disp_DisplayImage_Driver(p+(ENGLISHCHARLegth/2),(ENGLISHCHARLegth/2));
Lcd_CurrentY--;
Lcd_CurrentX+=8;
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
//break;
//}
//}
}
else
{
for(i=0;i!=GB_ZK_NUM;i++)
{
if(uChar==(GB_16[i].Index[0]*256+GB_16[i].Index[1]))
{
//分别在两页显示
LCD_disp_DisplayImage_Driver(GB_16[i].Msk,(CHINESECHARlegth/2));
Lcd_CurrentY++;
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
LCD_disp_DisplayImage_Driver(GB_16[i].Msk+(CHINESECHARlegth/2),(CHINESECHARlegth/2));
Lcd_CurrentY--;
Lcd_CurrentX+=16;
//设置像素显示坐标(y:0-7)
LCD_setpos_Driver(Lcd_CurrentX,Lcd_CurrentY);
break;
}
}
}
}


//图像反色显示 0 否 1是,执行此命令后的所有操作均是按照设置显示
void LCD_disp_SetReverse_Driver(unsigned char ReverseTrue)
{
//图像反色显示 0 否 1是
if (ReverseTrue==0)
{
LCD_DisplayReserve_Driver=0;
}
else
{
LCD_DisplayReserve_Driver=1;
}
}
//对比度设置
void Set_Contrast_Control_Register(unsigned char Level)
{
unsigned char 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;
Write_Instruction(0x81);
Write_Instruction(Num);
}




//初始化LCD屏
void init_LCD_Driver()
{

CLRBit(RST); // RST=0;
LCD_DelayMS(50);
SETBit(RST); // RST=1;
LCD_DelayMS(50);
Write_Instruction(0xa2); //lcd bias select 1/9 BIAS
Write_Instruction(0xa1); //ADC select,REVERSE 127-->0(a0,a1)
Write_Instruction(0xc0); //com select,NORMAL 0-->63(c8,c0)
Write_Instruction(0x26); //RESISTOR RATIO
Write_Instruction(0x81); //ELECTRONIC VOLUME mode setting 100B 对比度命令
Write_Instruction(0x10); //Set reference voltagel register 对比度数值
Write_Instruct

ion(0x2f); //power control(VB,VR,VF=1,1,1)
LCD_DelayMS(50);
Write_Instruction(0xaf); //set display on
Write_Instruction(0xf8); //set booster ratio
Write_Instruction(0x00);
//当前像素显示位置
Lcd_CurrentX=0;
Lcd_CurrentY=0;
//图像反色显示 0 否 1是
LCD_DisplayReserve_Driver=0;
}












原来用ST7920作为驱动IC的LCD,因为要百来块,为了省成本选了COG封装的LCD(金鹏电子的),驱动IC变成了ST7565P的了,所有的命令都是E文的,70来页,可怜的资料又比较匮乏,好不容易网上找到点运用程序。
void LCD_Init (void)
{
LCD_RST_OUTPUT;
LCD_RST_LOW;//LOW
Delay_ms(50);
LCD_RST_HIGH;//HIGH
Delay_ms(50);

LCD_Write (LCD_COMMAND,0xa2); /*LCD BIASSELECT 1/9 BIAS*/
LCD_Write (LCD_COMMAND,0xa1); /*ADC SELECT,REVERSE*/
LCD_Write (LCD_COMMAND,0xc0); /*COM SELECT,NORMAL*/
LCD_Write (LCD_COMMAND,0x25); /*Vo voltage regulator internal resistor ratio set*/
LCD_Write (LCD_COMMAND,0x81); /*ELECTRONIC VOLUME mode setting 100B*/
LCD_Write (LCD_COMMAND,Contrast_Value); /*Set reference voltagel register*/
LCD_Write (LCD_COMMAND,0x2f); /*power control(VB,VR,VF=1,1,1,ALL ON)*/
LCD_Write (LCD_COMMAND,0xa4);
LCD_Write (LCD_COMMAND,0xf8); /*SET BOOSTER RATIO*/
LCD_Write (LCD_COMMAND,0x03); /*问题出在这里*/
Delay_ms(50);
LCD_Write (LCD_COMMAND,0xaf); /*SET DISPLAY ON*/
}
实际调试时,一开始电压3.3V,底色有点阵出现,折腾了两天,后来厂家对偶说用3V,OK,当时输入的是0XA3,选的是1/7 BIAS,命令上写的1/7 BIAS(ST7565P),偶在网站上搜索到的运用也都是这样的。当时点了几行字都不错,都是按照顺序从第0列开始,8列一个数字点的。但是后来发现如果不是按照从第0列开始的顺序,譬如第二行从第4列开始,8列一个数字点,就发现中间有几个数字会有某几列脱影,颜色变淡,折腾了一整天,电压从3V到3.3V都试过了,Contrast_Value,也就是对比度也改了无数次,一直百思不得其解。网上查到的资料还有厂家给偶的例子当时都用1/9 BIAS,偶就觉得很奇怪,为什么偶运用1/9就不行呢?改成1/9后会变的很淡很淡,几乎辨别不出来,如果电压升高到3.3V,背景底色就会出现黑糊糊的点阵,真是郁闷无比啊,上E文文档看了N遍,想来想去问题肯定是出现LCD初始化的某个命令上,程序肯定是没问题的,就一个个试,试到BOOSTER RATIO那里,输入01,选5X的RATIO,发现某几列的脱影没了,但是背景底色会有点偏黑,兴奋啊,马上再改0X03,改成6X的RATIO,脱影也没,字迹清晰,底色也不会有一点偏黑了。

这次折腾的是够戗,虽然偶这块LCD调试出

来没什么问题了,但是厂家那边的技术支持给偶的例子也没改动BOOSTER RATIO,都是选默认的,0X00,BIAS 也都是1/9,电压就是3V,也没什么客户反映过这个问题,偶也搞不懂了,难道偶这一块比较特殊?
不知道用过的兄弟大概怎么使用的?



相关文档