嵌入式应用实验报告_——电子相册
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式应用实验报告——电子相册
目录
一.实验目的: (3)
二.电子相册功能简介: (3)
三.程序流程图: (3)
四.中断程序: (4)
五.Bmp文件的转换(888-565): (5)
六.音乐文件的转换: (7)
七.图像缩放: (8)
八.图像显示: (8)
一.实验目的:
1、掌握基本的软件编程能力
2、熟悉STM32F103开发板的结构
二.电子相册功能简介:
由两个按键(User和Wakeup)控制相片的的切换(向前或向后),由temper键控制音乐的播放与暂停。
三.程序流程图:
初始化
系统时钟
I/O
端
口
中
断
L
C
D
显示欢迎图
音
频
检测temper键
是否按下?
音乐播放
状态修改
四.中断程序:
9_5中断
相片序号变量是否溢出?溢出时序号回到第一幅序号加1按序号显示相
片清除中断标志,中断返回
User 键下降沿0中断
相片序号变量是否溢出?
溢出时序号回到第三幅
序号减1按序号显示相
片清除中断标志,中断返回
Wakeup 键下降沿
User 键连接的是G 端口的第8位,Wakeup 键连接的是A 端口的第0位,temper 键连接的是C 端口的第13位。
五.Bmp文件的转换(888-565):
本实验是将bmp图转换为位图数据写进内部Flash的,采用的LCD型号为ILI9325,显示的彩色图片各通道位数为5/6/5(共两字节),而BMP格式的真彩色图片各通道位数为8/8/8(共三字节);因此为获得转换数据,在VC++6.0里编写了转换程序。
#include "stdio.h"
#include "bmp.h"
char readPath[]="13.bmp";
char datePath[]="3_2date.txt";
int bmpWidth;
int bmpHeight;
unsigned short biBitCount;
RGBQUAD *pColorTable;
unsigned char *pBmpBuf;
void getdate();
void changeBmp();
void main()
{
bool bmpread(char *rbmpname);
bool bmpwrite(char *wbmpname);
int a=bmpread(readPath);
if(!a)printf("cann't read the file!");
else
{
changeBmp();
getdate();
}
}
void getdate()
{
FILE *fp=fopen(datePath,"wb");
int i,j;
unsigned char *p;
int count=bmpWidth*bmpHeight*2;
p=pBmpBuf;
for(i=0;i { for(j=0;j<15;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); } void changeBmp() { int i,j,k=0; unsigned char a[3]; int lineByte=(bmpWidth*biBitCount/8+3)/4*4; for(i=0;i for(j=0;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); } 六.音乐文件的转换: 本实验是将wave格式音乐转换为音乐数据写进内部Flash的,wave文件采用的是RIFF格式,音频格式为PCM编码,单声道,8000HZ, 128kbps;因此为获得转换数据,在VC++6.0里编写了转换程序。 #include #include #include "wave_data.h" unsigned char cTxt; long i=0; void main() { FILE *fp,*fpn; if((fp=fopen("abc.wav","rb"))=NULL) printf("cannot open this file !\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); }