基于STM32的LCD操作Word格式文档下载.docx

上传人:b****1 文档编号:3491636 上传时间:2023-05-01 格式:DOCX 页数:20 大小:962.34KB
下载 相关 举报
基于STM32的LCD操作Word格式文档下载.docx_第1页
第1页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第2页
第2页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第3页
第3页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第4页
第4页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第5页
第5页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第6页
第6页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第7页
第7页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第8页
第8页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第9页
第9页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第10页
第10页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第11页
第11页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第12页
第12页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第13页
第13页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第14页
第14页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第15页
第15页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第16页
第16页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第17页
第17页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第18页
第18页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第19页
第19页 / 共20页
基于STM32的LCD操作Word格式文档下载.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

基于STM32的LCD操作Word格式文档下载.docx

《基于STM32的LCD操作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于STM32的LCD操作Word格式文档下载.docx(20页珍藏版)》请在冰点文库上搜索。

基于STM32的LCD操作Word格式文档下载.docx

ALIENTEKTFTLCD模块采用80并口口方与外部链接,采用16位数据线(低了速度太慢,用彩色就没什么效果了)。

该模块的80并口有如下一些信号线:

CS:

TFTLCD片选信号。

WR:

向TFTLCD写入数据。

RD:

从TFTLCD读取数据。

D[15:

0]:

16位双向数据线。

RST:

硬复位TFTLCD。

RS:

命令/数据标志(0,读写命令;

1,读写数据)。

TFTLCD模块的RST信号线和OLED模块一样,也是直接接到STM32的复位脚上,并不由软件控制,这样可以省下来一个IO口。

另外我们还需要一个背光控制线来控制TFTLCD的背光。

所以,我们总共需要的IO口数目为21个。

1.3ILI9320

模块的控制器为ILI9320,该控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。

模块的16位数据线与显寸的对应关系为565方式,如下图所示:

1.4GRAM显示方向设置

1.5TFTLCD显示需要的相关设置步骤如下

(1)设置STM32与TFTLCD模块相连接的IO。

这一步,先将我们与TFTLCD模块相连的IO口设置为输出,具体使用哪些IO口,这里需要根据连接电路以及TFTLCD模块的设置来确定。

(2)初始化TFTLCD模块。

其实这里就是上和上面OLED模块的初始化过程差不多。

通过向TFTLCD写入一系列的设置,来启动TFTLCD的显示。

为后续显示字符和数字做准备。

(3)通过函数将字符和数字显示到TFTLCD模块上。

这里就是通过我们设计的程序,将要显示的字符送到TFTLCD模块就可以了,这些函数将在软件设计部分向大家介绍。

通过以上三步,我们就可以使用ALIENTEKTFTLCD模块来显示字符和数字了,并且可以显示各种颜色的背景。

2.电路连线及资源分配

MiniSTM32开发板底板的LCD接口和ALIENTEKTFTLCD模块直接可以对插,连接如下图:

图中绿色线圈出来的部分就是连接TFTLCD模块的接口,这里在硬件上,TFTLCD模块与MiniSTM32开发板的IO口对应关系如下:

LCD_LED对应PC10;

LCD_CS对应PC9;

LCD_RS对应PC8;

LCD_WR对应PC7;

LCD_RD对应PC6;

LCD_D[17:

1]对应PB[15:

0];

这些线的连接,MiniSTM32的内部已经连接好了,我们只需要将TFTLCD模块插上去就好了。

3.所用主要器件或模块说明

3.1TFT-LCD模块原理图

3.2TFT-LCD模块接口图

4.程序流程图

5.调试心得

调试之前需将MiniSTM32开发板连接至PC并且安装好相应的驱动程序;

在调试程序的时候将错误程序下载到MiniSTM32中会导致LCD屏无法打开或者是白屏的现象,程序与开发板不兼容也会产生同样现象;

并且在使用Keil调试的时候没有进行正确的设置也会导致下载程序无法顺利进行。

所以在调试的时候要确保程序的正确及对Keil的正确的使用才能顺利完成实验。

调试结果(到屏幕的背景是不停切换的):

6.源代码

6.1LCD_WR_REG函数:

通过80并口向LCD模块写入8位的寄存器命令

#ifLCD_FAST_IO==1//快速IO

voidLCD_WR_REG(u8data)

{

LCD_RS_CLR;

//写地址

LCD_CS_CLR;

DATAOUT(data);

LCD_WR_CLR;

LCD_WR_SET;

LCD_CS_SET;

}

#else//正常IO

//写寄存器函数

LCD_RS=0;

LCD_CS=0;

LCD_WR=0;

LCD_WR=1;

LCD_CS=1;

}

#endif

6.2LCD_READREG:

用来读取某个寄存器的值

//读寄存器

u16LCD_ReadReg(u8LCD_Reg)

{

u16t;

LCD_WR_REG(LCD_Reg);

//写入要读的寄存器号

GPIOB->

CRL=0X88888888;

//PB0-7上拉输入

CRH=0X88888888;

//PB8-15上拉输入

ODR=0XFFFF;

//全部输出高

LCD_RS_SET;

LCD_CS_CLR;

//读取数据(读寄存器时,并不需要读2次)

LCD_RD_CLR;

delay_us(5);

//FOR8989,延时5us

LCD_RD_SET;

t=DATAIN;

LCD_CS_SET;

#else

LCD_RS=1;

LCD_CS=0;

LCD_RD=0;

LCD_RD=1;

LCD_CS=1;

CRL=0X33333333;

//PB0-7上拉输出

CRH=0X33333333;

//PB8-15上拉输出

returnt;

}

6.3LCD_ReadRAM:

用来读取GRAM的值

//读取个某点的颜色值

//x:

0~239

//y:

0~319

//返回值:

此点的颜色

u16LCD_ReadPoint(u16x,u16y)

{

if(x>

=LCD_W||y>

=LCD_H)return0;

//超过了范围,直接返回

LCD_SetCursor(x,y);

LCD_WR_REG(R34);

//选择GRAM地址

//读取数据(读GRAM时,需要读2次)

delay_us

(2);

//FOR9320,延时2us

//dummyREAD

//FOR8989,延时2us

LCD_RD=1;

//dummyREAD

//全部输出高

if(DeviceCode==0X4531||DeviceCode==0X8989||DeviceCode==0XB505)returnt;

//这几种IC直接返回颜色值

elsereturnLCD_BGR2RGB(t);

6.4LCD_SetCursor:

用于设置坐标

voidLCD_SetCursor(u16Xpos,u16Ypos)

#ifUSE_HORIZONTAL==1

if(DeviceCode==0X8989)

{

LCD_WriteReg(0X4E,Ypos);

LCD_WriteReg(0X4F,319-Xpos);

}else

LCD_WriteReg(R32,Ypos);

LCD_WriteReg(R33,319-Xpos);

}

LCD_WriteReg(0X4E,Xpos);

LCD_WriteReg(0X4F,Ypos);

LCD_WriteReg(R32,Xpos);

LCD_WriteReg(R33,Ypos);

}

#endif

6.5POINT_COLOR:

画点函数

voidLCD_DrawPoint(u16x,u16y)

//设置光标位置

//开始写入GRAM

LCD_WR_DATA(POINT_COLOR);

6.6LCD_ShowChar:

显示字符

//在指定位置显示一个字符

0~234

0~308

//num:

要显示的字符:

"

"

--->

~"

//size:

字体大小12/16

//mode:

叠加方式

(1)还是非叠加方式(0)

voidLCD_ShowChar(u16x,u16y,u8num,u8size,u8mode)

#ifUSE_HORIZONTAL==1

#defineMAX_CHAR_POSX312

#defineMAX_CHAR_POSY232

#else

#defineMAX_CHAR_POSX232

#defineMAX_CHAR_POSY312

u8temp;

u8pos,t;

u16x0=x;

u16colortemp=POINT_COLOR;

MAX_CHAR_POSX||y>

MAX_CHAR_POSY)return;

//设置窗口

num=num-'

'

;

//得到偏移后的值

if(!

mode)//非叠加方式

for(pos=0;

pos<

size;

pos++)

{

if(size==12)temp=asc2_1206[num][pos];

//调用1206字体

elsetemp=asc2_1608[num][pos];

//调用1608字体

for(t=0;

t<

size/2;

t++)

{

if(temp&

0x01)POINT_COLOR=colortemp;

elsePOINT_COLOR=BACK_COLOR;

LCD_DrawPoint(x,y);

temp>

>

=1;

x++;

}

x=x0;

y++;

}

}else//叠加方式

0x01)LCD_DrawPoint(x+t,y+pos);

//画一个点

temp>

}

POINT_COLOR=colortemp;

6.7LCD_Init(简化):

初始化模块

voidLCD_Init(void)

u16DeviceCode;

RCC->

APB2ENR|=1<

<

3;

//先使能外设PORTB时钟

4;

//先使能外设PORTC时钟

0;

//开启辅助时钟

AFIO->

MAPR=0X04000000;

//关闭JTAG

//PORTC6~10复用推挽输出

GPIOC->

CRH&

=0XFFFFF000;

CRH|=0X00000333;

CRL&

=0X00FFFFFF;

CRL|=0X33000000;

ODR|=0X07C0;

//PORTB推挽输出

GPIOB->

Delay(5);

//delay50ms

LCD_WriteReg(0x0000,0x0001);

DeviceCode=LCD_ReadReg(0x0000);

//printf("

ID:

%d\n"

,DeviceCode);

if(DeviceCode==0x9325||DeviceCode==0x9328)//ILI9325

……//9325/9328初始化代码

elseif(DeviceCode==0x9320||DeviceCode==0x9300)

……//9320/9300初始化代码

elseif(DeviceCode==0x1505)

{……//1505初始化代码

elseif(DeviceCode==0x8989)

……//8989初始化代码

Delay(5000);

LCD_Clear(WHITE);

6.8输入以下代码(简化代码)来控制I/O口,当使用快速模式来控制的时候,就可以有效提升速度。

另外这段代码对颜色和驱动器的寄存器进行了很多宏定义:

#ifndef__LCD_H

#define__LCD_H

#include"

sys.h"

stdlib.h"

//TFTLCD部分外要调用的函数

externu16POINT_COLOR;

//默认红色

externu16BACK_COLOR;

//背景颜色.默认为白色

//-----------------LCD端口定义----------------

#defineLCD_LEDPCout(10)//LCD背光PC10

#defineLCD_CSPCout(9)//片选端口PC9

#defineLCD_RSPCout(8)//数据/命令PC8

#defineLCD_WRPCout(7)//写数据PC7

#defineLCD_RDPCout(6)//读数据PC6

//PB0~15,作为数据线

#defineDATAOUT(x)GPIOB->

ODR=x;

//数据输出

#defineDATAINGPIOB->

IDR;

//数据输入

//画笔颜色

#defineWHITE0xFFFF

#defineBLACK0x0000

#defineBLUE0x001F

#defineRED0xF800

#defineMAGENTA0xF81F

#defineGREEN0x07E0

#defineCYAN0x7FFF

#defineYELLOW0xFFE0

#defineBROWN0XBC40//棕色

#defineBRRED0XFC07//棕红色

#defineGRAY0X8430//灰色

#defineLGRAY0XC618//浅灰色

externu16BACK_COLOR,POINT_COLOR;

voidLCD_Init(void);

voidLCD_Clear(u16Color);

voidLCD_SetCursor(u8Xpos,u16Ypos);

voidLCD_DrawPoint(u8x,u16y);

//画点

voidDraw_Circle(u8x0,u16y0,u8r);

voidLCD_DrawLine(u8x1,u16y1,u8x2,u16y2);

voidLCD_DrawRectangle(u8x1,u16y1,u8x2,u16y2);

voidLCD_Fill(u8xsta,u16ysta,u8xend,u16yend,u16color);

voidLCD_ShowChar(u8x,u16y,u8num,u8size,u8mode);

//显示一个字符

voidLCD_ShowNum(u8x,u8y,u32num,u8len,u8size);

//显示一个数字

voidLCD_ShowString(u8x,u16y,constu8*p);

//显示一个字符串,16字体

voidLCD_WriteReg(u8LCD_Reg,u16LCD_RegValue);

u16LCD_ReadReg(u8LCD_Reg);

voidLCD_WriteRAM_Prepare(void);

voidLCD_WriteRAM(u16RGB_Code);

u16LCD_ReadRAM(void);

//9320/9325LCD寄存器

#defineR00x00

#defineR10x01

#defineR20x02

……//寄存器定义区

#defineR1920xC0

#defineR1930xC1

#defineR2290xE5

6.9Test中的main函数:

该部分代码将显示一些固定的字符,然后不停的切换背景颜色,每1s切换一次。

而LED0也会不停的闪烁,指示程序已经在运行

intmain(void)

u8x=0;

SystemInit();

delay_init(72);

//延时初始化

NVIC_Configuration();

uart_init(9600);

LED_Init();

KEY_Init();

LCD_Init();

POINT_COLOR=RED;

while

(1)

{

switch(x)

case0:

break;

case1:

LCD_Clear(BLACK);

case2:

LCD_Clear(BLUE);

case3:

LCD_Clear(RED);

case4:

LCD_Clear(MAGENTA);

case5:

LCD_Clear(GREEN);

case6:

LCD_Clear(CYAN);

case7:

LCD_Clear(YELLOW);

case8:

LCD_Clear(BRRED);

case9:

LCD_Clear(GRAY);

case10:

LCD_Clear(LGRAY);

case11:

LCD_Clear(BROWN);

POINT_COLOR=RED;

LCD_ShowString(30,50,"

MiniSTM32^_^"

);

LCD_ShowString(30,70,"

2.4'

/2.8'

TFTLCDTEST"

LCD_ShowString(30,90,"

ATOM@ALIENTEK"

LCD_ShowString(30,110,"

2010/12/30"

x++;

if(x==12)x=0;

LED0=!

LED0;

delay_ms(1000);

}

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2