| 
高级会员 主题
回帖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);
 }
 }
 }
 
 
 
 
 | 
 |