基于STM32的图像显示系统Word下载.docx

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

基于STM32的图像显示系统Word下载.docx

《基于STM32的图像显示系统Word下载.docx》由会员分享,可在线阅读,更多相关《基于STM32的图像显示系统Word下载.docx(19页珍藏版)》请在冰点文库上搜索。

基于STM32的图像显示系统Word下载.docx

可以通过按键返回到上一幅图片;

初始状态显示本次课设的基本信息;

可对显示信息的汉字进行自定义。

 

2.3系统的结构框图

STM32

2.1系统结构框图

3详细设计

3.1硬件设计

ALIENTEKMiniSTM32开发板简介

ALIENTEKMiniSTM32开发板是一款迷你型的开发板,小巧而不小气,简约而不简单。

它的外观尺寸只有8cm*10cm大小,板子的设计充分考虑了成本与功能这两个矛盾面,再结合实际使用的经验及STM32的特点,可有可无的选择性价比最高的留下,最终确定了这样的设计。

其资源丰富,设计灵活。

特点包括:

1)小巧。

整个板子尺寸为8cm*10cm*2cm。

2)灵活。

板上除晶振外的所有的IO口全部引出,特别还有GPIOA和GPIOB的IO口是按顺序引出的,可以极大的方便大家扩展及使用,另外板载独特的一键下载功能,避免了频繁设置B0、B1带来的麻烦,直接在电脑上一键下载。

3)资源丰富。

板载十多种外设及接口,可以充分挖掘STM32的潜质。

4)质量过硬。

沉金PCB+全新优质元器件+定制全铜镀金排针/排座+电源TVS保护,坚若磐石。

简介

开机的时候先检测SD卡是否存在,然后初始化FAT文件系统,在这之后开始查找根目录下的PICTURE文件夹,如果找到则显示该文件夹下面的图片,循环显示,通过按KEY0和KEY1可以快速浏览下一张和上一张。

如果未找到图片文件夹/图片,则提示错误。

同样我们也是用LED0来指示程序正在运行。

所要用到的硬件资源如下:

1)STM32。

2)外部LED0。

3)TFTLCD液晶模块。

4)KEY0,KEY1。

5)SD卡。

1、STM32的简单介绍

图3.1STM32原理图

选择STM32F103RBT6作为MCU,原因是其性价比高,128KFLASH、20KSRAM、2个SPI、3个串口、1个USB、1个CAN、2个12位的ADC、RTC、51个可用IO脚…,所以我们选择了它作为我们的主芯片。

2、外部LED0

图3.2外部LED0原理图

其中PWR是系统电源指示灯,为蓝色。

LED0和LED1分别接在PA8和PD2上,PA8还可以通过TIM1的通道1的PWM输出来控制DS0的亮度。

3、TFTLCD液晶模块

图3.3TFTLCD液晶显示原理图

TFT_LCD是一个通用的液晶模块接口。

OLED是一个给OLED显示模块供电的接口,它和TFT_LCD拼接在一起。

当使用2.4’/2.8’的LCD时,我们接到TFT_LCD上就可以了,而当我们使用ALIENTEK的OLED模块时,则接OLED排阵做电源,同时会连接到TFT_LCD上的部分管脚,从而实现OLED与MCU的连接。

4、按键

图3.4按键输入原理图

KEY0和KEY1用作普通按键输入,分别连接在PA13和PA15上,他们都连接在了JTAG相关的引脚上(KEY0还连接在SWDIO上),KEY0和KEY1还和PS/2的DAT和CLK线共用,他们都通过JTAG的上拉电阻来提供上拉。

WK_UP按键连接到PA0(STM32的WKUP引脚),它除了可以用作普通输入按键外,还可以用作STM32的唤醒输入。

这个按键是高电平触发的。

5、SD卡

图3.5SD卡部分原理图

插入SD卡可以外扩大容量存储设备,可以用来记录数据。

SD卡我们使用的是SPI模式通信,SD卡的SPI接口连接到STM32的SPI1上,SD_CS接在PA3上。

3.2软件设计

图片显示系统需要有STM32开发板配合SD卡使用,因此其程序需要分为以下几个文件夹,硬件组成文件HARDWARE系统文,可以用来显示汉字的TEXT文件,用来识别图片的JPEG文件用来读取SD卡上的图片文件的FAT文件以及存放主程序文件USER文件件,和STM32的系统文件SYSFILE。

主函数部分

intmain(void)

{u8i;

u8key;

FileInfoStruct*FileInfo;

u16pic_cnt=0;

u16index=0;

u16time=0;

Stm32_Clock_Init(9);

delay_init(72);

uart_init(72,9600);

LCD_Init();

KEY_Init();

LED_Init();

SPI_Flash_Init();

if(Font_Init())

{POINT_COLOR=RED;

LCD_ShowString(60,50,"

MiniSTM32"

);

LCD_ShowString(60,70,"

FontERROR"

while

(1);

}

while(SysInfoGet

(1))

{FAT_Init();

SD_Initialize();

LED0=!

LED0;

LCD_Fill(60,130,240,170,WHITE);

delay_ms(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)

elseLCD_Clear(WHITE);

time++;

delay_ms(300);

}}

FileInfo=&

F_Info[0];

.

index=1;

{Get_File_Info(Cur_Dir_Cluster,

index);

LCD_Clear(WHITE);

AI_LoadPicFile(FileInfo,0,0,240,320);

POINT_COLOR=RED;

Show_Str(0,0,FileInfo->

F_Name,16,1);

{key=KEY_Scan();

if(key==1)break;

elseif(key==2)

{if(index>

1)index-=2;

elseindex=pic_cnt-1;

break;

delay_ms

(1);

if(time%100==0)LED0=!

if(time>

3000)

{time=0;

break;

}}

index++;

if(index>

pic_cnt)index=1;

}}}

3.2.2硬件部分程序

voidKEY_Init(void)//键盘相应程序

{RCC->

APB2ENR|=1<

<

2;

GPIOA->

CRL&

=0XFFFFFFF0;

CRL|=0X00000008;

CRH&

=0X0F0FFFFF;

CRH|=0X80800000;

ODR|=1<

13;

15;

}

u8KEY_Scan(void)

{staticu8key_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);

return1;

elseif(KEY1==0)

{JTAG_Set(SWD_ENABLE);

return2;

elseif(KEY2==1)

return3;

}}

elseif(KEY0==1&

KEY1==1&

KEY2==0)key_up=1;

JTAG_Set(SWD_ENABLE);

return0;

}

voidLED_Init(void)//led相应程序

RCC->

5;

CRH|=0X00000003;

8;

GPIOD->

=0XFFFFF0FF;

CRL|=0X00000300;

GPIOD->

voidSPIx_Init(void)//SD卡驱动程序

12;

=0X000FFFFF;

CRL|=0XBBB00000;

ODR|=0X7<

SPI1->

CR1|=0<

10;

SPI1->

CR1|=1<

9;

11;

1;

0;

CR1|=7<

3;

7;

SPI1->

6;

SPIx_ReadWriteByte(0xff);

}

voidSPIx_SetSpeed(u8SpeedSet)

{SPI1->

CR1&

=0XFFC7;

switch(SpeedSet)

{caseSPI_SPEED_2:

SPI1->

break;

caseSPI_SPEED_4:

caseSPI_SPEED_8:

CR1|=2<

break;

caseSPI_SPEED_16:

CR1|=3<

break;

caseSPI_SPEED_256:

}

u8SPIx_ReadWriteByte(u8TxData)

{u8retry=0;

while((SPI1->

SR&

1<

1)==0)

{retry++;

if(retry>

200)return0;

}

DR=TxData;

retry=0;

0)==0)

}

returnSPI1->

DR;

3.2.3识别图片

FileInfoStruct*CurFile;

//当前解码/操作的文件

voidAI_Drow_Init(void)

{floattemp,temp1;

temp=(float)PICINFO.S_Width/PICINFO.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_Fac=temp1;

PICINFO.staticx=500;

PICINFO.staticy=500;

//放到一个不可能的值上面

}//初始化量化表,全部清零

voidInitTable(void)

{shorti,j;

sizei=sizej=0;

PICINFO.ImgWidth=PICINFO.ImgHeight=0;

rrun=vvalue=0;

BitPos=0;

CurByte=0;

IntervalFlag=FALSE;

restart=0;

for(i=0;

i<

i++)//量化表

for(j=0;

j<

64;

j++)qt_table[i][j]=0;

comp_num=0;

HufTabIndex=0;

//将解出的字按RGB形式存储

voidStoreBuffer(void)

{shorti=0,j=0;

unsignedcharR,G,B;

inty,u,v,rr,gg,bb;

u16color;

u16realx=sizej;

u16realy=0;

for(i=0;

SampRate_Y_V*8;

i++)

{if((sizei+i)<

PICINFO.ImgHeight)

{realy=PICINFO.Div_Fac*(sizei+i)/10000;

if(!

IsElementOk(realx,realy,0))continue;

for(j=0;

SampRate_Y_H*8;

j++)

{if((sizej+j)<

PICINFO.ImgWidth)

{realx=PICINFO.Div_Fac*(sizej+j)/10000;

IsElementOk(realx,realy,1))continue;

y=Y[i*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)>

>

gg=((y<

8)-159*u-220*v)>

bb=((y<

8)+411*u-29*v)>

R=(unsignedchar)rr;

G=(unsignedchar)gg;

B=(unsignedchar)bb;

if(rr&

0xffffff00)if(rr>

255)R=255;

elseif(rr<

0)R=0;

if(gg&

0xffffff00)if(gg>

255)G=255;

elseif(gg<

0)G=0;

if(bb&

0xffffff00)if(bb>

255)B=255;

elseif(bb<

0)B=0;

color=R>

color=color<

color|=(G>

2);

color|=(B>

3);

POINT_COLOR=color;

LCD_DrawPoint(realx+PICINFO.S_XOFF,realy+PICINFO.S_YOFF);

elsebreak;

}}

}}

voidIQtIZzMCUComponent(shortflag)

{shortH,VV;

shorti,j;

short*pQtZzMCUBuffer;

short*pMCUBuffer;

switch(flag){

case0:

H=SampRate_Y_H;

VV=SampRate_Y_V;

pMCUBuffer=MCUBuffer;

pQtZzMCUBuffer=QtZzMCUBuffer;

case1:

H=SampRate_U_H;

VV=SampRate_U_V;

pMCUBuffer=MCUBuffer+Y_in_MCU*64;

pQtZzMCUBuffer=QtZzMCUBuffer+Y_in_MCU*64;

case2:

H=SampRate_V_H;

VV=SampRate_V_V;

pMCUBuffer=MCUBuffer+(Y_in_MCU+U_in_MCU)*64;

pQtZzMCUBuffer=QtZzMCUBuffer+(Y_in_MCU+U_in_MCU)*64;

break;

for(i=0;

VV;

H;

j++)

IQtIZzBlock(pMCUBuffer+(i*H+j)*64,

pQtZzMCUBuffer+(i*H+j)*64,flag);

3.2.4FAT系统

DWORDFirstDirClust;

DWORDFirstDataSector;

WORDBytesPerSector;

DWORDFATsectors;

WORDSectorsPerClust;

DWORDFirstFATSector;

DWORDFirstDirSector;

fat32

DWORDRootDirSectors;

DWORDRootDirCount;

BYTEFAT32_Enable;

DWORDCur_Dir_Cluster;

FAT_TABLEFAT_TAB;

FileInfoStructF_Info[3];

u8fat_buffer[512];

u8LongNameBuffer[MAX_LONG_NAME_SIZE];

BOOLLongNameFlag=0;

constunsignedchar*filetype[23]=

{"

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

图3.6程序流程图

4实验结果及分析

4.1硬件实验结果

图4.1初始化显示屏图4.2显示图片

4.2结果分析

接通电源后,正确的读取SD卡信息后,LCD液晶显示屏上显示实验题目及制作成员等基本信息。

随后自动跳转到图片显示模式。

不对实验板进行操作时,每3秒会跳转到下一张图片,显示图片及相应的图片信息,由于图片的大小及像素不同,刷新显示的速度也有所不同,图片显示完毕后会伴随LED小灯闪

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

当前位置:首页 > 总结汇报 > 学习总结

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

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