




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
嵌入式系统原理及应用
项目化教程项目8显示屏控制设计与实现学习目标1.掌握TFT-LCD显示原理;2.利用TFT-LCD实现汉字和彩色的显示方法;3.掌握OLED显示原理;4.利用OLED实现ASCII字符的显示。目录8.1任务14TFT-LCD显示8.2任务15OLED显示1、TFTLCD驱动原理-TFTLCD简介TFTLCD即薄膜晶体管液晶显示器。它与无源TN-LCD、STN-LCD的简单矩阵不同,它在液晶显示屏的每一个象素上都设置有一个薄膜晶体管(TFT),可有效地克服非选通时的串扰,使显示液晶屏的静态特性与扫描线数无关,因此大大提高了图像质量。TFTLCD具有:亮度好、对比度高、层次感强、颜色鲜艳等特点。是目前最主流的LCD显示器。广泛应用于电视、手机、电脑、平板等各种电子产品。8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-模块简介ALINETEKTFTLCD模块介绍ALIENTEK提供丰富的TFTLCD模块型号,供大家选择,目前有以下型号可选:1,ATK-2.8寸TFTLCD模块
分辨率:240*320,驱动IC:ILI9341,电阻触摸屏,16位并口驱动2,ATK-3.5寸TFTLCD模块分辨率:320*480,驱动IC:NT35310,电阻触摸屏,16位并口驱动3,ATK-4.3寸TFTLCD模块分辨率:480*800,驱动IC:NT35510,电容触摸屏,16位并口驱动4,ATK-7寸TFTLCD模块(V1版本)
分辨率:480*800,驱动IC:CPLD+SDRAM,电容触摸屏,16位并口驱动5,ATK-7寸TFTLCD模块(V2版本)分辨率:480*800,驱动IC:SSD1963,电容触摸屏,8/9/12/16位并口驱动8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-模块简介ALINETEK2.8寸TFTLCD模块特点240*320分辨率16位真彩显示(65536色)自带电阻触摸屏自带背光电路注意:模块是3.3V供电的,不支持5V电压的MCU,如果是5VMCU,必须在信号线串接120R电阻使用。8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-模块简介ALINETEK2.8寸TFTLCD模块原理图8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-模块简介ALINETEK2.8寸TFTLCD接口说明(16位80并口)注意:DB1~DB8,DB10~DB17,总是按顺序连接MCU的D0~D15LCD_CS:LCD片选信号LCD_WR:LCD写信号LCD_RD:LCD读信号DB[17:1]:16位双向数据线。LCD_RST:硬复位LCD信号LCD_RS:命令/数据标志(0:命令,1:数据)BL_CTR:背光控制信号T_MISO/T_MOSI/T_PEN/T_CS/T_CLK,触摸屏接口信号8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-模块简介ALINETEK2.8寸TFTLCD
16位80并口驱动简介并口写时序图并口读时序图模块的8080并口读/写的过程为:先根据要写入/读取的数据的类型,设置RS为高(数据)/低(命令),然后拉低片选,选中ILI9341,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:1.读数据:在RD的上升沿,读取数据线上的数据(D[15:0]);2.写数据:在WR的上升沿,使数据写入到ILI9341里面8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-模块简介ILI9341驱动时序重点时序:读ID低电平脉宽(trdl)读ID高电平脉宽(trdh)读FM低电平脉宽(trdlfm)读FM高电平脉宽(trdhfm)写控制低电平脉宽(twrl)写控制高电平脉宽(twrh)注意:ID指LCD的ID号FM指帧缓存,即:GRAM右图为:ILI93418080并口时序,详见:ILI9341_DS.pdf,232页8.1任务14TFT-LCD显示TFTLCD驱动原理1、TFTLCD驱动原理-驱动流程8.1任务14TFT-LCD显示TFTLCD驱动原理
RGB565格式说明模块对外接口采用16位并口,颜色深度为16位,格式为RGB565,关系如下图:1、TFTLCD驱动原理-指令简介ILI9341指令格式说明ILI9341所有的指令都是8位的(高8位无效),且参数除了读写GRAM的时候是16位,其他操作参数,都是8位的。ILI9341的指令很多,这里不一一介绍,仅介绍几个重要的指令,他们是:0XD3,0X36,0X2A,0X2B,0X2C,0X2E等6条指令。8.1任务14TFT-LCD显示TFTLCD驱动原理
0XD3指令该指令为读ID4指令,用于读取LCD控制器的ID。因此,同一个代码,可以根据ID的不同,执行不同的LCD驱动初始化,以兼容不同的LCD屏幕。1、TFTLCD驱动原理-指令简介8.1任务14TFT-LCD显示TFTLCD驱动原理
0X36指令该指令为存储访问控制指令,可以控制ILI9341存储器的读写方向,简单的说,就是在连续写GRAM的时候,可以控制GRAM指针的增长方向,从而控制显示方式(读GRAM也是一样)。1、TFTLCD驱动原理-指令简介8.1任务14TFT-LCD显示TFTLCD驱动原理
0X2A指令该指令是列地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置横坐标(x坐标)1、TFTLCD驱动原理-指令简介在默认扫描方式时,该指令用于设置x坐标,该指令带有4个参数,实际上是2个坐标值:SC和EC,即列地址的起始值和结束值,SC必须小于等于EC,且0≤SC/EC≤239。一般在设置x坐标的时候,我们只需要带2个参数即可,也就是设置SC即可,因为如果EC没有变化,我们只需要设置一次即可(在初始化ILI9341的时候设置),从而提高速度。8.1任务14TFT-LCD显示TFTLCD驱动原理
0X2B指令该指令是页地址设置指令,在从左到右,从上到下的扫描方式(默认)下面,该指令用于设置纵坐标(y坐标)1、TFTLCD驱动原理-指令简介在默认扫描方式时,该指令用于设置y坐标,该指令带有4个参数,实际上是2个坐标值:SP和EP,即页地址的起始值和结束值,SP必须小于等于EP,且0≤SP/EP≤319。一般在设置y坐标的时候,我们只需要带2个参数即可,也就是设置SP即可,因为如果EP没有变化,我们只需要设置一次即可(在初始化ILI9341的时候设置),从而提高速度。8.1任务14TFT-LCD显示TFTLCD驱动原理
0X2C指令该指令是写GRAM指令,在发送该指令之后,我们便可以往LCD的GRAM里面写入颜色数据了,该指令支持连续写(地址自动递增)1、TFTLCD驱动原理-指令简介在收到指令0X2C之后,数据有效位宽变为16位,我们可以连续写入LCDGRAM值,而GRAM的地址将根据MY/MX/MV设置的扫描方向进行自增。例如:假设设置的是从左到右,从上到下的扫描方式,那么设置好起始坐标(通过SC,SP设置)后,每写入一个颜色值,GRAM地址将会自动自增1(SC++),如果碰到EC,则回到SC,同时SP++,一直到坐标:EC,EP结束,其间无需再次设置的坐标,从而大大提高写入速度。8.1任务14TFT-LCD显示TFTLCD驱动原理
0X2E指令该指令是读GRAM指令,用于读取ILI9341的显存(GRAM),同0X2C指令,该指令支持连续读(地址自动递增)1、TFTLCD驱动原理-指令简介ILI9341在收到该指令后,第一次输出的是dummy数据(无效),第二次开始,读取到的才是有效的GRAM数据(从坐标:SC,SP开始),输出规律为:每个颜色分量占8个位,一次输出2个颜色分量。比如:第一次输出是R1G1,随后的规律为:B1R2
G2B2
R3G3
B3R4
G4B4
R5G5...以此类推8.1任务14TFT-LCD显示TFTLCD驱动原理3、源码讲解-LCD坐标设置函数//设置光标位置//Xpos:横坐标//Ypos:纵坐标voidLCD_SetCursor(u16Xpos,u16Ypos){ if(lcddev.id==0X9341||lcddev.id==0X5310){ LCD_WR_REG(lcddev.setxcmd);LCD_WR_DATA(Xpos>>8);LCD_WR_DATA(Xpos&0XFF);LCD_WR_REG(lcddev.setycmd); LCD_WR_DATA(Ypos>>8); LCD_WR_DATA(Ypos&0XFF);}elseif(lcddev.id==XXXX) //根据不同的LCD型号,执行不同的代码{ ……//省略部分代码}}
8.1任务14TFT-LCD显示TFTLCD源码3、源码讲解-LCD画点函数//画点//x,y:坐标//POINT_COLOR:此点的颜色voidLCD_DrawPoint(u16x,u16y){LCD_SetCursor(x,y); //设置光标位置
LCD_WriteRAM_Prepare(); //开始写入GRAMLCD->LCD_RAM=POINT_COLOR; //非Mini板的操作方式
}LCD_WR_DATA(POINT_COLOR);MiniSTM32;8.1任务14TFT-LCD显示TFTLCD源码3、源码讲解-LCD读点函数LCD读点函数:u16LCD_ReadPoint(u16x,u16y)1,非Mini板的读点函数代码(FSMC方式,适合战舰、精英、探索者F4板)2,Mini板的读点函数代码(GPIO方式,适合Mini板)8.1任务14TFT-LCD显示TFTLCD源码3、源码讲解-LCD字符显示函数//在指定位置显示一个字符//x,y:起始坐标//num:要显示的字符:""--->"~"//size:字体大小12/16/24//mode:叠加方式(1)还是非叠加方式(0)voidLCD_ShowChar(u16x,u16y,u8num,u8size,u8mode){
u8temp,t1,t;u16y0=y;u8csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
num=num-''; //得到偏移后的值(ASCII字库是从空格开始取模,所以-''就是对应字符的字库)
for(t=0;t<csize;t++){if(size==12)temp=asc2_1206[num][t]; //调用1206字体
elseif(size==16)temp=asc2_1608[num][t]; //调用1608字体
elseif(size==24)temp=asc2_2412[num][t]; //调用2412字体
elsereturn; //没有的字库
for(t1=0;t1<8;t1++){
if(temp&0x80)LCD_Fast_DrawPoint(x,y,POINT_COLOR);
elseif(mode==0)LCD_Fast_DrawPoint(x,y,BACK_COLOR);temp<<=1;y++;
if(y>=lcddev.height)return; //超区域了
if((y-y0)==size){
y=y0;
x++; if(x>=lcddev.width)return; //超区域了
break;}}
}
}8.1任务14TFT-LCD显示TFTLCD源码3、源码讲解-LCD字符显示函数constunsignedcharoled_asc2_1206[95][12]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/{0x00,0x00,0x00,0x00,0x3F,0x40,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/……{0x40,0x00,0x80,0x00,0x40,0x00,0x20,0x00,0x20,0x00,0x40,0x00},/*"~",94*/};字符码表constunsignedcharoled_asc2_1608[95][16]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0xCC,0x00,0x0C,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/……{0x00,0x00,0x60,0x00,0x80,0x00,0x80,0x00,0x40,0x00,0x40,0x00,0x20,0x00,0x20,0x00},/*"~",94*/}constunsignedcharoled_asc2_2412[95][36]={{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"",0*/{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x80,0x38,0x0F,0xFE,0x38,0x0F,0x80,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*"!",1*/……{0x00,0x00,0x00,0x18,0x00,0x00,0x60,0x00,0x00,0x40,0x00,0x00,0x40,0x00,0x00,0x20,0x00,0x00,0x10,0x00,0x00,0x08,0x00,0x00,0x04,0x00,0x00,0x04,0x00,0x00,0x0C,0x00,0x00,0x10,0x00,0x00},/*"~",94*/}8.1任务14TFT-LCD显示TFTLCD源码3、源码讲解-LCD字符显示函数淘宝店铺:
技术论坛:8.1任务14TFT-LCD显示TFTLCD源码8.1任务14TFT-LCD显示OLEDOLED,即有机发光二极管(OrganicLight-EmittingDiode),又称为有机电激光显示(OrganicElectroluminesenceDisplay,OELD)。OLED由于同时具备自发光,不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优异之特性,被认为是下一代的平面显示器新兴应用技术。OLED显示技术具有自发光的特性,采用非常薄的有机材料涂层和玻璃基板,当有电流通过时,这些有机材料就会发光,而且OLED显示屏幕可视角度大,并且能够节省电能,从2003年开始这种显示设备在MP3播放器上得到了应用。LCD都需要背光,而OLED不需要,因为它是自发光的。这样同样的显示,OLED效果要来得好一些。以目前的技术,OLED的尺寸还难以大型化,但是分辨率确可以做到很高。8.2任务15OLED显示ALINETEK0.96寸OLED模块1)模块有单色和双色两种可选,单色为纯蓝色,而双色则为黄蓝双色。
单色模块每个像素点只有亮与不亮两种情况,没有颜色区分。2)尺寸小,显示尺寸为0.96寸,而模块的尺寸仅为27mm*26mm大小。3)高分辨率,该模块的分辨率为128*64。4)多种接口方式,该模块提供了总共4种接口包括:6800、8080两种并行接口方式、4线的穿行SPI接口方式,、IIC接口方式(只需要2根线就可以控制OLED了!)。5)不需要高压,直接接3.3V就可以工作了。这里要提醒大家的是,该模块不和5.0V接口兼容,所以请大家在使用的时候一定要小心,别直接接到5V的系统上去,否则可能烧坏模块8.2任务15OLED显示OLED模块工作模式选择4种模式通过模块的BS1/BS2设置,BS1/BS2的设置与模块接口模式的关系如表所示:8.2任务15OLED显示OLED模块原理图8.2任务15OLED显示OLED8080并行接口信号线说明CS:OLED片选信号。WR:向OLED写入数据。RD:从OLED读取数据。D[7:0]:8位双向数据线。RST(RES):硬复位OLED。DC:命令/数据标志(0,读写命令;1,读写数据)。OLED控制器为SSD13068.2任务15OLED显示OLED8080并口读写过程模块的8080并口读/写的过程为:先根据要写入/读取的数据的类型,设置DC为高(数据)/低(命令),然后拉低片选,选中SSD1306,接着我们根据是读数据,还是要写数据置RD/WR为低,然后:1.读数据:在RD的上升沿,使数据锁存到数据线(D[7:0])上;2.写数据:在WR的上升沿,使数据写入到SSD1306里面;并口写时序图并口读时序图8.2任务15OLED显示OLED模块显存SSD1306的显存总共为128*64bit大小,SSD1306将这些显存分为了8页。每页包含了128个字节,总共8页,这样刚好是128*64的点阵大小。8.2任务15OLED显示程序显示原理在STM32的内部建立一个
缓存(共128*8个字节),在每次修改的时候,只是修改STM32上的缓存(实际上就是SRAM),在修改完了之后,一次性把STM32上的缓存数据写入到OLED的GRAM。当然这个方法也有坏处,就是对于那些SRAM很小的单片机(比如51系列)就比较麻烦了。8.2任务15OLED显示SSD1306的命令命令0X81:设置对比度。包含两个字节,第一个0X81为命令,随后发送的一个字节为要设置的对比度的值。这个值设置得越大屏幕就越亮。命令0XAE/0XAF:0XAE为关闭显示命令;0XAF为开启显示命令。命令0X8D:包含2个字节,第一个为命令字,第二个为设置值,第二个字节的BIT2表示电荷泵的开关状态,该位为1,则开启电荷泵,为0则关闭。在模块初始化的时候,这个必须要开启,否则是看不到屏幕显示的。命令0XB0~B7:用于设置页地址,其低三位的值对应着GRAM的页地址。命令0X00~0X0F:用于设置显示时的起始列地址低四位。命令0X10~0X1F:用于设置显示时的起始列地址高四位。8.2任务15OLED显示OLED初始化过程8.2任务15OLED显示OLED初始化//初始化SSD1306 voidOLED_Init(void){…//设置IO口模式,所有用到的io口设置为推挽模式。GPIO_Init();…//初始化代码,写相关寄存器OLED_WR_Byte(0xAE,OLED_CMD);//关闭显示OLED_WR_Byte(0xD5,OLED_CMD);//设置时钟分频因子,震荡频率OLED_WR_Byte(80,OLED_CMD);//[3:0],分频因子;[7:4],震荡频率OLED_WR_Byte(0xA8,OLED_CMD);//设置驱动路数OLED_WR_Byte(0X3F,OLED_CMD);//默认0X3F(1/64)OLED_WR_Byte(0xD3,OLED_CMD);//设置显示偏移OLED_WR_Byte(0X00,OLED_CMD);//默认为0……OLED_Clear();}8.2任务15OLED显示OLED写一个字节//向SSD1306写入一个字节。//dat:要写入的数据/命令//cmd:数据/命令标志0,表示命令;1,表示数据;voidOLED_WR_Byte(u8dat,u8cmd){DATAOUT(dat); if(cmd)
OLED_RS_Set();else
OLED_RS_Clr();
OLED_CS_Clr();
OLED_WR_Clr();
OLED_WR_Set();
OLED_CS_Set();
OLED_RS_Set(); } 8.2任务15OLED显示OLED更新缓存,显示内容。u8OLED_GRAM[128][8]; voidOLED_Refresh_Gram(void){u8i,n; for(i=0;i<8;i++){
OLED_WR_Byte(0xb0+i,OLED_CMD);//设置页地址(0~7)
OLED_WR_Byte(0x00,OLED_CMD);//设置显示位置—列低地址
OLED_WR_Byte(0x10,OLED_CMD);//设置显示位置—列高地址
for(n=0;n<128;n++)
OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);}}8.2任务15OLED显示OLED画点函数voidOLED_DrawPoint(u8x,u8y,u8t){u8pos,bx,temp=0;if(x>127||y>63)return;//超出范围了.pos=7-y/8;bx=y%8;temp=1<<(7-bx);if(t)OLED_GRAM[x][pos]|=temp;elseOLED_GRAM[x][pos]&=~temp; }8.2任务15OLED显示OLED字符显示函数//在指定位置显示一个字符,包括部分字符//x:0~127y:0~63//mode:0,反白显示;1,
size:选择字体12/16/24voidOLED_ShowChar(u8x,u8y,u8chr,u8size,u8mode){ u8temp,t,t1;u8y0=y;u8csize=(size/8+((size%8)?1:0))*(size/2); //得到字体一个字符对应点阵集所占的字节数
chr=chr-'';//得到偏移后的值
for(t=0;t<csize;t++){if(size==12)temp=asc2_1206[chr][t]; //调用1206字体elseif(size==16)temp=asc2_1608[chr][t]; //调用1608字体elseif(size==24)temp=asc2_2412[chr][t]; //调用2412字体elsereturn; //没有的字库
for(t1=0;t1<8;t1++){
if(temp&0x80)OLED_DrawPoint(x,y,mode);
elseOLED_DrawPoint(x,y,!mode);
temp<<=1;
y++;
if((y-y0)==size)
{
y=y0;
x++;break;
}}
}}8.2任务15OLED显示cons
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年 郴州市资兴市消防救援大队帮厨招聘考试笔试试题附答案
- 施工平面图绘制系统项目投资可行性研究分析报告(2024-2030版)
- 云南智能计量仪表项目可行性研究报告
- 税务师网盘课件
- 中国仿古白漆行业市场发展前景及发展趋势与投资战略研究报告(2024-2030)
- 2025-2031年中国花生牛奶行业发展前景预测及投资方向研究报告
- 2025年中国电子材料行业市场前景预测及投资战略研究报告
- 中国特种陶瓷成型蜡项目投资可行性研究报告
- 中国土矿石开采项目投资可行性研究报告
- 2025年中国炸鸡调料行业市场调研及未来发展趋势预测报告
- 2023年广东广州市公安局招考聘用刑事技术助理70人笔试题库含答案解析
- 海洋之歌(英文)
- 2023年05月福建厦门大学嘉庚学院图书馆馆员公开招聘1人笔试题库含答案解析
- 2023年副主任医师(副高)-内分泌学(副高)考试历年高频考点真题附带含答案
- 大学英语必备六级词汇
- 招标代理项目考核评分标准表
- 药品注册实用手册专家讲座
- 2023-2024学年内蒙古自治区赤峰市小学语文五年级下册期末高分题
- 初二上学期学生评语初二第一学期学生评语
- GB/Z 22074-2016塑料外壳式断路器可靠性试验方法
- GB/T 6147-2005精密电阻合金热电动势率测试方法
评论
0/150
提交评论