用matlab转换图片为C代码,实现液晶屏显示

本文介绍了一种使用Matlab将128x64 BMP图片转换为C代码,以在特定单片机和液晶屏上显示的方法。包括图片转换工具的使用说明、生成的C代码片段,以及用于显示图片的单片机程序。重点在于提供一种简单的图片显示解决方案,适合嵌入式系统开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

暑假参加了2011年电子设计竞赛,当时为了在12864液晶屏上显示图片,做了一个将bmp图片转换成C代码的matlab程序,程序不长,但功能实现了,给大家参考参考。

% 图片转换工具。
% 功能:
%     将一张128*64的图片转换成
%     液晶屏上显示的代码。
% 说明:
%     将本程序拷贝至matlab的工
%     作目录,并将一张128*64大
%     小的图片也拷贝至工作目录。
%     在matlab命令行输入:
%     image2c,并回车,将生成的
%     代码复制至ocm_lcd.c文件中
%     对应位置即可。
% 注意:
%     图片大小必须为128*64,且
%     为单色图片,最好直接在原
%     图片基础上修改。
% 声明:
%     Edit by lineter
%     QQ: 542375845

clc
tu=imread('image.bmp','bmp');
[y,x]=size(tu);
if y~=64 || x~=128
    disp('错误!---图片尺寸错误。');
    return
end
val=0;
for tmp1=1 : y
    for tmp2=0 : x/8-1
        for m=1 : 8
            val=val*2;
            if(tu(tmp1,tmp2*8+m)==0)
                val=val + 1;
            end
        end
        fprintf('%3d, ',int16(val));
        val=0;
    end
    fprintf('\n');
end
image(tu*255);

将图片保存成bmp格式,注意要单色的,并要和这段matlab程序在同一个文件夹中。








大小也要注意的。



用的是C8051F410单片机,液晶屏是广东金鹏的OCMJ4X8C,

单片机中显示图片的程序如下

void dis_image(unsigned char *img)
{
	unsigned char i,j;
	for(j=0;j<32;j++)
	{
		for(i=0;i<8;i++)
		{
			wr_lcd (comm,0x34);
			wr_lcd (comm,y_addr+j);
			wr_lcd (comm,x_addr1+i);
			wr_lcd (comm,0x30);
			wr_lcd (dat,img[j*16+i*2]);
			wr_lcd (dat,img[j*16+i*2+1]);
		}
	}
	for(j=32;j<64;j++)
	{
		for(i=0;i<8;i++)
		{
			wr_lcd (comm,0x34);
			wr_lcd (comm,y_addr+j-32);
			wr_lcd (comm,x_addr2+i);
			wr_lcd (comm,0x30);
			wr_lcd (dat,img[j*16+i*2]);
			wr_lcd (dat,img[j*16+i*2+1]);
		}
	}
	wr_lcd (comm,0x36);
}

其中的wr_lcd()函数定义如下:

void wr_lcd (unsigned char dat_comm,unsigned char content)
{
	unsigned char a,i,j;
	delay (50);
	a=content;
	cs=1;
	sclk=0;
	std=1;
	for(i=0;i<5;i++) //连续写5个1
	{
		sclk=1;
		sclk=0;
	}
	std=0;	 //写1个0
	sclk=1;
	sclk=0;
	if(dat_comm) //置WR
		std=1;   //data
	else
		std=0;   //command
	sclk=1;
	sclk=0;
	std=0;	 //写1个0
	sclk=1;
	sclk=0;
	for(j=0;j<2;j++)
	{
		for(i=0;i<4;i++)
		{
			a=a<<1;
			std=CY;
			sclk=1;
			sclk=0;
		}
		std=0;
		for(i=0;i<4;i++)
		{
			sclk=1;
			sclk=0;
		}
	}
	delay (500);
}

注意,因为单片机引脚较少,这里使用的是串口工作方式,并口没试过。

我的图片


图片常量如下:

code unsigned char ningda[]={
0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1,  48,   0,   0,   0, 
  0,   0,   0,   0,   0,   0, 112,   0,   0,   0,   0,   6,  48,   0,   0,   0, 
  0,   0,  14,   0,   0,   7, 248,   0,   3,   0,   0,   6, 112,   0,   0,   0, 
  0,   0,   7,   0,   0,  63, 192,   0,   3, 128,   0,  54, 224,   0,   0,   0, 
  0,   0,   7, 252,   0, 123, 192,   0,   1, 128,   0,  51, 192,   0,   0,   0, 
  0,   1,  31, 140,   0,  54,  96,   0,   1, 128,   0,  49, 248,   0,   0,   0, 
  0,   0, 255,  30,   0,   7, 224,   0,   3, 144,   0,  63, 142,   0,   0,   0, 
  0,   1, 192,  56,   0,  11,  96,   0,   3, 120,   0, 254,  30,   0,   0,   0, 
  0,   1, 128, 224,   0,  15,  96,   0,   3, 248,   1, 176, 120,   0,   0,   0, 
  0,   3,   1, 240,   0,  15, 224,   0,   7, 224,   1,  71, 224,   0,   0,   0, 
  0,   3,   7, 128,   0,  15,  96,   0,  15, 128,   1, 143, 224,   0,   0,   0, 
  0,   3,  31, 128,   0,  15, 224,   0, 127,   0,   3,  13, 192,   0,   0,   0, 
  0,   3,  63, 128,   0,  15, 224,   0, 126,   0,   3,   3, 128,   0,   0,   0, 
  0,   0,  57, 128,   0, 123, 240,   0,  30,   0,   3,   3, 240,   0,   0,   0, 
  0,   0,   1, 128,   0, 103, 208,   0,  12,   0,   1,  15, 240,   0,   0,   0, 
  0,   0,   1, 128,   0,  15,  16,   0,  12, 248,   0,  60, 224,   0,   0,   0, 
  0,   0,   1, 128,   0,  31, 224,   0,  28,  62,   0,  32, 192,   0,   0,   0, 
  0,   0,   1, 128,   0,  57, 240,   0, 184,  30,   0,  32, 192,   0,   0,   0, 
  0,   0,   3, 128,   0,  49, 252,   1, 240,   7,   0,  16, 192,   0,   0,   0, 
  0,   0,  31,   0,   0,  47, 142,   0,   0,   3,   0,  15, 192,   0,   0,   0, 
  0,   0,   7,   0,   0,   0,   3,   0,   0,   0,   0,   3, 128,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   1,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   1, 136,   0,  96,   1,  38,   0,   8,   0,   0,   0,   0,   0,   0,   0, 
  0,   5,  24,   7, 254,   1,  36,  15, 127, 128,   0,   0,   0,   0,   0,   0, 
  0,   5,  30,  12,  66,   7, 255, 133,  64, 128,   0,   0,   0,   0,   0,   0, 
  0,  15, 229, 199, 254,   4,  32, 134,  30, 128,   0,   0,   0,   0,   0,   0, 
  0,   9, 202,  68,  66,   4, 220, 133,  63,   0,   0,   0,   0,   0,   0,   0, 
  0,   7, 212, 135, 254,   0,  48,   4, 212,   0,   0,   0,   0,   0,   0,   0, 
  0,  13, 236, 135,  68,  15, 255, 231,  20,   0,   0,   0,   0,   0,   0,   0, 
  0,   1, 153,   0, 112,  72,  24, 196,  52,  32,   0,   0,   0,   0,   0,   0, 
  0,   1, 187,   0,  63, 192,  48,   4,  99, 192,   0,   0,   0,   0,   0,   0, 
  0,   1,  70,   0,  15, 129, 224,   4, 129, 128,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   1, 192,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,  63,  12,   0,  96,   0, 192,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,  32,  14,   0,  96,   0, 208,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,  32,  10,   0,  96,   0, 208,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,  32,   8,  96,  64,   0, 192,   0, 192,   0, 
  0,   0,   0,   0,   0,   0,   0,  60,  42,  96,  64,   0, 146,   0, 192,   0, 
  0,   0,   0,   0,   0,   0,   0,  32,  10, 120, 242,  64, 147, 206, 247,  80, 
  0,   0,   0,   0,   0,   0,   0,  32, 122, 208, 206,  64, 147,  83, 169, 224, 
  0,   0,   0,   0,   0,   0,   0,  16,  74,  64,  74,  64, 178,  94, 143,  64, 
  0,   0,   0,   0,   0,   0,   0,  30,  74,  64,  82,  64, 146,  80, 136,  64, 
  0,   0,   0,   0,   0,   0,   0,   0,  58,  64,  97, 192,  82,  14, 135,  64, 
  0,   0,   0,   0,   0,   0,   0,   0,  10,  96,  64,  64,  16,   0, 192,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,  64,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   2,  64,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   3, 128,   0,   0,   0,   0, 
  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0, 
  };

在matlab环境中运行最上面那段matlab程序,将运行结果覆盖这段常量,下载进单片机就出结果了。

晚点我再把实物图上传上来。



液晶显示器由于具有高清晰度、低功耗、零辐射、长寿命、体积小等特点已经成为显示器件的主流,主要的液晶显示技术有ECB、TN、IPS及MVA等。MVA模式液晶显示技术由于具有高对比度、宽视角以及快速响应等特点,已经成为大尺寸液晶显示器的主流技术。 但是在MVA模式液晶显示器件中需要在电极基板上制作一些凸起以及氧化铟锡的细缝结构,这些凸起和细缝结构的制作极为复杂而且成本很高,并且这些凸起和细缝的对位十分困难,大大地降低了产品的良率。 为此,如何避免制作这些凸起结构已经成为许多科研工作者的研究重点。AIFF MVA模式液晶显示技术在制作过程中避免了制作普通MVA模式中需要的复杂且昂贵的凸起结构 而是利用像素边缘之间产生的边缘电场效应来实现对内部液晶分子的控制,这样极大地节约了制作成本且极大地提高了产品的良率,而且AIFF MVA模式的视角特性,亮度以及对比度都比传统MVA技术有所改善。但是在AIFF MVA模式液晶盒中会出现黑纹,www.bolelib.com/post/35.html劳动合同论文。这使得AIFF MVA模式功耗难以降低,限制了AIFF MVA模式液晶显示的进一步发展。 本文首先介绍了液晶显示的理论基础及计算机模拟的算法;接下来用MATLAB软件模拟了ECB和TN模式液晶显示的电光特性,并且所得到的液晶盒内液晶分子的指向矢分布和液晶盒的V-T曲线与实际情况下这两种液晶盒的指向矢分布以及V-T曲线符合地很好; 然后模拟了AIFF MVA模式液晶显示的电光特性,分析了像素电极尺寸大小和像素间间隔尺寸大小对液晶盒边缘黑纹形成的影响,最后综合黑纹的改善和整体透过率,提出了AIFF MVA像素电极的优化设计思想,并且将AIFF MVA的模拟结果与实际实验相对照,验证了计算机理论模拟的可靠性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值