stm32f051系列教程 TFT LCD显示图片
来源:互联网 发布:69是什么意思网络语言 编辑:程序博客网 时间:2024/04/27 22:43
TFT LCD显示图片
我们需要编写一个读取图片的函数,为了简便,只写了读取BMP文件的读取函数。BMP 文件格式,又称为 Bitmap(位图)或是 DIB(Device -Independent D evice,设备无关位图),是Windows 系统中广泛使用的图像文件格式。
BMP 文件可以保存单色位图、16色或256 色索引模式像素图、24位真彩色图象,每种模式种单一像素的大小分别为 1/8 字节,1/2 字节,1 字节和3 字节。
我们设计显示 BMP 。这种文件格式还定义了像素在开始处有一个文件头,大小为54字节。保存了包括文件格式标识、颜色数、图象大小、压缩方式等信息,图象的宽度和高度都是一个 32位整数,在文件中的地址分别为 0x0012和0x0016。54个字节以后,如果是16色和256位色BMP ,则还有一个颜色表,但24位色BMP 没有这个。因此我们大体需要编写两个函数,首先是读取BMP头文件信息,代码如下,这个代码是直接从网上移植过来的:
1
2
3
4
5
6
7
8
9
10
11
BMP_HEADER TFTBmpGetHeadInfo(uint8_t *buf)
{
BMP_HEADER bmpHead;
bmpHead.bfType = (buf[0] << 8) + buf[1];
// BM
bmpHead.bfSize = (buf[5]<<24) + (buf[4]<<16) + (buf[3]<<8) + buf[2];
// 文件大小
bmpHead.biWidth = (buf[21]<<24) + (buf[20]<<16) + (buf[19]<<8) + buf[18];
// 图像宽度
bmpHead.biHeight = (buf[25]<<24) + (buf[24]<<16) + (buf[23]<<8) + buf[22];
// 图像高度
bmpHead.biBitCount = (buf[29] << 8) + buf[28];
// 每个像素的位数,单色位图为1,256色为8,16bit为16, 24bit为24
return
bmpHead;
}
然后对图像文件进行扫描:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
uint8_t TFTBmpDisplay(uint8_t *bmpName,uint16_t x,uint16_t y)
{
FATFS fs;
// 建立文件系统
FIL file;
// 建立文件
UINT
br;
// 字节计数器
FRESULT res;
// 返回值信息
BMP_HEADER bmpHead;
// 头信息
uint16_t i;
f_mount(0, &fs);
// 挂载文件系统
res = f_open(&file, (
const
TCHAR
*)bmpName, FA_OPEN_EXISTING|FA_READ);
// 打开BMP文件并读取到file中
if
(res != FR_OK)
{
return
res;
}
else
{
res = f_read(&file, Buffer, 54, &br);
// 读取头文件信息
if
(res != FR_OK)
{
return
res;
// 返回错误表示
}
else
{
bmpHead = TFTBmpGetHeadInfo(Buffer);
// 获取头信息
if
(bmpHead.bfType == 0x424D)
// 判断是否为BMP图像
{
LCD_WR_REG_DATA(0x0003, 0x1010);
// 由下而上显示
LCD_XYRAM(x, y, x+bmpHead.biWidth-1, y+bmpHead.biHeight-1);
LCD_WR_REG_DATA(0x0020,x);
//设置X坐标位置
LCD_WR_REG_DATA(0x0021,y+bmpHead.biHeight-1);
//设置Y坐标位置(注意:在由下而上显示的时候,这里y坐标应该是最下边的值)
LCD_WR_REG(0x0022);
//指向RAM寄存器,准备写数据到RAM
while
(1)
{
res = f_read(&file, Buffer, 240, &br);
//读取240个数据
if
(res||br==0)
//错误跳出
break
;
for
(i=0;i<80;i++)
{
// 在TFT上显示一个像素点的颜色
LCD_WR_DATA(((Buffer[i*3+2]/8)<<11 | (Buffer[i*3+1]/4)<<5 |(Buffer[i*3]/8)));
}
以上代码来自网络,移植到STM32F0上可行,特此声明。
因此对图像扫描显示后就可以在主函数中调用显示了:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
num = FileScan(
"picture"
);
// 扫描picture文件
if
(num>50)num = 50;
// 最多50个文件
strcpy
((
char
*)tempPath,
"picture/"
);
// 把文件名路径给了tempPath暂存
while
(1)
{
for
(i=0; i<num; i++)
// 循环扫描文件得到哪个是BMP文件
{
if
(flag[i] == 1)
// 检测如果是BMP图片
{
strcpy
((
char
*)(filePath), (
char
*)(tempPath));
strcat
((
char
*)filePath, (
char
*)(FileN[i]));
TFTBmpDisplay((uint8_t*)filePath,0,0);
// 显示出来图片
delay(10);
delay(10);
delay(10);
delay(10);
delay(10);
}
}
}
实验下载现象:
显示照片如下:
http://www.eeboard.com/tutorials/%E9%9D%92%E9%A3%8Estm32f051%E6%95%99%E7%A8%8B%E7%AC%AC16%E8%AF%BEtft-lcd%E6%98%BE%E7%A4%BA%E5%9B%BE%E7%89%87/
- stm32f051系列教程 TFT LCD显示图片
- s3c2410+LCD+TFT+驱动+图片显示
- TFT-LCD驱动程序设计(系列一)
- TFT-LCD驱动程序设计(系列二)
- TFT LCD
- TFT LCD
- 基于DSP的彩色TFT-LCD数字图像显示技术研究
- s3c2410 LCD图片显示
- s3c2410 LCD图片显示
- Linux LCD 显示图片
- TFT-LCD液晶显示器摘要
- TFT/LCD process
- TFT LCD使用心得
- 如何驱动TFT LCD
- s3c2440控制TFT LCD
- s3c2440控制TFT LCD
- STM32 FSMC TFT LCD
- TFT LCD驱动
- 快速排序<优化>
- OpenGL - Understand View Matrix by glulookat
- 从零开始 python (二)
- 道德經77
- java处理日期相关的方法
- stm32f051系列教程 TFT LCD显示图片
- C++建立动态链接库
- 关于连接池自己的一理解
- struts框架小试牛刀
- 常用linux命令
- 2013年最火和最挣钱的IT职位
- HP大中华区总裁孙振耀退休感言
- Qt性能测试
- 加快网站在百度的快照方法