钻石会员 
 
主题
回帖0
积分11931
阅读权限50
注册时间2011-10-9
最后登录1970-1-1
在线时间 小时
 
 
 
 
 | 
 
 本帖最后由 STMFans 于 2012-7-11 22:32 编辑  
 
分辨率128X160这个液晶控制器兼容HX8533或者SPFD54124B,看手册,两个IC指令基本相同。NOKIA很多手机使用这个液晶屏,淘宝搜索3110C 液晶,或者7070液晶,就出来一堆手机型号。价格便宜,可以串行也可以并行。以前都是串行驱动,速度有点慢,这次顺便做了板子,试了下速度还错,VET6,72M,IO驱动,清屏刷整屏字没有觉得迟钝。唯一的缺点:座子不好焊。 
连接器参考:
 
ljq.pdf
(135.28 KB, 下载次数: 1284)
 
 
 
 
 
 
 
 
液晶驱动。有些词不达意的注释忽略就行,修改别的工程得来的。 
 
#ifndef __LCD_H 
#define __LCD_H   
   
#include "MySystem.h" 
#define LCD_RES  11 
#define LCD_CS   12 
#define LCD_RS   13 
#define LCD_WR   14 
#define LCD_RD   15  
#define LCD_BL   10 
#define LCD_Data_Out     GPIOE->ODR 
#define LCD_Data_In      GPIOE->IDR    
#define LCD_RES_High()  {GPIOD->BSRR=1<<LCD_RES;}  
#define LCD_RES_Low()   {GPIOD->BRR=1<<LCD_RES; } 
#define LCD_CS_High()   {GPIOD->BSRR=1<<LCD_CS; }   
#define LCD_CS_Low()    {GPIOD->BRR=1<<LCD_CS;  } 
#define LCD_RS_High()   {GPIOD->BSRR=1<<LCD_RS; }  
#define LCD_RS_Low()    {GPIOD->BRR=1<<LCD_RS;  } 
#define LCD_WR_High()   {GPIOD->BSRR=1<<LCD_WR; } 
#define LCD_WR_Low()    {GPIOD->BRR=1<<LCD_WR;  } 
#define LCD_RD_High()   {GPIOD->BSRR=1<<LCD_RD; } 
#define LCD_RD_Low()    {GPIOD->BRR=1<<LCD_RD;  } 
#define LCD_BL_ON()     {GPIOD->BSRR=1<<LCD_BL; }  
#define LCD_BL_OFF()    {GPIOD->BRR=1<<LCD_BL;  } 
void LCD_Init(void); 
void LCD_Clear(void); 
void LCD_Show_Char8(unsigned char c,unsigned char x, unsigned char y); 
void LCD_Show_String8 (unsigned char *String,unsigned char x,unsigned int y); 
void LCD_SET_XY(unsigned char xsta, unsigned char xend,unsigned char ysta,unsigned char yend); 
void LCD_Write_Cmd (unsigned char Cmd); 
void LCD_Write_Data (unsigned char Data); 
#endif 
 
 
#include "LCD.h" 
#include "font8x16.h" 
#include "stm32f10x.h" 
#include "Myusart.h" 
//==================================================================================== 
void LCD_Write_Sdata (unsigned char Data) 
{ 
    LCD_Data_Out=Data; 
    LCD_WR_High(); 
    LCD_WR_Low(); 
} 
void LCD_Write_Cmd (unsigned char Cmd) 
{ 
    LCD_CS_Low(); 
    LCD_RS_Low(); 
    LCD_RD_High(); 
    LCD_Data_Out=Cmd; 
    LCD_WR_High(); 
    LCD_WR_Low(); 
} 
void LCD_Write_Data (unsigned char Data) 
{ 
    LCD_CS_Low(); 
    LCD_RS_High(); 
    LCD_RD_High(); 
    LCD_Data_Out=Data; 
    LCD_WR_High(); 
    LCD_WR_Low(); 
} 
//==================================================================================== 
void LCD_SET_XY(unsigned char xsta, unsigned char xend,unsigned char ysta,unsigned char yend) 
{ 
     LCD_Write_Cmd(0x2a);    //设置X坐标 
  LCD_Write_Data(0x00);     //X方向开始坐标 
  LCD_Write_Data(xsta+2);     //X方向开始坐标 
  LCD_Write_Data(0x00);     //X方向开始坐标 
  LCD_Write_Data(xend);     //X方向开始坐标 
 
  LCD_Write_Cmd(0x2b);   //设置Y坐标 
  LCD_Write_Data(0x00);     //X方向开始坐标 
  LCD_Write_Data(ysta+1);     //X方向开始坐标 
  LCD_Write_Data(0x00);     //X方向开始坐标 
  LCD_Write_Data(yend);     //X方向开始坐标 
} 
//==================================================================================== 
void LCD_Show_Char8(unsigned char c,unsigned char x, unsigned char y) 
{ 
    unsigned char k,line,Ctemp; 
    LCD_SET_XY(x,x+9,y,y+16);     //设置X,Y坐标 
LCD_Write_Cmd(0x2c);             //发送写LCD内部RAM指令,写屏前都要发这个指令 
    c-=0x20;                                        //字库从空格开始,前面省略32个字符,要减去0X20 
    for (line=0; line<16; line++)       //字库是8X16的,16行,每行1字节8BIT。 
    { 
        Ctemp=font8x16[c][line];        //C是ASCII编码,数值与字库里地址一一对应, 
        for(k=0;k<8;k++)                     //比如数字1ASCII为0X31减去0x20=0x11,十进制17,对应字库的索引17 
        { 
            if(Ctemp&0x01)                    //字库编码是低位在前,所以先从低位比较 
            { 
                LCD_Write_Data(0x07);     //是1的话显示亮点 
    LCD_Write_Data(0xe0); 
    } 
            else 
            { 
                LCD_Write_Data(0x00);    //是1的话显示暗点 
    LCD_Write_Data(0x00); 
    } 
           Ctemp=Ctemp>>1;                   //右移一位,比较下一个BIT 
        } 
    } 
LCD_CS_High();                            //释放LCD 
} 
//==================================================================================== 
void LCD_Show_String8 (unsigned char *String,unsigned char x,unsigned int y) 
{ 
while ( * String ) 
{ 
  LCD_Show_Char8( *String++,x,y); 
        x+=8;      
} 
} 
//==================================================================================== 
void LCD_Clear(void) 
{ 
    unsigned char i,j; 
LCD_SET_XY(0,129,0,160);       //设置X,Y坐标 
LCD_Write_Cmd(0x2c);        //发送写RAM指令,写屏前都要发这个指令 
for(i=0;i<160;i++)    
{ 
     for(j=0;j<128;j++)    
     { 
      LCD_Write_Data (0x00);    //写前8BIT,当前接口是16BIT格式的话要发送2次 
   LCD_Write_Data (0x00);   //写后8BIT 
  } 
} 
LCD_CS_High();  
 
} 
//====================================================================================   
void LCD_Init(void) 
{ 
    LCD_RES_Low(); 
Delay_ms(20);                              
LCD_RES_High(); 
Delay_ms(20); 
LCD_Write_Cmd(0x01);         //Software Reset软件复位 
Delay_ms(20); 
 
LCD_Write_Cmd(0x11);         //Sleep Out,0x10=Sleep In.退出睡眠模式 
LCD_Write_Cmd(0x38);         //Idle Mode Off 
LCD_Write_Cmd(0x20);         //Display Inversion Off 
LCD_Write_Cmd(0x13);         //Normal Display Mode On .正常显示模式开启 
LCD_Write_Cmd(0x3a);        //interface pixel format,default 18bit接口数据格式,默认18BIT 
LCD_Write_Data(0x55);        //16bit pixel format 0X55=16BIT. 
LCD_Clear(); 
LCD_Write_Cmd(0x29);        //Display  On ,0x28=Display Off.显示开启 
} 
//==================================================================================== |   
 
评分
- 
查看全部评分
 
 
 
 
 
 |