基于STM32的图像显示系统_第1页
基于STM32的图像显示系统_第2页
基于STM32的图像显示系统_第3页
基于STM32的图像显示系统_第4页
基于STM32的图像显示系统_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘 要本文介绍了基于STM32的图片显示系统设计。现如今LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LCD显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。基于STM32的LCD显示可以更好的满足各种需求,也更便于操作和实现。通电后,复位到初始化状态可显示本次课程设计题目及成员等基本信息,可人为操作对显示信息的汉字进行自定义大小颜色及字体等等;把要显示的图片考入内存卡里,更新内存卡,即图片可进行变换;自定义定时跳转下一幅图片,也可以通过按键快速跳到下一幅图片,或返回上一张图片。利用TFT-LCD液晶显示屏显示的图片清晰、分辨率高,显示图片的效果极好。关

2、键词: STM32; LCD显示屏; 图片显示目 录1 引言12 总体设计22.1 图片显示的基本原理22.2 图片显示设计分析22.3 系统的结构框图33 详细设计43.1 硬件设计43.1.1 ALIENTEK MiniSTM32开发板简介43.1.2 功能简介43.2 软件设计73.2.1 主函数部分83.2.2 硬件部分程序93.2.3 识别图片113.2.4 FAT系统143.2.5 程序流程图154 实验结果及分析164.1 硬件实验结果164.2 结果分析165 结论17参考文献181 引言进入新世纪LCD显示屏的技术和产业都取得了长足的发展,作为重要的现代信息发布媒体之一,LC

3、D显示屏在证券交易、金融、交通、体育、广告等领域被广泛的应用。伴随社会信息化进程的推进,LCD显示屏技术也在不断的推陈出新,应用领域愈加广阔。基于STM32的LCD显示可以更好的满足各种需求,也更便于操作和实现。现基于STM32在液晶显示屏幕上显示文本及图形。目前,显示技术和显示工业的发展迅速。显示技术是传递视觉的信息技术。液晶显示器件LCD是当今最有发展前途的一种平板显示器件,它具有很多独到的优异特性。它具有显示信息多、易于多彩化、体积小、重量轻、功耗低、寿命长、价格低、无辐射、无污染、接口控制方便等优点。BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深

4、度可选以外,不采用其他任何压缩,因此,BMP 文件所占用的空间很大。而且JPEG 是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别。2 总体设计2.1 图片显示的基本原理BMP是一种与硬件设备无关的图像文件格式,使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit、16bit、24bit 及32bit。BMP 文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。 JPEG是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种

5、有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。但是JPEG 压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。 而且JPEG 是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:1 到40:1 之间,压缩比越大,品质就越低;相反地,压缩比越小,品质就越好。

6、当然也可以在图像质量和文件尺寸之间找到平衡点。JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。2.2 图片显示设计分析在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。该程序将实现浏览PICTURE 文件夹下的所有图片及其名字,配合SD卡能够实现顺序显示出每一副图片,并每隔3s左右切换一幅图片。具体要实现的目标有:更新内存卡,即图片可进行变换;定时自动跳转下一幅图片;可以通过按键快速跳到下一幅图片;可以通过按键返回到上一幅图片;初始状态显示本次课设

7、的基本信息;可对显示信息的汉字进行自定义。2.3 系统的结构框图存储图像SD卡键盘按键LED提示灯TFTLCDSTM322.1 系统结构框图3 详细设计3.1 硬件设计3.1.1 ALIENTEK MiniSTM32 开发板简介ALIENTEK MiniSTM32 开发板是一款迷你型的开发板,小巧而不小气,简约而不简单。它的外观尺寸只有8cm*10cm 大小,板子的设计充分考虑了成本与功能这两个矛盾面,再结合实际使用的经验及STM32的特点,可有可无的选择性价比最高的留下,最终确定了这样的设计。其资源丰富,设计灵活。 特点包括: 1)小巧。整个板子尺寸为8cm*10cm*2cm。 2)灵活。板

8、上除晶振外的所有的IO 口全部引出,特别还有GPIOA 和GPIOB 的IO 口是按顺序引出的,可以极大的方便大家扩展及使用,另外板载独特的一键下载功能,避免了频繁设置B0、B1 带来的麻烦,直接在电脑上一键下载。 3)资源丰富。板载十多种外设及接口,可以充分挖掘STM32 的潜质。 4)质量过硬。沉金PCB+全新优质元器件+定制全铜镀金排针/排座+ 电源TVS 保护,坚若磐石。3.1.2 功能简介开机的时候先检测SD 卡是否存在,然后初始化FAT 文件系统,在这之后开始查找根目录下的PICTURE 文件夹,如果找到则显示该文件夹下面的图片,循环显示,通过按KEY0 和KEY1 可以快速浏览下

9、一张和上一张。如果未找到图片文件夹/图片,则提示错误。同样我们也是用LED0 来指示程序正在运行。 所要用到的硬件资源如下: 1)STM32。 2)外部LED0。 3)TFTLCD 液晶模块。 4)KEY0,KEY1。 5)SD 卡。1、 STM32的简单介绍图3.1 STM32原理图选择STM32F103RBT6 作为MCU,原因是其性价比高,128K FLASH、20K SRAM、2 个SPI、3 个串口、1 个USB、1 个CAN、2 个12 位的ADC、RTC、51 个可用IO 脚,所以我们选择了它作为我们的主芯片。2、 外部LED0图3.2 外部LED0原理图其中PWR 是系统电源指

10、示灯,为蓝色。LED0 和LED1 分别接在PA8 和PD2 上,PA8 还可以通过TIM1 的通道1 的PWM 输出来控制DS0 的亮度。3、 TFTLCD 液晶模块图3.3 TFTLCD 液晶显示原理图TFT_LCD 是一个通用的液晶模块接口。OLED 是一个给OLED 显示模块供电的接口,它和TFT_LCD 拼接在一起。当使用2.4/2.8的LCD 时,我们接到TFT_LCD 上就可以了,而当我们使用ALIENTEK的OLED 模块时,则接OLED 排阵做电源,同时会连接到TFT_LCD 上的部分管脚,从而实现OLED 与MCU 的连接。4、 按键图3.4 按键输入原理图KEY0 和KE

11、Y1 用作普通按键输入,分别连接在PA13 和PA15 上,他们都连接在了JTAG相关的引脚上(KEY0 还连接在SWDIO 上),KEY0 和KEY1 还和PS/2 的DAT 和CLK 线共用,他们都通过JTAG 的上拉电阻来提供上拉。 WK_UP 按键连接到PA0(STM32 的WKUP 引脚),它除了可以用作普通输入按键外,还可以用作STM32 的唤醒输入。这个按键是高电平触发的。5、 SD 卡图3.5 SD卡部分原理图插入SD 卡可以外扩大容量存储设备,可以用来记录数据。SD 卡我们使用的是SPI 模式通信,SD 卡的SPI 接口连接到STM32 的SPI1 上,SD_CS 接在PA3

12、 上。3.2 软件设计图片显示系统需要有STM32开发板配合SD卡使用,因此其程序需要分为以下几个文件夹,硬件组成文件HARDWARE系统文,可以用来显示汉字的TEXT文件,用来识别图片的JPEG文件用来读取 SD 卡上的图片文件的FAT文件以及存放主程序文件USER文件件,和STM32的系统文件SYSFILE。3.2.1 主函数部分int main(void)u8 i; u8 key;FileInfoStruct *FileInfo;u16 pic_cnt=0; u16 index=0; u16 time=0;Stm32_Clock_Init(9);delay_init(72);uart_i

13、nit(72,9600);LCD_Init(); KEY_Init(); LED_Init(); SPI_Flash_Init(); if(Font_Init()POINT_COLOR=RED; LCD_ShowString(60,50,"Mini STM32");LCD_ShowString(60,70,"Font ERROR"); while(1); while(SysInfoGet(1) FAT_Init(); SD_Initialize(); LED0=!LED0;LCD_Fill(60,130,240,170,WHITE); delay_ms(

14、500); Cur_Dir_Cluster=PICCLUSTER;while(1) pic_cnt=0; Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPEG|T_JPG|T_BMP,&pic_cnt); if(pic_cnt=0) LCD_Clear(WHITE); while(1) if(time%2=0) else LCD_Clear(WHITE); time+;delay_ms(300); FileInfo=&F_Info0;.index=1; while(1) Get_File_Info(Cur_Dir_Cluster,FileI

15、nfo,T_JPEG|T_JPG|T_BMP,&index); LCD_Clear(WHITE); AI_LoadPicFile(FileInfo,0,0,240,320); POINT_COLOR=RED; Show_Str(0,0,FileInfo->F_Name,16,1);while(1) key=KEY_Scan();if(key=1) break;else if(key=2) if(index>1)index-=2;else index=pic_cnt-1;break; delay_ms(1); time+;if(time%100=0) LED0=!LED0;i

16、f(time>3000) time=0; break; index+;if(index>pic_cnt) index=1; 3.2.2 硬件部分程序void KEY_Init(void) / 键盘相应程序 RCC->APB2ENR|=1<<2; GPIOA->CRL&=0XFFFFFFF0; GPIOA->CRL|=0X00000008; GPIOA->CRH&=0X0F0FFFFF; GPIOA->CRH|=0X80800000; GPIOA->ODR|=1<<13; GPIOA->ODR|=1&l

17、t;<15; u8 KEY_Scan(void) static u8 key_up=1;JTAG_Set(JTAG_SWD_DISABLE);if (key_up&&(KEY0=0|KEY1=0|KEY2=1) delay_ms(10); key_up=0;if(KEY0=0) JTAG_Set(SWD_ENABLE); return 1; else if(KEY1=0) JTAG_Set(SWD_ENABLE); return 2; else if(KEY2=1) JTAG_Set(SWD_ENABLE); return 3; else if(KEY0=1&&a

18、mp;KEY1=1&&KEY2=0) key_up=1; JTAG_Set(SWD_ENABLE); return 0;void LED_Init(void) / led相应程序 RCC->APB2ENR|=1<<2; RCC->APB2ENR|=1<<5; GPIOA->CRH&=0XFFFFFFF0; GPIOA->CRH|=0X00000003; GPIOA->ODR|=1<<8; GPIOD->CRL&=0XFFFFF0FF;GPIOD->CRL|=0X00000300;GPI

19、OD->ODR|=1<<2; void SPIx_Init(void) /SD卡驱动程序RCC->APB2ENR|=1<<2; RCC->APB2ENR|=1<<12; GPIOA->CRL&=0X000FFFFF; GPIOA->CRL|=0XBBB00000; GPIOA->ODR|=0X7<<5; SPI1->CR1|=0<<10; SPI1->CR1|=1<<9; SPI1->CR1|=1<<8; SPI1->CR1|=1<<

20、;2; SPI1->CR1|=0<<11; SPI1->CR1|=1<<1; SPI1->CR1|=1<<0; SPI1->CR1|=7<<3; SPI1->CR1|=0<<7; SPI1->CR1|=1<<6; SPIx_ReadWriteByte(0xff); void SPIx_SetSpeed(u8 SpeedSet) SPI1->CR1& = 0XFFC7;switch(SpeedSet) case SPI_SPEED_2: SPI1->CR1|=0<

21、<3; break;case SPI_SPEED_4: SPI1->CR1|=1<<3; break;case SPI_SPEED_8: SPI1->CR1|=2<<3; break;case SPI_SPEED_16: SPI1->CR1|=3<<3; break;case SPI_SPEED_256: SPI1->CR1|=7<<3; break; SPI1->CR1|=1<<6; u8 SPIx_ReadWriteByte (u8 TxData)u8 retry=0; while(SPI1-&

22、gt;SR&1<<1)=0) retry+; if(retry>200) return 0; SPI1->DR=TxData; retry=0;while(SPI1->SR&1<<0)=0) retry+;if(retry>200) return 0; return SPI1->DR; 3.2.3 识别图片FileInfoStruct *CurFile; /当前解码/操作的文件void AI_Drow_Init(void) float temp,temp1; temp = (float)PICINFO.S_Width/PIC

23、INFO.ImgWidth; temp1 = (float)PICINFO.S_Height/PICINFO.ImgHeight; if(temp<temp1)temp1=temp; /取较小的那个 if(temp1>1)temp1=1; /使图片处于所给区域的中间 PICINFO.S_XOFF+=(PICINFO.S_Width-temp1*PICINFO.ImgWidth)/2; PICINFO.S_YOFF+=(PICINFO.S_Height-temp1*PICINFO.ImgHeight)/2; temp1*=10000; /扩大10000倍 PICINFO.Div_Fa

24、c=temp1; PICINFO.staticx=500; PICINFO.staticy=500; /放到一个不可能的值上面 /初始化量化表,全部清零 void InitTable(void) short i,j; sizei=sizej=0; PICINFO.ImgWidth=PICINFO.ImgHeight=0; rrun=vvalue=0; BitPos=0; CurByte=0; IntervalFlag=FALSE; restart=0; for(i=0;i<3;i+) /量化表 for(j=0;j<64;j+) qt_tableij=0; comp_num=0; H

25、ufTabIndex=0; /将解出的字按RGB 形式存储void StoreBuffer(void) short i=0,j=0; unsigned char R,G,B; int y,u,v,rr,gg,bb; u16 color; u16 realx=sizej; u16 realy=0; for(i=0;i<SampRate_Y_V*8;i+) if(sizei+i)<PICINFO.ImgHeight) realy=PICINFO.Div_Fac*(sizei+i)/10000; if (!IsElementOk(realx,realy,0) continue; for

26、(j=0;j<SampRate_Y_H*8;j+) if(sizej+j)<PICINFO.ImgWidth) realx=PICINFO.Div_Fac*(sizej+j)/10000; if (!IsElementOk(realx,realy,1) continue; y=Yi*8*SampRate_Y_H+j; u=U(i/V_YtoU)*8*SampRate_Y_H+j/H_YtoU; v=V(i/V_YtoV)*8*SampRate_Y_H+j/H_YtoV; rr=(y<<8)+18*u+367*v)>>8; gg=(y<<8)-15

27、9*u-220*v)>>8; bb=(y<<8)+411*u-29*v)>>8; R=(unsigned char)rr; G=(unsigned char)gg; B=(unsigned char)bb; if (rr&0xffffff00) if (rr>255) R=255; else if (rr<0) R=0; if (gg&0xffffff00) if (gg>255) G=255; else if (gg<0) G=0; if (bb&0xffffff00) if (bb>255) B=25

28、5; else if (bb<0) B=0; color=R>>3; color=color<<6; color |=(G>>2); color=color<<5; color |=(B>>3); POINT_COLOR=color; LCD_DrawPoint(realx+PICINFO.S_XOFF,realy+PICINFO.S_YOFF); else break; else break; void IQtIZzMCUComponent(short flag) short H,VV; short i,j; short *p

29、QtZzMCUBuffer; short *pMCUBuffer;switch(flag) case 0: H=SampRate_Y_H; VV=SampRate_Y_V; pMCUBuffer=MCUBuffer; pQtZzMCUBuffer=QtZzMCUBuffer; break;case 1: H=SampRate_U_H; VV=SampRate_U_V; pMCUBuffer=MCUBuffer+Y_in_MCU*64; pQtZzMCUBuffer=QtZzMCUBuffer+Y_in_MCU*64; break;case 2: H=SampRate_V_H; VV=SampR

30、ate_V_V; pMCUBuffer = MCUBuffer + (Y_in_MCU+U_in_MCU)*64; pQtZzMCUBuffer = QtZzMCUBuffer + (Y_in_MCU+U_in_MCU)*64; break; for (i=0;i<VV;i+) for (j=0;j<H;j+)IQtIZzBlock(pMCUBuffer+(i*H+j)*64, pQtZzMCUBuffer+(i*H+j)*64,flag); 3.2.4 FAT系统DWORD FirstDirClust; DWORD FirstDataSector;WORD BytesPerSec

31、tor; DWORD FATsectors;WORD SectorsPerClust; DWORD FirstFATSector;DWORD FirstDirSector;fat32DWORD RootDirSectors;DWORD RootDirCount;BYTE FAT32_Enable;DWORD Cur_Dir_Cluster; FAT_TABLE FAT_TAB; FileInfoStruct F_Info3;u8 fat_buffer512;u8 LongNameBufferMAX_LONG_NAME_SIZE;BOOL LongNameFlag = 0;const unsig

32、ned char *filetype23= "MP1","MP2","MP3","MP4","M4A","3GP","3G2","OGG","ACC","WMA","WAV","MID","FLA", "LRC","TXT","C ","H "," ","FON","SYS","BMP","JPG","JPE" ;3.2.5 程序流程图 Y N系统初始化插入SD卡结束否读取数据在LCD上显示图片及信息跳到上一幅或下一幅图片3s后自动跳转到下一幅有键按下?开始图3.6 程序流程图4 实验结果及分析4.1 硬件

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论