基于STM32的图像显示系统Word文件下载.docx
《基于STM32的图像显示系统Word文件下载.docx》由会员分享,可在线阅读,更多相关《基于STM32的图像显示系统Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。
![基于STM32的图像显示系统Word文件下载.docx](https://file1.bdocx.com/fileroot1/2022-10/18/57b9d009-58bf-49f7-b0ec-49ff1edcb452/57b9d009-58bf-49f7-b0ec-49ff1edcb4521.gif)
JPEG是最常用的图像文件格式,由一个软件开发联合会组织制定,是一种有损压缩格式,能够将图像压缩在很小的储存空间,图像中重复或不重要的资料会被丢失,因此容易造成图像数据的损伤。
尤其是使用过高的压缩比例,将使最终解压缩后恢复的图像质量明显降低,如果追求高品质图像,不宜采用过高压缩比例。
但是JPEG压缩技术十分先进,它用有损压缩方式去除冗余的图像数据,在获得极高的压缩率的同时能展现十分丰富生动的图像,换句话说,就是可以用最少的磁盘空间得到较好的图像品质。
而且JPEG是一种很灵活的格式,具有调节图像质量的功能,允许用不同的压缩比例对文件进行压缩,支持多种压缩级别,压缩比率通常在10:
1到40:
1之间,压缩比越大,品质就越低;
相反地,压缩比越小,品质就越好。
当然也可以在图像质量和文件尺寸之间找到平衡点。
JPEG格式压缩的主要是高频信息,对色彩的信息保留较好,适合应用于互联网,可减少图像的传输时间,可以支持24bit真彩色,也普遍应用于需要连续色调的图像。
2.2图片显示设计分析
在程序方面,采用分块设计的方法,这样既减小了编程难度、使程序易于理解,又能便于添加各项功能。
该程序将实现浏览PICTURE文件夹下的所有图片及其名字,配合SD卡能够实现顺序显示出每一副图片,并每隔3s左右切换一幅图片。
具体要实现的目标有:
更新内存卡,即图片可进行变换;
定时自动跳转下一幅图片;
可以通过按键快速跳到下一幅图片;
可以通过按键返回到上一幅图片;
初始状态显示本次课设的基本信息;
可对显示信息的汉字进行自定义。
2.3系统的结构框图
STM32
2.1系统结构框图
3详细设计
3.1硬件设计
3.1.1ALIENTEKMiniSTM32开发板简介
ALIENTEKMiniSTM32开发板是一款迷你型的开发板,小巧而不小气,简约而不简单。
它的外观尺寸只有8cm*10cm大小,板子的设计充分考虑了成本与功能这两个矛盾面,再结合实际使用的经验及STM32的特点,可有可无的选择性价比最高的留下,最终确定了这样的设计。
其资源丰富,设计灵活。
特点包括:
1)小巧。
整个板子尺寸为8cm*10cm*2cm。
2)灵活。
板上除晶振外的所有的IO口全部引出,特别还有GPIOA和GPIOB的IO口是按顺序引出的,可以极大的方便大家扩展及使用,另外板载独特的一键下载功能,避免了频繁设置B0、B1带来的麻烦,直接在电脑上一键下载。
3)资源丰富。
板载十多种外设及接口,可以充分挖掘STM32的潜质。
4)质量过硬。
沉金PCB+全新优质元器件+定制全铜镀金排针/排座+电源TVS保护,坚若磐石。
3.1.2功能简介
开机的时候先检测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。
3.2.1主函数部分
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;