完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
/******
*@file 3.2寸LCD显示.doc *@author 乌云踏雪 *@date 2016/6/26 *@brief *******/ 首先配置GPIO口,将FSMC(静态存储控制器)数据线,控制线和用到的地址线初始化为复用推挽输出,LCD的复位和背光控制脚配置为通用推挽输出。 初始化FSMC。由于我们使用的LCD是以ILI9341来驱动,而ILI9341使用8080接口与外界通信。FSMC和8080的通讯时序完全相同,只有FSMC的寻址线和LCD的数据/命令口对不上。STM32的FSMC接口拥有26位的地址总线用来寻址,选取挂载在总线上的外部设备,而ILI9341只需要一位数据/命令控制线。我们可以将此线挂载在FSMC的一根地址上,将数据写不同地址就可实现对LCD的数据/命令控制。(注:数据为16位时,FSMC地址右移一位对齐) 然后就是参考ILI9341的数据手册来控制LCD了。ILI9341有几个比较重要的寄存器: 0X36 控制ILI9341的读写方向 0X2A X坐标设置指令 0X2B Y坐标设置指令 0X2C 写GRAM(显存)指令 0X2E 读GRAM指令 0X36控制着ILI9341的读写方向,即它也控制着LCD写像素点的方向,为了方便操作,我将几种常用的方式写成一个枚举类型(enummersted type)的结构体,即增加程序可读性,又比宏更灵活。 typedef enum { NOTE=0xc8, //字符 CAMERA=0x68, //摄像头 BMP=0x28, //图片.bmp }LCD_Scan_Mode; 0X2C根据设定好的坐标,写不同颜色。 0X2E读取设定坐标的颜色信息。 接下来分析一下程序 void ILI9341_Write_Cmd(uint16_t cmmond) // { *(__IO uint16_t *)((uint32_t)0x6C000000)=cmmond; } void ILI9341_Write_Data(uint16_t data) // { *(__IO uint16_t *)((uint32_t)0x6D000000)=data; } 这就是整个程序的精髓,根据前文,我们已经知道FSMC接口和8080的关系,假设将ILI9341的数据/命令端接至PE2(FSMC地址线的第23位)上,而当FSMC为16位数据模式时,地址要右移一位对齐,我们只要向地址第24位不同的地址写数据,就会造成PE2的高低不同,即完成了数据/命令的选择。 例:0X6C000000的第24位是0 0X6D000000的第24位是1 则向这两个地址写数据就代表着不同的含义。(数据线是共用的) 这样最基本的底层函数就码好了,而接下来的程序也就是不断调用底层函数再封装成函数供更高层的函数调用。(如果把函数写的更有兼容性,那这就是库函数的雏形了嘛,不过兼容的代价是拉低效率) 在这儿分析一下显示字符的思路:首先设定起始坐标和终止坐标,我们称之为“开窗”,因为ILI9341的GRAM支持地址自动递增,例如:我们设置起始(0,0)和终点(6,12)坐标时,即开了一个12X6的窗,GRAM的地址只会在此矩形区域内变化,也就意味着“开窗”之后不必在换行时软件改变坐标,这就提高了代码的效率;接下来就可以向“窗口”里的像素点填充颜色了,根据扫描方式的不同在取模软件上取字模,然后将字模与1与运算,再讲字模数值右移一位,直至将此数运算完成: If(Temp&0x01){填字符颜色} Else{填背景色} Temp>>=1 这就是一个像素点的操作,程序里只要在外层加上for循环使用字模数组里不同的值,不需要再次设置坐标。 /**** *水平有限,难免疏漏,欢迎各位指正 |
|
相关推荐
4 个讨论
|
|
活干的真的很好。
|
|
|
|
|
|
2105 浏览 1 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
1941 浏览 3 评论
4537 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
2084 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
2599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 18:36 , Processed in 0.847428 second(s), Total 48, Slave 40 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号