proteus上基於stm32顯示儀表

這幾個月由於疫情影響,導致我也基本上沒有收入來源,基本上快要破產了。隔離期間,剛好能接個活,能解決點飯錢吧。


下面這個項目我以前也沒有接觸過,只是我一直在做嵌入式開發,所以收悉起來也挺快的。

因為這個項目重點在圖形界面,圖形界面的庫我收集過,有像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顯示原理

要了解它的顯示原理,需要看一個圖:


proteus上基於stm32顯示儀表

可以看出來,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上基於stm32顯示儀表


放到proteus之後,如下圖所示:


proteus上基於stm32顯示儀表


這個項目的代碼暫時為客戶保密,而把整個思路則描述出來。


如果大家有什麼項目需要合作,也可以給我留言,我主要專做於嵌入式開發工作。


分享到:


相關文章: