搜索
bottom↓
回复: 3

CPLD驱动4.3寸TFT显示颜色问题

[复制链接]

出0入0汤圆

发表于 2010-8-7 11:01:23 | 显示全部楼层 |阅读模式
各位DX好,刚开始接触CPLD。
参考这位DX的代码,驱动我的4.3寸TFT,分辨率为480*272。
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4180358&bbs_page_no=1&search_mode=4&search_text=wso75839840&bbs_id=9999
代码就改了一下。换了一个时钟。我是的54M的。
用STM32驱动的,送入CPLD数据为16位。SRAM这512K的。
下面是我STM32的代码。

1. 当写入65280个点(一半的屏)为红色。再写入32640个点(4分之一屏)为蓝色。
显示的时候上半屏正常,但下面的4分之一不是蓝色,而是紫色。
我换了其它颜色也是。感觉第一次的颜色总是保留下来了。

开始我以为是CPLD刷数据时,buffer没有清0.后面改了一下还是这样。
不知道为什么。

2. 如果要显示前景色和背景色,是刷两次屏吗?第一次刷背景色,第二次定点刷前景色?
   那样的话SRAM中就要保存两屏的数据了。是不是我想错了。

void Send_Data(u16 data,u8 n)
{

        Set_Cs;
        if(n==1) Set_Rs;
        else if(n==0) Clr_Rs;       
        Data_Convert(data);
        Clr_Cs;       
}

void Data_Convert(u16 data)
{
        //GPIOE->ODR=GPIOE->ODR|(data&0xF0)<<3;
        //GPIOD->ODR=GPIOD->ODR|(data&0x0C)>>2;
        //GPIOD->ODR=GPIOD->ODR|(data&0x03)<<14;
        GPIOD->ODR=GPIOD->ODR|(data&0x0C)>>2;
        GPIOD->ODR=GPIOD->ODR|(data&0x03)<<14;
        GPIOE->ODR=GPIOE->ODR|(data&0x1FF0)<<3;       
        GPIOD->ODR=GPIOD->ODR|(data&0xE000)>>5;
}

void TFT_test(void)
{
        u16 i;
        u16 j;
        for(i=0;i<65280;i++)                  //65280
        {
           Send_Data(0x001F,1);                                    
           for(j=0;j<50;j++);                  
        }
       
        //Send_Data(0x001F,0);
        //for(j=0;j<50;j++);

        for(i=0;i<32640;i++)
        {
           Send_Data(0xF800,1);                                    
           for(j=0;j<50;j++);
       
        }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2010-8-7 11:25:54 | 显示全部楼层
lz
==============================你用什么芯片驱动的,能上个图片吗

出0入0汤圆

发表于 2010-8-7 14:52:38 | 显示全部楼层
www.mcutech.cn  cpld+sram

出0入0汤圆

 楼主| 发表于 2010-8-7 20:31:22 | 显示全部楼层
回复【1楼】flyforyou85
-----------------------------------------------------------------------

我是用EPM570驱动的,方案是PPA2001的方案,按照他的原理图画的板子。

问题解决了!呵呵,开始一直以为是CPLD程序的事,就一直查。

后来发现是STM32程序的问题。没次发数据的时候没有清0.

加两句就可以了。

void Data_Convert(u16 data)
{
GPIOD->ODR=0x0000;
GPIOE->ODR=0x0000;
GPIOD->ODR=GPIOD->ODR|(data&0x0C)>>2;
GPIOD->ODR=GPIOD->ODR|(data&0x03)<<14;
GPIOE->ODR=GPIOE->ODR|(data&0x1FF0)<<3;
GPIOD->ODR=GPIOD->ODR|(data&0xE000)>>5;
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 17:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表