這幾個月由於疫情影響,導致我也基本上沒有收入來源,基本上快要破產了。隔離期間,剛好能接個活,能解決點飯錢吧。
下面這個項目我以前也沒有接觸過,只是我一直在做嵌入式開發,所以收悉起來也挺快的。
因為這個項目重點在圖形界面,圖形界面的庫我收集過,有像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之後,如下圖所示:
這個項目的代碼暫時為客戶保密,而把整個思路則描述出來。
如果大家有什麼項目需要合作,也可以給我留言,我主要專做於嵌入式開發工作。