暑假参加了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程序,将运行结果覆盖这段常量,下载进单片机就出结果了。
晚点我再把实物图上传上来。