这几个月由于疫情影响,导致我也基本上没有收入来源,基本上快要破产了。隔离期间,刚好能接个活,能解决点饭钱吧。
下面这个项目我以前也没有接触过,只是我一直在做嵌入式开发,所以收悉起来也挺快的。
因为这个项目重点在图形界面,图形界面的库我收集过,有像TouchGFx,littlevgl,emwin,ucgui,awtk,microwindows,guilite等等,最终还是选择用littlevgl作为参考。
预备工作
1.stm32f1 pack包下载:
https://www.keil.com/dd2/Pack/#/eula-container
2.安装proteus8.9版本
A.安装P8.9.sp0.exe,安装好license。
B.安装PP8.9.exe。
3.字模软件
字模软件:PCtoLCD2002
图形软件:zimo221
4.Ampire12864资料
https://wenku.baidu.com/view/96a606a8a1c7aa00b42acb44.html
5.cpu选型与液晶选型
A.stm32f401+ili9341
B.stm32f103+ampire lcd12864
6.选型定为stm32f103
内存为flash 25KB+sram 10KB,而图只能使用预先制作好的机械图表。
Zimo221工具使用
因为我们使用的是这个工具来采集图像,一般执行的操作流程是,”打开图像图标”--->”取模方式(C51)”--->”参数设置”--->”其他选项”--->横向取模等等。
也就是说,一般使用的是横向取模,那么一个这样的数组:
0x01(A),0x02(B),0x03(C)...
它在屏幕上的排序方式就是从左到右排列,A的最高位是第一个像素点,依次而论。
ampire显示原理
要了解它的显示原理,需要看一个图:
可以看出来,y这一列表示的是列,总共有128个像素点,分为左右两个半屏,刚好每个屏是64个像素点。
我们前面的zimo221工具生成的像素点是横向排列的,而这里的ampire lcd12864则可以看出来是第一个字节竖向排列,第二个字节依次。因此,需要将zimo221的生成结果利用c语言做一下转换。
用一段程序表示一下:
<code>void
generate_bitmap_for_lcd12864(int
img_pos)
{
int
i,j,k;
unsigned
char
ch,tmp;
for(i
=
0
;
i
<
16
;
i
++){
for(j
=
0
;
j
<
64
;
j
++){
ch
=
bmps[img_pos][i+j*16];
for(k
=
0
;
k
<
8
;
k
++){
tmp
=
(ch
>>
(7-k))
&
1
;
bmp_tmp[img_pos][j/8][i*8+k]
|=
tmp<
}
}
}
}
/<code>
基于像素点
其实这个项目是基于这样的图片做的。
放到proteus之后,如下图所示:
这个项目的代码暂时为客户保密,而把整个思路则描述出来。
如果大家有什么项目需要合作,也可以给我留言,我主要专做于嵌入式开发工作。