钻石会员
主题
回帖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.显示开启
}
//==================================================================================== |
评分
-
查看全部评分
|