|
【庆科Open1081】LCD显示的进一步探索
[复制链接]
原来我的LCD是不能正常工作的,刚拿到手作LCD测试时,仅显示了乱七八糟的彩色。以后就不再显示了。根据此现象判断,接触不良的可能性最大。所以就反复看LCD插座等处并重焊,没有解决问题。前天又拿着LCD看,因为我不死心,很想把它搞好,当把LCD模块分离后检查,发现MAX3032的第18脚有些异常,仔细观察终于找到了原因:18脚 没焊上!!
一、LCD的驱动IC
Open1081所配的LCD,资料没有介绍,如果更进一步地使用此LCD的特殊功能,必须知道其驱动IC。随即从庆科的程度寻找突破口,这里有几个关键点:
OSC控制:
LCD_WriteReg( 0x000, 0x0001 ); /* oschilliation start */
电源控制:
LCD_WriteReg( 0x100, 0x0000 ); /*power supply setup*/
窗口控制:
LCD_WriteReg(0x210,0x0000);
LCD_WriteReg(0x212,0x0000);
LCD_WriteReg(0x211,0xEF);
LCD_WriteReg(0x213,0x013F);
经过比较,感觉HD66781很象,其手册为:
(PDF)
HD66781.pdf
(3.96 MB, 下载次数: 4)
做了部分试验,没有发现不符,以后还要继续试验一些特殊功能,以确定它的IC型号。
二、LCD的写入速度
在庆科的例程中,使用SPI1对其控制,同时SPI1也控制摸屏。使用的速度为1/64:
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;
清屏时超过1秒(估计值),象这样的速度着实无法接受。经过实验,在二分频时可以正常工作:
SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2;
然而,它与触屏是一起使用的,触屏的速度低,所以只有这样做:
(触屏工作前)SPI1->CR1 |= 8; // SPI2¨ìØÂêÎa: Fpclk/64
……
(触屏工作后)SPI1->CR1 |= 0xFFC7; // SPI2¨ìØÂêÎa: Fpclk/2
三、速度的进一步提高
进一步查看例程代码,感觉使用SPI时并没有充分提高速度,反而在有些步骤时影响速度,因为使用的是查询式:
uint8_t SPI_Communication(uint8_t send_char)
{
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)==RESET);
SPI_I2S_SendData(SPI1,(uint16_t)send_char);
while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE)==RESET);
return ((unsigned char)SPI_I2S_ReceiveData(SPI1));
}
每一次调用这个函数时,1、使用ST的库函数,由于过程的调用使用有入栈出栈操作。
2、 使用判断语句while(SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE)==RESET);它会增加至少四个时钟-----即是可以发送时。
分析电路的形式,使用中断也不能提高速度,因为仍然需要等待。所以,使用IO模拟SPI的方法会好一些,因为在发送前不需要判断发送器是否为空,发送完也不用判断是否发送完。
|
|