不管编写什么驱动第一件事都是查阅数据手册,这里记录一下我编写LCD驱动的过程
硬件环境:
主板: PIC24FJ64GA306
LCD驱动芯片:PCF8542ATT
这款LCD驱动芯片支持1:8的输出可以驱动8*40的段码
可以通过这里了解一些LCD基本参数:http://www.360doc.com/content/18/1121/23/277688_796410994.shtml
LCD驱动板的原理图,我们只需要使用I2C协议和驱动芯片进行通信就可以控制LCD的显示了
1、LCD端口的初始化
查看手册了解每个端口的作用
重点关注:Vlcd和Vdd引脚的电压,Vlcd电压需要大于等于Vdd,A0引脚决定I2C从站的地址
从原理图看,Vlcd直接接5V,A0接低,所以芯片I2C写数据地址为0x70
初始化操作主要是配置I2C通信端口以及Vdd电源端口以及对驱动芯片的初始化配置
手册推荐的初始化顺序
程序的实现
void I2cInit( void )
{
I2C_VCC_OUT;//LCD_PWR设置输出
I2C_TRIS_SCL=0;//SCL设置输出
I2C_TRIS_SDA=0;//SDA设置输出
I2C_VCC_EN;//LCD_PWR输出高电平
}
/********************************************************************************
**函数名称:HalLcdCfg
**具体描述:对液晶进行初始配置
**输 入:无
**输 出:无
*********************************************************************************/
void HalLcdCfg(void )
{
//端口初始化
I2cInit();
DelayMs(1);
//配置LCD芯片
HalLcdControl(CMD_BYTE_REFRESH);//OTP刷新
DelayMs(10);
HalLcdControl(CMD_BYTE_LCD_DIS);//设置显示模式 BSP=1
HalLcdControl(CMD_BYTE_BIAS_SET);;//设置偏压比1/3
HalLcdControl(CMD_BYTE_OS_CONTROL);//设置帧率60Hz
HalLcdControl(CMD_BYTE_RERET_DATA_POINTER);//设置数据指针地址
HalLcdDisAllNum();//全显
HalLcdControl(CMD_BYTE_LCD_EN);//显示
}
2、I2C驱动
I2C我们都比较熟悉了,我们主要是通过通过I2C协议与芯片进行通行
手册推荐I2C通信序列,控制芯片需要一个控制字节
Slave address地址通过硬件A0输入控制
A0输入低电平,0X70u,写数据地址, 0x71u//读数据地址
A0输入高电平,0X72u,写数据地址, 0x73u//读数据地址
程序实现
unsigned char I2cWrite (unsigned char device_addr, unsigned char control_type,unsigned char *pdata,unsigned int len)
{
unsigned char slave_addr;
unsigned char ack,err;
unsigned int i;
unsigned char *ptmp;
err = 0;
if( len == 0) return 2;
//获取地址、从地址
slave_addr = device_addr;
//写数据
err = 0;
start();
ack = SendI2cOne(slave_addr);
if( ack != 0) err = 1;
ack = SendI2cOne(control_type);
if( ack != 0) err = 1;
ptmp = pdata;
for(i = 0; i < len; i++)
{
ack = SendI2cOne(*ptmp);
if( ack != 0) err = 1;
ptmp++;
}
stop();
return err;
}
3、PCF8545命令详解
MCU使用I2C和芯片进行通信,这里讨论这几个命令的使用,命令通过RS的低两位控制写。
3.1 initialize
芯片软件复位
3.2 OTP-refresh
刷新显示缓存,刷新显示
3.3 mode-setting
设置显示模式
BPS:设置背板引脚位置交换,下图是设置0和1的区别根据此设置电路
IVN:设置驱动方案,一共两种方案,LCD线线反转方式(默认)和LCD帧率反转方式
PD:设置芯片电源模式,默认上电,下电模式内部时钟关闭处于低功耗状态
推荐进入低功耗执行顺序
E:显示使能,默认不开启
2、oscillator-control
配置时钟,默认使用内部时钟,230KHZ
LCD帧率的计算
3、set-MUX-mode
设置多驱动模式,默认1:8
4、set-bias-mode
设置偏置比,默认1/4
5、frame-frequency
LCD的帧率由时钟频率、预分频、分频确定
预分频配置
6、load-data-pointer
定义显示RAM起始地址,设置和驱动模式相关,默认0,注意每次写完之前需要重定位数据寄存器
7、write-RAM-data
定义显示RAM写起始地址,设置和驱动模式相关,默认0,注意控制字节RS=01