第一次用彩屏,用IO口模拟16位的8080时序。写了个清屏函数测试下,差不多300ms这样才刷完一次。不是说16位并口速度很快吗??网上有人说用SPI都能30帧/s怎么做到的???
还有那个时序函数也有点问题,为什么那些例程里,放上数据后都不需要延时,我这个没延时就出问题了???
- void LCD_Clear(u16 color)//填充的颜 {MOD}
- {
- u32 i;
-
- LCD_WR_CMD(LCD_CMD_COLADDR);//设置列地址
- LCD_WR_DAT(0x00); //列开始地址0(0x0000),先写高8位
- LCD_WR_DAT(0x00); //后写低8位
- LCD_WR_DAT(0x00); //列结束地址239(0x00ef),先写高8位
- LCD_WR_DAT(0xef); //后写低8位
-
- LCD_WR_CMD(LCD_CMD_ROWADDR);//设置行地址
- LCD_WR_DAT(0x00); //行开始地址0(0x0000),先写高8位
- LCD_WR_DAT(0x00); //后写低8位
- LCD_WR_DAT(0x01); //行结束地址319(0x013f),先写高8位
- LCD_WR_DAT(0x3f); //后写低8位
-
- LCD_WR_CMD(LCD_CMD_GRAM);//开始写显示数据
-
- for(i=0;i<76800;i++) LCD_WR_DAT(color);
复制代码
补充内容 (2018-1-15 12:27):
/*------- 写命令时序 ----------*/
void LCD_WR_CMD(unsigned short dat)
{
LCD_CS_0;//片选拉低
LCD_RS_0;//RS为0是写命令
LCD_WR_0;//写操作,先拉低以便产生上升沿
LCD_RD_1;//写操作时,RD要拉高
DATAOUT(dat)//往数据口放数据
delay_ns(1);//延时,不然会白屏或花屏
LCD_WR_1;//拉高产生上升沿
LCD_CS_1;//片选拉高
}
/*------- 写数据时序 --------*/
void LCD_WR_DAT(unsigned short dat)
{
LCD_CS_0;
LCD_RS_1;//RS为1是写数据
LCD_WR_0;//写操作,先拉低以便产生上升沿
LCD_RD_1;//写操作时,RD要拉高
DATAOUT(dat)
delay_ns(1);//延时,不然会白屏或花屏
LCD_WR_1;
LCD_CS_1;
}
/*-------- 读数据时序 -----------*/
unsigned short LCD_RD_DAT(void)
{
u16 dat = 0;
Input_mode();//IO口模式设置为输入模式以便接收数据
LCD_CS_0;
LCD_RS_1;//数据
LCD_WR_1;//读操作时,WR要拉高
LCD_RD_0;//读操作,先拉低以便产生上升沿
delay_us(5);
dat = DATAIN//取出IDR里的数据
LCD_RD_1;
LCD_CS_1;
Output_mode();//IO口模式换回输出模式
return dat;
}
不是吧?彩屏的数据手册上说了每个16位地址要分两次写入,先写高8位再写低8位。而颜 {MOD}数据才是16位整个写入。
那个所谓的高8位低8位只是对液晶的寄存器而言的,和单片机IO口的8位16位没关系吧,
写时序没问题的了。。
花屏感觉是并口线信号干扰的问题,我用杜邦线连接的,有时候动一下线就正常,有时候就花屏,已经用临时的办法解决了,到时候用FSMC看看还花不花屏。
一般IO模拟时序的刷屏帧率有多少,我用定时器测了下有14-18帧正常吧?
一周热门 更多>