上海师范大学1嵌入式应用实验报告——电子相册上海师范大学2目录一.实验目的:........................................................................................3二.电子相册功能简介:........................................................................3三.程序流程图:....................................................................................3四.中断程序:........................................................................................4五.Bmp文件的转换(888-565):.....................................................5六.音乐文件的转换:............................................................................7七.图像缩放:........................................................................................8八.图像显示:........................................................................................8上海师范大学3一.实验目的:1、掌握基本的软件编程能力2、熟悉STM32F103开发板的结构二.电子相册功能简介:由两个按键(User和Wakeup)控制相片的的切换(向前或向后),由temper键控制音乐的播放与暂停。三.程序流程图:初始化系统时钟I/O端口中断LCD显示欢迎图音频检测temper键是否按下?音乐播放状态修改上海师范大学4四.中断程序:9_5中断相片序号变量是否溢出?溢出时序号回到第一幅序号加1按序号显示相片清除中断标志,中断返回User键下降沿0中断相片序号变量是否溢出?溢出时序号回到第三幅序号减1按序号显示相片清除中断标志,中断返回Wakeup键下降沿User键连接的是G端口的第8位,Wakeup键连接的是A端口的第0位,temper键连接的是C端口的第13位。上海师范大学5五.Bmp文件的转换(888-565):本实验是将bmp图转换为位图数据写进内部Flash的,采用的LCD型号为ILI9325,显示的彩色图片各通道位数为5/6/5(共两字节),而BMP格式的真彩色图片各通道位数为8/8/8(共三字节);因此为获得转换数据,在VC++6.0里编写了转换程序。#includestdio.h#includebmp.hcharreadPath[]=13.bmp;chardatePath[]=3_2date.txt;intbmpWidth;intbmpHeight;unsignedshortbiBitCount;RGBQUAD*pColorTable;unsignedchar*pBmpBuf;voidgetdate();voidchangeBmp();voidmain(){boolbmpread(char*rbmpname);boolbmpwrite(char*wbmpname);inta=bmpread(readPath);if(!a)printf(cann'treadthefile!);else{changeBmp();getdate();}}voidgetdate()上海师范大学6{FILE*fp=fopen(datePath,wb);inti,j;unsignedchar*p;intcount=bmpWidth*bmpHeight*2;p=pBmpBuf;for(i=0;icount/2;){for(j=0;j15;j++){fprintf(fp,0X%x,,pBmpBuf[2*i]|pBmpBuf[2*i+1]8);i++;}fprintf(fp,0X%x,\r\n,pBmpBuf[2*i]|pBmpBuf[2*i+1]8);i++;}fclose(fp);printf(i=%d,i);}voidchangeBmp(){inti,j,k=0;unsignedchara[3];intlineByte=(bmpWidth*biBitCount/8+3)/4*4;for(i=0;ibmpHeight;i++)for(j=0;jbmpWidth;j++){a[0]=pBmpBuf[i*lineByte+3*j+2];a[1]=pBmpBuf[i*lineByte+3*j+1];a[2]=pBmpBuf[i*lineByte+3*j+0];a[0]=a[0]3;a[1]=a[1]2;a[2]=a[2]3;pBmpBuf[k]=a[2]|(a[1]5);k++;pBmpBuf[k]=(a[0]3)|(a[1]3);k++;}printf(k=%d,k);}上海师范大学7六.音乐文件的转换:本实验是将wave格式音乐转换为音乐数据写进内部Flash的,wave文件采用的是RIFF格式,音频格式为PCM编码,单声道,8000HZ,128kbps;因此为获得转换数据,在VC++6.0里编写了转换程序。#includestdio.h#includestdlib.h#includewave_data.hunsignedcharcTxt;longi=0;voidmain(){FILE*fp,*fpn;if((fp=fopen(abc.wav,rb))=NULL)printf(cannotopenthisfile!\n);fp=fopen(abc.wav,rb);fpn=fopen(abc_data.txt,wb);while(!feof(fp)){cTxt=fgetc(fp);fprintf(fpn,%d,,cTxt);if((i+1)%16==0)fprintf(fpn,\r\n);i++;}fclose(fp);fclose(fpn);printf(\n);printf(i=%d\n,i);}上海师范大学8七.图像缩放:由于相片是写进内部FLASH的,因此打算采用缩放的方式来减少图片所占的内存,缩放的一般方式是近邻缩放。八.图像显示:原本的相片显示是按Z字形逐点写进LCD显示的,为了视觉效果好点,增加了几种其他的显示方式(例如百叶窗、关门、左到右推进、左到右)等。