历史上的今天
返回首页

历史上的今天

今天是:2024年09月10日(星期二)

正在发生

2019年09月10日 | 正点原子LCD-TFT原理讲解与配置介绍

2019-09-10 来源:eefocus

初始化序列由厂家提供,直接向厂家要


 

对于这个指令9341的描述是错误的


FSMC的简介


TFTLCD没有地址线没有地址线,而把RS连接到A0-A15其中的任意一根线。当地址线来用,这样就可以吧TFTLCD当成一个SROM来用了。


HADDR不可以直接配置,而是固定死的,我们只能选择不能修改


当bank1接的是16位宽的存储器的时候要右移一位对齐。


这其中NBL是用不到的。A只用到了一个,最重要的还是看最下面这个D信号的时序,它对应我们的ILI9341的读写时序。

FSMC_BCRx  这个寄存器,x代表1-4,对应我们的前面的第一个区到第四个区。

上图中如果单片机是STM32F4那么DATAST就不需要加1,而对于ADDSET[3:0]F1 F4都需要加1


..

---------------------------------------------LCD液晶显示实验讲解----------------------------

-------------------- -----------------------------1.硬件连接这里不多讲了-----------------------------------------------------------------


--------------------------------------------------2.LCD&LCDdev结构体讲解  下面这个结构体 lcd.h里面定义的-----------------------------


上面这个结构体在LCD.h里面   RS为1命令   为0的时候是数据


这部分是将lcd-base强制转化为lcd-typedef这样的机构体指针。最终我们要用的就是这个lcd了。


有7个参数  这样一个结构体就很方便的管理LCD相关的结构体


//设置lcd显示方向

//dir:0,竖屏    1,横屏,

void LCD_Display_Dir(u8 dir)

{

    if(dir==0)            //竖屏

    {

        lcddev.dir=0;    //竖屏

        lcddev.width=240;

        lcddev.height=320;

        if(lcddev.id==0X9341||lcddev.id==0X6804||lcddev.id==0X5310)

        {

            lcddev.wramcmd=0X2C;

             lcddev.setxcmd=0X2A;

            lcddev.setycmd=0X2B;       

            if(lcddev.id==0X6804||lcddev.id==0X5310)

            {

                lcddev.width=320;

                lcddev.height=480;

            }

        }else if(lcddev.id==0x5510)

        {

            lcddev.wramcmd=0X2C00;

             lcddev.setxcmd=0X2A00;

            lcddev.setycmd=0X2B00; 

            lcddev.width=480;

            lcddev.height=800;

        }else if(lcddev.id==0X1963)

        {

            lcddev.wramcmd=0X2C;    //设置写入GROM的指令

            lcddev.setxcmd=0X2B;    //设置写x坐标指令

            lcddev.setycmd=0X2A;    //设置写y坐标指令

            lcddev.width=480;        //设置宽度480

            lcddev.height=800;        //设置高度800

        }else

        {

            lcddev.wramcmd=0X22;

             lcddev.setxcmd=0X20;

            lcddev.setycmd=0X21;  

        }

    }else                 //横屏

    {                      

        lcddev.dir=1;    //横屏

        lcddev.width=320;

        lcddev.height=240;

        if(lcddev.id==0X9341||lcddev.id==0X5310)

        {

            lcddev.wramcmd=0X2C;

             lcddev.setxcmd=0X2A;

            lcddev.setycmd=0X2B;       

        }else if(lcddev.id==0X6804)     

        {

             lcddev.wramcmd=0X2C;

             lcddev.setxcmd=0X2B;

            lcddev.setycmd=0X2A; 

        }else if(lcddev.id==0x5510)

        {

            lcddev.wramcmd=0X2C00;

             lcddev.setxcmd=0X2A00;

            lcddev.setycmd=0X2B00; 

            lcddev.width=800;

            lcddev.height=480;

        }else if(lcddev.id==0X1963)

        {

            lcddev.wramcmd=0X2C;    //设置写入GROM的指令

            lcddev.setxcmd=0X2A;    //设置写x坐标指令

            lcddev.setycmd=0X2B;    //设置写y坐标指令

            lcddev.width=800;        //设置宽度800

            lcddev.height=480;        //设置宽度480

        {

            lcddev.wramcmd=0X22;

             lcddev.setxcmd=0X21;

            lcddev.setycmd=0X20;  

        }

        if(lcddev.id==0X6804||lcddev.id==0X5310)

        {      

            lcddev.width=480;

            lcddev.height=320;             

        }

    } 

    LCD_Scan_Dir(DFT_SCAN_DIR);    //默认扫描方向

}     


-------------------------------------------------------3 7个底层接口函数--------------------------------------------------------


 写寄存器值函数+写数据函数=写寄存器内容函数


5.读寄存器内容函数,发送寄存器地址,读取的数据返回给调用函数。


6开始写GRAM函数


7写GROM函数,开始写一些颜色值进去


这样一个函数就完成了写寄存器操作,因为有FSMC会自动完成


//写LCD数据

//data:要写入的值

void LCD_WR_DATA(vu16 data)

{      

    data=data;            //使用-O2优化的时候,必须插入的延时

    LCD->LCD_RAM=data;         

}


//读LCD数据

//返回值:读到的值

u16 LCD_RD_DATA(void)

{

    vu16 ram;            //防止被优化

    ram=LCD->LCD_RAM;    

    return ram;     

}  


//读寄存器

//LCD_Reg:寄存器地址

//返回值:读到的数据

u16 LCD_ReadReg(u16 LCD_Reg)

{                                           

    LCD_WR_REG(LCD_Reg);        //写入要读的寄存器序号

    delay_us(5);          

    return LCD_RD_DATA();        //返回读到的值

}            


//写寄存器内容函数

//LCD_Reg:寄存器地址

//LCD_RegValue:要写入的数据

void LCD_WriteReg(u16 LCD_Reg,u16 LCD_RegValue)

{    

    LCD->LCD_REG = LCD_Reg;        //写入要写的寄存器序号     

    LCD->LCD_RAM = LCD_RegValue;//写入数据                 

}       


//开始写GRAM

void LCD_WriteRAM_Prepare(void)

{

     LCD->LCD_REG=lcddev.wramcmd;      

}      


------------------------------------------------4 LCD初始化函数讲解---------------------------------------------------------------------------


初始化完GPIO后就要对FSMC 进行配置,


对应这些寄存器对FSMC进行初始化设置。


对FSMC进行读写时序的初始化,就是上面的这段代码,对应的寄存器是下面这两个寄存器。




接下来要配置的一个结构体



-----------------------------------------5坐标设置函数-----------------------------------------------------------------------


setxcmd指令  作用:设置x坐标         


x的高8位


x的低8位


setycmd


y坐标的高8位


y坐标的低8位


-------------------------------------------6 LCD画点函数-----------------------------------------------------------------------------


快速画点函数


------------------------------------7  LCD读点函数-----------------------------------------------


x y是读取的点的坐标,返回值是这个点的颜色。


读出来的是RGB565的格式。


----------------------------------------8 LCD字符显示函数 ------------------------------------------------------


叠加方式 保持底色   非叠加方式 没有底色,这里 减空格 是因为是从空格开始取模的。


csize是一个字节点阵集所对应的字节数。


csize 这个句话得到一个字符点阵集的字节数。 其中 size=12 、16、24四种值。


下一句num是字符的偏移量,假如我们要显示!,那么此时num就是2  又因为  “-”(减号)的mun是0,所以, “!”  的mun是1·


颜色由POINT_color


上述的字模数组在上面的 font.h里面。


生成上面的字符码可以用PCtoLCD2002


在LIENTEK后输入 要生成的字符,然后点击  生成字模,就可以自动生成上面的字符码了。


根据下面这个来进行取模设置。 输出方式是从上到下从坐到右


ASCII的字符  高度=宽度的一倍 例如:asc2_2412[95][36]   就是竖向的(字符高为24)那么字符宽就=12。那么这个字符共有3x8=24  也会是高度占3个字节,宽度=24/2=12   高度的字节数x宽度=3x12=36个字节。95代表这个数组中有95个字符。


生成是最高位在上,一直减到最低位。这样字节1的8位都有效,   字节2只有高4位有效,字节3 的8位都有效,字节4也只有高4位有效。这样以此类推。


看上面的字符数组   行坐标表示 一个 字符


--------------------------------------------------例程测试----------------------------------------------------------


推荐阅读

史海拾趣

Bivar公司的发展小趣事

随着环保意识的日益增强,电子行业对绿色环保的要求也越来越高。Bivar公司积极响应这一趋势,投入大量资源进行环保技术的研发和应用。公司推出了一系列绿色环保的电子产品,如低能耗、无毒害的电阻器和电容器等。这些产品不仅符合了市场需求,还为公司树立了良好的环保形象。

DAYLIGHT公司的发展小趣事

DAYLIGHT公司成立于XX年,由一群富有远见卓识的电子工程师和投资者共同创立。当时,电子行业正经历着快速的技术革新,市场对高效、可靠的电子产品需求日益增加。DAYLIGHT公司凭借其独特的技术优势和创新能力,成功开发出一系列高性能的电子产品,迅速在市场中立足。

Amphenol(安费诺)公司的发展小趣事

随着全球环保意识的提高,DAYLIGHT公司也开始注重环保和可持续发展。公司投入大量资金用于研发环保型电子产品和技术,并积极参与环保公益活动。此外,DAYLIGHT还制定了严格的环保标准和生产流程,确保其产品的生产和使用过程中对环境的影响最小化。

General Instrument公司的发展小趣事
如温度过高、湿度过大、灰尘积累等,影响保护器的正常工作性能。
Advanced Thermal Products Inc公司的发展小趣事

Advanced Thermal Products Inc公司成立于XXXX年,由一群热衷于热管理技术的工程师创立。在初创期,ATP公司便以独特的技术视角,专注于研发高效、创新的热管理产品。他们针对当时电子设备散热效果不佳的痛点,成功开发出了一款新型的热管理解决方案,为公司在行业内树立了良好的口碑。

聚辰(Giantec)公司的发展小趣事

自1994年(部分资料显示为1993年,但此处采用最新信息)成立以来,港源公司始终将技术创新视为企业发展的核心驱动力。公司专注于轻触开关、微动开关、AC/DC插座、变压器等开关零组件产品的研发,通过引进国内外先进技术,并自主成功研发了自动化生产设备和检测设备,实现了生产自动化,大幅提升了产品质量和生产效率。港源公司还积极参与国际技术交流与合作,与众多行业标杆客户长期紧密合作,能够尽早了解市场需求,快速响应并推出符合行业标准的新产品,从而引领了电子开关行业的发展方向。

问答坊 | AI 解惑

1602中文资料 附调试图片

LCD1602,大概介绍下 1602采用标准的16脚接口,其中:   第1脚:VSS为地电源 第2脚:VDD接5V正电源 第3脚:V0为液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高,对比度过高时会产生“鬼影”,使用时可以通 ...…

查看全部问答>

超高频无源RFID标签的一些关键电路的设计

来活跃下气氛 ,HOHO 本文针对超高频无源RFID 标签芯片的设计,给出了一些关键电路的设计考虑。文章从UHF RFID标签的基本组成结构入手,先介绍了四种电源恢复电路结构,以及在标准CMOS 工艺下制作肖特基二极管来组成倍压电路的解决方案。然后针对 ...…

查看全部问答>

深大DSP系统设计课件3

第三部分 TI DSP软件开发工具CCS的使…

查看全部问答>

wince开机内存占用问题?

如上图,红色指示区域是wince进入桌面后程序内存的使用量。有9M多呢 这样子正常吗?启动应用都没运行呢! 哪位兄台解答一下啊? …

查看全部问答>

请问如何实现将抓取的图片通过GPRS模块(mc39i)进行无线传输

拨号上网的功能已经实现了 操作系统是linux,最后要移植到arm-linux上去 不知怎么编程能才能实现两端的文件发送和接受这种功能 哪位做过该方面的麻烦不吝赐教下,说一下思路或流程 最好详细点,谢谢…

查看全部问答>

Visual studio 2005上的wince5.0嵌入式开发,高手们进来看看啊

Visual studio 2005上的wince5.0嵌入式开发,就是在PDA上播放个语音文件,    [System.Runtime.InteropServices.DllImport(\"winmm.dll\")]         public static extern long PlaySound(String lpszNam ...…

查看全部问答>

WinCE 6.0 离线安装包 共包含多少个文件啊

     我下载的离线安装包,安装后始终是无法建立OS project,提示WINCEROOR无效,难道是我的离线安装包的问题?…

查看全部问答>

STM8S-DISCOVERY上的stlink可以用在其他板子上吗?

                                 rt…

查看全部问答>

【求助】问下大家,到这一步了,该如何继续?

手头有一块S3C2410的开发板   我想移植UCOS系统 现在已完成的工作:   板子的VIVI已烧写好 UCOS系统代码也已用ADS编译通过   那么接下来该怎么做呢? 该如何把UCOS移植到板子上? 我编写了一个LED的测试实验,该如何一上 ...…

查看全部问答>

易电源学习心得

低輸出電壓紋波 納米模塊在 2 MHz 的固定開關頻率下運\行, 可實現低輸出紋波和高效率的平衡。該模塊 還具有低 ESR 陶瓷電容器的穩定性。使用 一個 10 μF X5R 0805 輸出電容的標準解決方案可實現低於 10mVp-p 的輸出紋波,從而可替代需要較高效率 ...…

查看全部问答>