如何點亮段式液晶在STM8L152C6T6中?

想必每個初出茅廬的程式小菜鳥們都很頭疼這個那個晶片的功能,不同型別的液晶有自己的驅動方式,每每碰到這種情況,感覺腦袋都變大了好幾倍!不要著急,慢慢來,畢竟身為菜鳥的我們還是得一步一步的學習,成為大神的路是要一步一步腳踏實地的走下去!下面,就讓本菜鳥給大家分析一下我點亮的段式液晶吧!

如何點亮段式液晶在STM8L152C6T6中

方法/步驟

段式液晶雖然跟數碼管有所不同,但也有相同的地方,其七段分別為a,b,c,d,e,f,g 想要顯示資料,就必須點亮相應的段。下面將通用的0~9的設定值為大家解釋一下

const uint16_t NumberMap[10]=

{

/***

*顯示0

com1 com2 com3 com4

*seg3 [ 1d, 1e, 1f, 1a]

*seg4 [ 1c, 1g ,1b , P5]

*seg3 [ 1, 1, 1, 1]

*seg4 [ 1, 0 ,1 , 1]

*

**/

/* 0 1 2 3 4 5 6 7 8 9 */

0xFC,0x60,0xDA,0xF2,0x66,0xB6,0xBE,0xE0,0xFE,0xF6

};

如何點亮段式液晶在STM8L152C6T6中

通過圖中的這張表,就可以清楚的明白,0~9是如何得到的!這個是通用的,只要大家靜下心來好好想想,就會明白,為什麼上面程式碼會是那樣的!(大神請靜靜地飄過吧,讓菜鳥們普及一下基礎知識!誰讓本菜鳥就這麼菜呢!)

如何點亮段式液晶在STM8L152C6T6中

對於每一個LCD段式液晶屏,都有屬於自己的一張表,它會告訴你com與seg之間的對應關係(雖然剛開始看到這幅圖的我,根本無法理解,這究竟是何方神聖、、因為它看起來可以沒有規律,看起來也挺有規律,但究竟是沒看懂,後來的某個瞬間,突然發現,原來so easy!)先來看看我用的這個吧!

如何點亮段式液晶在STM8L152C6T6中

為了方便大家理解,我分幾部分解釋!

① 看到圖的第一眼,大家當然可以知道總共有8個7段數碼管(貌似不是這麼叫,大家將就一下)。

② 有13組漢字詞語,其上還有相應的標號:P1 P2 P3 P4 P5 P6 P7 P8 P9 P10 P11 P12P 13,想必這些片語的顯示設定就需要這些相應的標號來設定了。

③ 中間有2條橫槓,還有個標號X,估計同理如上

如何點亮段式液晶在STM8L152C6T6中

下面我就教大家,如何利用上面的這張表,來寫出相應的段式液晶暫存器快取地址表!首先看看LCD緩衝暫存器,只要把你要顯示的資料寫入暫存器就OK了。首先,當然是要找到pin腳對應的seg標號,然後對應到STM8L152C6T6中找到相對應的seg標號。

如何點亮段式液晶在STM8L152C6T6中

例如:pin4 pin5 對應的STM8L152C6T6中的seg標號為seg3,seg4,則如圖所示,就可以得到對應的a~g的緩衝地址位置!

1a>s3[seg3]

1b>s2[seg4]

、、、、、、同理可得到其餘的結果。

如何點亮段式液晶在STM8L152C6T6中

接下里就可以把地址寫進去了!接下來就是寫程式碼了:

LCD->RAM[LCD_RAMRegister_10] &= (~0x80);

LCD->RAM[LCD_RAMRegister_10] =((NumberMap[user_num/10]) &0x80);// 1A

LCD->RAM[LCD_RAMRegister_7] &= (~0x10);

LCD->RAM[LCD_RAMRegister_7] =((NumberMap[user_num/10]>>2)&0x10);// 1B

LCD->RAM[LCD_RAMRegister_0] &= (~0x10);

LCD->RAM[LCD_RAMRegister_0] =((NumberMap[user_num/10>>2])&0x10);// 1C

LCD->RAM[LCD_RAMRegister_0] &= (~0x08);

LCD->RAM[LCD_RAMRegister_0] =((NumberMap[user_num/10]>>1)&0x08);// 1D

LCD->RAM[LCD_RAMRegister_3] &= (~0x80);

LCD->RAM[LCD_RAMRegister_3] =((NumberMap[user_num/10]<<4)&0x80);// 1E

LCD->RAM[LCD_RAMRegister_7] &= (~0x08);

LCD->RAM[LCD_RAMRegister_7] =((NumberMap[user_num/10]<<1)&0x08); // 1F

LCD->RAM[LCD_RAMRegister_4] &=(~0x01);

LCD->RAM[LCD_RAMRegister_4] =((NumberMap[user_num/10]>>1)& 0x01);// 1G

如何點亮段式液晶在STM8L152C6T6中

注意事項

本次舉例都是以第一個數碼管為例!其餘方法一樣。

菜鳥, 大神, 液晶, 點亮段式, 段式液晶吧,
相關問題答案