ImageVerifierCode 换一换
格式:DOCX , 页数:22 ,大小:317.37KB ,
资源ID:10442715      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10442715.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(基于STM32的LCD操作.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

基于STM32的LCD操作.docx

1、基于STM32的LCD操作嵌入式系统课程报告基于STM32勺LCD操作姓名组长:曾昭智组员:邓宁、张小扬、牛洪澄学院光电学院班级电信2班、3班完成日期2014.05.291原理方案(功能框图介绍) 12、 电路连线及资源分配 23、 所用主要器件或模块说明 34、 程序流程图 45、 调试心得 56、源代码1.TFT-LCD 原理1.1TFT-LCD 简介TFT-LCD即薄膜晶体管液晶显示器。其英文全称为:Thin Film Transistor-Liquid Crystal Display 。TFT-LCD与无源 TN-LCD STN-LC的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有

2、一个薄膜晶体管 (TFT),可 有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关, 因此大 大提高了图像质量。TFT-LCD也被叫做真彩液晶显示器。上一节介绍了 OLE模块,这一节,我们给大家介绍 ALIENTEK TFTLC模块, 该模块有如下特点:1,2.4 28 两种大小的屏幕可选。2,320X 240的分辨率。3,16位真彩显示。4,自带触摸屏,可以用来作为控制输入。5,通用的接口,除了 ALIENTEK MiniSTM3开发板,该液晶模块还可以使用 在优异特、STMSKY红牛等开发板上。本节,我们以2.8寸的ALIENTEKTFTLCD模块为例介绍,该模块采用的是显尚光

3、 电的 DST2001PHTFTLCDDST2001P的控制器为 ILI9320,采用 26万色的 TFTLCD 屏,分辨率为320X 240,采用16位的80并口。1.280 并口ALIENTEK TFTLCD模块采用80并口口方与外部链接,采用16位数据线(低 了速度太慢,用彩色就没什么效果了)。该模块的80并口有如下一些信号线:CS: TFTLCD片选信号。WR :向TFTLCD写入数据。RD:从TFTLCD读取数据。D15:0 : 16位双向数据线。RST:硬复位 TFTLCD。RS:命令/数据标志(0,读写命令;1,读写数据)。TFTLCD模块的RST信号线和OLED模块一样,也是直

4、接接到 STM32的复位脚上,并 不由软件控制,这样可以省下来一个10 口。另外我们还需要一个背光控制线来控制 TFTLCD 的背光。所以,我们总共需要的 IO 口数目为21个。1.3ILI9320模块的控制器为ILI9320,该控制器自带显存, 其显存总大小为172820 (240*320*18/8 ), 即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为 565方式,如 下图所示:1st Transfer1.4GRAM显示方向设置1.5TFTLCD显示需要的相关设置步骤如下(1) 设置STM3与 TFTLC模块相连接的10。这一步,先将我们与TFTLC模块相连的I0

5、口设置为输出,具体使用哪些I0 口, 这里需要根据连接电路以及TFTLC模块的设置来确定。(2) 初始化TFTLC模块。其实这里就是上和上面OLE模块的初始化过程差不多。通过向TFTLC写入一 系列的设置,来启动TFTLC的显示。为后续显示字符和数字做准备。(3) 通过函数将字符和数字显示到TFTLC模块上。这里就是通过我们设计的程序,将要显示的字符送到 TFTLC模块就可以了, 这些函数将在软件设计部分向大家介绍。通过以上三步,我们就可以使用ALIENTEKTFTLCD模块来显示字符和数字了, 并且可以显示各种颜色的背景。2.电路连线及资源分配MiniSTM32 开发板底板的LCD接口和AL

6、IENTEK TFTLC模块直接可以对插 连接如下图:LCD_LED 对应 PC10;LCD_CS 对应 PC9;LCD _RS 对应 PC8;LCD _WR 对应 PC7;LCD _RD 对应 PC6;LCD _D17:1对应 PB15:0;这些线的连接,MiniSTM32的内部已经连接好了,我们只需要将 就好了。3.所用主要器件或模块说明3.1TFT-LCD模块原理图L5 ;. TLWLCDjrt, LCDM MT、 i 尿DBDB4 屉-rarDBECOjGDSH5FT斑L0X-对订wIL2X-ISL-LseLiKCSSLS迓IL6NC3L*肚LCMIDNCLEDM LED KILEDK

7、2 LBWUZATETLBTFT2LCDBtSTDDELb cLB_E5 LCp-TLE血D3:2DB1JDB2 ES4匸曰二VCC VC TO SCOOXDLED3C列 LgE0H匸学: 対曰沁咋1叱:八轧匸H熬丄E&I feT:rfa37:1.J 7 PEyII T_CLKif m14 7沁墾 u尸 口 丁EBPLCD 上 3BCLK RDMT QD1co: neiDB DW DD! DBL CBIJ BIS EM-LtEC .STOU GXDKD Btvnp卜険 37JFE?: MDT C3 CLK二_叱: TqLCtTj LI时DB2 dSTTT niTiblJ.w咖 iT CLK3

8、- HM f”:T 百3.2 TFT-LCD模块接口图LCD!LCD CS12 LCD RSHD3! rcnRST5DB27DBl9DB6iiDBSbmDBllD131317DR IS19DBl?21(X3.3GND27T 冈 订氏 TTs295T33LCD CSRSWR/CLKRDRSTDBlDB2DBSDBtDB5DBGDB7DBSDB10DR1 tDR 12DB13DD14DB15DD16DB17GNDBLVDD3 3VJUB.3GNDGNDBL_VWnsoXfOSTT PENMOT CSCLK4IX D RD6DBlDB3ToDB5ijl厂DB7nr16l)H12 iDD1420DB1

9、622GND VCC3330 Ty:31 T CLKIF I LCD4.程序流程图写入数据读取数据读取GRAM5.调试心得调试之前需将MiniSTM32开发板连接至PC并且安装好相应的驱动程序;在调试程序的时候将错误程序下载到 MiniSTM32中会导致LCD屏无法打开或者是白屏的现象,程序与开发板不兼容也会产生同样现象;并且在使用 Keil调试的时 候没有进行正确的设置也会导致下载程序无法顺利进行。 所以在调试的时候要确 保程序的正确及对Keil的正确的使用才能顺利完成实验。):调试结果(到屏幕的背景是不停切换的AES常6.源代码6.1LCD_WR_RE函数:通过80并口向LCD模块写入8位

10、的寄存器命令 #if LCD_FAST_IO=1 / 快速 10void LCD_WR_REG(u8 data)LCD_RS_CLR;/写 地址LCD_CS_CLR;DATAOUT(data);LCD_WR_CLR;LCD_WR_SET;LCD_CS_SET;#else 正常 IO/写寄存器函数void LCD_WR_REG(u8 data)LCD_RS=O; 写地址LCD_CS=0;DATAOUT(data);LCD_WR=0;LCD_WR=1;LCD_CS=1;#en dif6.2LCD_READREG用来读取某个寄存器的值/读寄存器u16 LCD_ReadReg(u8 LCD_Reg)u

11、16 t;LCD_WR_REG(LCD_Reg);写入要读的寄存器号GPIOB-CRL=OX88888888; /PB0-7 上拉输入GPIOB-CRH=OX88888888; /PB8-15 上拉输入GPIOB-ODR=0XFFFF; / 全部输出高#if LCD_FAST_IO=1 / 快速 IOLCD_RS_SET;LCD_CS_CLR;/读取数据(读寄存器时,并不需要读2次)LCD_RD_CLR;delay_us(5);/FOR 8989,延时 5usLCD_RD_SET;t=DATAIN;LCD_CS_SET;#elseLCD_RS=1;LCD_CS=O;/读取数据(读寄存器时,并不

12、需要读2次)LCD_RD=O;LCD_RD=1;t=DATAIN;LCD_CS=1;#en difGPIOB-CRL=OX33333333; /PBO-7 上拉输出GPIOB-CRH=OX33333333; /PB8-15 上拉输出GPIOB-ODR=OXFFFF; / 全部输出高return t;6.3LCD_ReadRAM用来读取 GRA啲值/读取个某点的颜色值x:0239y:0319/返回值:此点的颜色u16 LCD_ReadPoi nt(u16 x,u16 y) _u16 t;if(x=LCD_W|y=LCD_H)return 0;/ 超过了范围,直接返回 LCD_SetCursor(

13、x,y);LCD_WR_REG(R34); / 选择 GRAI地址GPIOB-CRL=OX88888888; /PBO-7 上拉输入GPIOB-CRH=OX88888888; /PB8-15 上拉输入GPIOB-ODR=OXFFFF; / 全部输出高#if LCD_FAST_IO=1 / 快速 IOLCD_RS_SET;LCD_CS_CLR;/读取数据(读GRA时,需要读2次)LCD_RD_CLR;LCD_RD_SET;delay_us(2);/FOR 932O,延时 2us/dummy READLCD_RD_CLR;delay_us(2);/FOR 8989,延时 2usLCD_RD_SET

14、;t=DATAIN;LCD_CS_SET;#elseLCD_RS=1;LCD_CS=O;/读取数据(读GRAM,需要读2次)LCD_RD=O;LCD_RD=1;/dummy READLCD_RD=O;LCD_RD=1;t=DATAIN;LCD_CS=1;#en difGPIOB-CRL=OX33333333; /PBO-7 上拉输出GPIOB-CRH=OX33333333; /PB8-15 上拉输出GPIOB-ODR=OXFFFF; / 全部输出高 if(DeviceCode=0X4531|DeviceCode=0X8989|DeviceCode=0XB505)ret urn t;/ 这几种I

15、C直接返回颜色值else return LCD_BGR2RGB(t);6.4LCD_SetCursor :用于设置坐标void LCD_SetCursor(u16 Xpos, u16 Ypos) _#if USE_HORIZONTAL=1if(DeviceCode=0X8989)LCD_WriteReg(0X4E, Ypos);LCD_WriteReg(0X4F, 319-Xpos);elseLCD_WriteReg(R32, Ypos);LCD_WriteReg(R33, 319-Xpos);#elseif(DeviceCode=0X8989)LCD_WriteReg(0X4E, Xpos)

16、;LCD_WriteReg(0X4F, Ypos);elseLCD_WriteReg(R32, Xpos);LCD_WriteReg(R33, Ypos);#en dif6.5POINT_COLOR 画点函数 void LCD_DrawPoi nt(u16 x,u16 y) LCD_SetCursor(x,y); 设置光标位置 LCD_WR_REG(R34)开始写入 GRAM LCD_WR_DATA(POINT_COLOR);6.6LCD_ShowCha:显示字符/在指定位置显示一个字符x:0234y:0308/num:要显示的字符:-/size: 字体大小12/16/mode:叠加方式(1)

17、还是非叠加方式(0)void LCD_ShowChar(u16 x,u16 y,u8 num,u8 size,u8 mode) _#if USE_HORIZONTAL=1#defi ne MAX_CHAR_POSX 312#defi ne MAX_CHAR_POSY 232#else#defi ne MAX_CHAR_POSX 232#defi ne MAX_CHAR_POSY 312#en difu8 temp;u8 pos,t;u16 x0=x;u16 colortemp=POINT_COLOR;if(xMAX_CHAR_POSX|yMAX_CHAR_POSY)return;/设置窗口nu

18、m=n um- ;/得到偏移后的值if(!mode) / 非叠加方式for(pos=0;possize;pos+)if(size=12)temp=asc2_1206 nu mpos; 调用 1206 字体else temp=asc2_1608numpos; / 调用 1608 字体for(t=0;t=1;X+;X=X0;y+;else叠加方式for(pos=0;possize;pos+)调用1206字体 调用1608字体画一个点if(size=12)temp=asc2_1206 nu mpos; else temp=asc2_1608 numpos; /for(t=0;t=1;POINT_CO

19、LOR=colortemp;6.7LCD_Init (简化):初始化模块void LCDn it(void) _u16 DeviceCode;RCC-APB2ENR|=1APB2ENR|=1APB2ENR|=1MAPR=0X04000000; /关闭 JTAG/PORTC61复用推挽输出GPIOC-CR H&=0XFFFFF000;GPIOC-CRH|=0X00000333;GPIOC-CRL&=0X00FFFFFF;GPIOC-CRL|=0X33000000;GPIOC-ODR|=0X07C0;/PORTB推挽输出GPIOB-CRH=0X33333333;GPIOB-CRL=0X333333

20、33;GPIOB-ODR=0XFFFF;Delay(5); / delay 50 msLCD_WriteReg(0x0000, 0x0001);Delay(5); / delay 50 msDeviceCode = LCD_ReadReg(0x0000);/printf(ID:%dn , DeviceCode);if(DeviceCode=0x9325|DeviceCode=0x9328)/ILI9325/9325/9328初始化代码else if(DeviceCode=0x9320|DeviceCode=0x9300)/9320/9300初始化代码else if(DeviceCode=0x1

21、505)/1505初始化代码else if(DeviceCode=0x8989)/8989初始化代码Delay(5000);LCD_Clear(WHITE);6.8输入以下代码(简化代码)来控制I/O 口,当使用快速模式来控制的时 候,就可以有效提升速度。另外这段代码对颜色和驱动器的寄存器进行了很多宏 定义:#ifndef _LCD_H#define _LCD_H#i nclude sys.h#in clude stdlib.h/TFTLCD部分外要调用的函数extern u16 POINT_COLOR; 默认红色extern u16 BACK_COLOR; /背景颜色.默认为白色/- LCD

22、 端口定义 片选端口 PC9 数据/命令PC8写数据PC7读数据PC6#define LCD_LED PCout(10) /LCD 背光 PC10#defi ne LCD_CS PCout(9) / #define LCD_RS PCout(8) / #defi ne LCD_WR PCout(7) / #defi ne LCD_RD PCout (6) / /PB015,作为数据线#define DATAOUT(x) GPIOB-ODR=x; / 数据输出#defi ne DATAIN GPIOB-IDR; / 数据输入/画笔颜色#defi ne WHITE 0xFFFF#defi ne B

23、LACK 0x0000#defi ne BLUE 0x001F#defi ne RED 0xF800#defi ne MAGENTA 0xF81F#define GREEN 0x07E0#define CYAN 0x7FFF#define YELLOW 0xFFE0#define BROWN 0XBC40 / 棕色#define BRRED 0XFC07 / 棕红色#define GRAY 0X8430 / 灰色#define LGRAY 0XC618 / 浅灰色extern u16 BACK_COLOR POINT_COLOR ;void LCDn it(void);void LCD_Cle

24、ar(u16 Color);void LCD_SetCursor(u8 Xpos , u16 Ypos);void LCD_DrawPoint(u8 x , u16 y); 画点void Draw_Circle(u8 x0 , u16 y0 , u8 r);void LCD_DrawLine(u8 x1 , u16 y1 , u8 x2 , u16 y2);void LCD_DrawRectangle(u8 x1 , u16 y1 , u8 x2 , u16 y2);void LCD_Fill(u8 xsta , u16 ysta , u8 xe nd , u16 ye nd , u16 co

25、lor);void LCD_ShowChar(u8 x , u16 y , u8 num, u8 size , u8 mode);/ 显示一 个字符 一void LCD_ShowNum(u8 x u8 y , u32 num, u8 len , u8 size); / 显示一个数字void LCD_ShowStri ng(u8 x , u16 y , con st u8 *p); / 显示一个字符串,16字体void LCD_WriteReg(u8 LCD_Reg, u16 LCD_RegValue);u16 LCD_ReadReg(u8 LCD_Reg);void LCD_WriteRAM_

26、Prepare(void);void LCD_WriteRAM(u16 RGB_Code);u16 LCD_ReadRAM(void);/9320/9325 LCD 寄存器#define R0 0x00#define R1 0x01#define R2 0x02/寄存器定义区#define R192 0xC0#define R193 0xC1#define R229 0xE5#en dif6.9 Test中的main函数:该部分代码将显示一些固定的字符,然后不停 的切换背景颜色,每1s切换一次。而LED0也会不停的闪烁,指示程序已经在运 行int main(v oid)u8 x=0;Syste

27、mI ni t();delaynit(72); / 延时初始化NVIC_Co nfigurati on ();uart_i ni t(9600);LED_I ni t();KEYnit();LCD_I ni t();POINT_COLOR=RED;while(1)switch(x)case 0:LCD_Clear(WHITE);break;case 1:LCD_Clear(BLACK);break;case 2:LCD_Clear(BLUE);break;case 3:LCD_Clear(RED);break;case 4:LCD_Clear(MAGENTA);break;case 5:LCD_Clear(GREEN);break;case 6:LCD_Clear(CYAN);break;case 7:LCD_Clear(YELLOW);break;case 8:LCD_Clear(BRRED);break;case 9:LCD_Clear(GRAY);break;case 10:LCD_Clear(LGRAY);break;case 11:LCD_Clear(BROWN);break; _POI

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1