高级会员
主题
回帖0
积分65
阅读权限30
注册时间2014-1-22
最后登录1970-1-1
在线时间 小时
|
本帖最后由 40061589 于 2014-1-23 02:14 编辑
前段时间买了几片光王12864液晶(NJU6676),看了一些资料终于把它点亮了,现在把一些经验给大家分享一下。
在供电电路中我用的是4倍升压,所用的电容电阻等元件是手头上现有的规格,原理图如下。程序这一块我用的是80时序,现贴出写指令、写数据、判忙、初始化等程序段。控制芯片我用的是CC1110,大家可以根据自己所用的芯片改一下程序。按照我这个原理图与程序肯定可以点亮屏。
电路部分:
原理图中R8\R9很重要,我先用的2个510K的就不能点亮屏换为910K与3M就可以了,可调电阻没变200K。供电3.3V时实测电路各点的电压为:V5=Vout=-9.28V~-9.52V之间变化,V4=-7.82V~8.04V之间变化,V3=-6.47V~-6.66V之间变化,V2=0.46V~0.52V之间变化
V1=1.8V~1.82V之间变化,可调电阻所调的位置不同对以上各点的电压会有所影响,但应该要满足这个关系:V1>V2>V3>V4>V5=Vout,如果其中哪一个点的电压不正常,则检查LCD软排线与PCB是否接触正常或外接电容是否虚焊。
程序部分:
#define HIG 1
#define LOW 0
#define LCD_CS P0_7
#define LCD_RES P0_6
#define LCD_A0 P0_5
#define LCD_WR P0_4
#define LCD_RD P0_3
#define LCD_PS P0_1
#define LCD_C86 P0_0
#define LCD_DATA P1
#define NOP asm("NOP");asm("NOP");asm("NOP");asm("NOP");
void LCD_Reset(void)//复位程序
{
LCD_C86=LOW;//8080MPU
LCD_PS=HIG;//并行接口
LCD_RES=LOW;
delay_Xms(50);//延时50ms
LCD_RES=HIG;
delay_Xms(50);//延时50ms
}
void LCD_ini(void)//初始化程序
{
LCD_Reset();
LCD_Write_COM(0xa2); //LCD bias Select
LCD_Write_COM(0xa1);//ADC Select
LCD_Write_COM(0xc0);//Common Direction Select
LCD_Write_COM(0x40);//Initial display line
LCD_Write_COM(0x81);//EVR mode set
LCD_Write_COM(0x30); //Set EVR register 0x00 to 0x3f
LCD_Write_COM(0x2f); //Power control set
LCD_Write_COM(0xa6);
LCD_Write_COM(0xa4);//entire display on
LCD_Write_COM(0xe7);//lcd driver on
LCD_Write_COM(0xaf);//Display ON
LCD_Write_COM(0xad);
}
void LCD_Write_COM(uchar command)//8080并行写指令
{
LCD_Busy();
LCD_A0=LOW;
LCD_CS=LOW;
LCD_RD=HIG;
LCD_WR=LOW;
NOP;
LCD_DATA=command;
NOP;
LCD_WR=HIG;
}
void LCD_Write_DATA(uchar data)//8080并行写数据
{
//LCD_Busy();
LCD_A0=HIG;
LCD_CS=LOW;
LCD_RD=HIG;
LCD_WR=LOW;
NOP;
LCD_DATA=data;
NOP;
LCD_WR=HIG;
}
void LCD_Busy(void)//判忙
{
uchar i;
P1DIR=0x00;//P1端口配置为输入
LCD_A0=LOW;
LCD_CS=LOW;
LCD_RD=LOW;
LCD_WR=HIG;
i=P1;
while (i)
{i=P1&(0x80);}
P1DIR=0xff;//P1端口配置为输出
}
void Display_fill(uchar fill) //全屏填充
{
unsigned char page,column;
for(page=0xB7;page>=0xB0;page--)
{
LCD_Write_COM(page); //set page address
LCD_Write_COM(0x10); //set Column address MSB
LCD_Write_COM(0x00); //set column address LSB
for(column=0;column<131;column++)
{
LCD_Write_DATA(fill);
}
}
}
|
|