51微控制器 LED類程式設計技巧

2021-07-30 02:14:53 字數 1912 閱讀 5920

8x8點陣

個人感覺點陣需要注意的地方有:

第乙個就是驅動點陣的方式

我認為8x8點陣的驅動程式分為行掃瞄和列掃瞄兩種。

比如行掃瞄就是用一層for迴圈:

先選中第一行,然後送入這一行的資料,再選擇第二行,然後送入第二行資料,如此迴圈下去,直至顯示完乙個螢幕(即8行),同時記得要消隱和微延時(後面會說消隱和微延時),列掃瞄同理。如圖是**示例:

8x8點陣,無滾動效果

第二個就是滾動效果的實現。

思路是:

一:掃瞄函式不變,每掃瞄乙個螢幕,所有資料移動一位;(**實現簡單)

二:資料不變,每次讀取資料的起始位置移動一位。(**實現有點難,反正我不會╮(╯▽╰)╭)

以第一種為例:

**實現:實現滾動效果的基礎是乙個掃瞄函式和乙個資料處理函式,掃瞄函式有兩層for迴圈組成:第一層for迴圈控制影象每移動一次的時間間隔,然後第二層for迴圈顯示整個螢幕。

如圖掃瞄函式:

掃瞄函式

滾動的重點是資料迴圈函式的寫法,我覺得資料處理分兩種:(僅個人愚見,新手)

第一種:

如果顯示的內容整個點陣足以顯示(這樣的情況一般沒有),那麼就不用另外寫資料處理函式,直接用 intrins.h裡面的 _cror_(*,*) 函式或者 _crol_(*,*)函式對資料進行迴圈處理就可以了.不用 >是因為後面兩個的左右移無法迴圈,會丟失資料。

第二種:

自然就是指顯示的資料在一張螢幕上顯示不了,從而導致需要滾動顯示。

此時就要另外寫乙個資料處理函式,原理很簡單,比如streamdata[80]這個陣列裡面存著資料,那麼只需將資料中的每乙個資料往前(或者往後)移一位就可以了,最後將streamdata[0]移至streamdata[79]的位置就大功告成了。

注:以上兩種的掃瞄還是只掃瞄乙個螢幕(當然最大就只能掃瞄乙個螢幕嘛),每當掃瞄完乙個螢幕,接著進行資料處理就行了。

如圖為第二種的資料處理函式:

注:但是我這種方法比較麻煩,但是我也沒有想到其他比較好的方法,所以如果讀者有比較好的方法的話,希望可以分享一下。

(來一張萌圖:)

出自《刀劍神域》 亞絲娜,抱枕上的是kirito

對於led燈的顯示,點亮led的原理我就不說了,大家都懂,我說幾個小細節吧:(補上上面挖的坑)

1、微延時。

當對動態數碼管進行操作時,每點亮一位數碼管,在點亮下乙個數碼管之前要進行微延時,這樣可以提高亮度,延時太久的話整體效果會大打折扣(俗稱:晃眼),但是不延時的話,亮度會很低,所以到底延時多久就取決於處理速度啦,其實到頭來還是取決於你的眼睛啦。

(不晃眼的延時就是好延時!)

2、消隱。(就是消除隱約的光,也就是重影)

下面是我剛開始學微控制器時自己做的:

我自己做的心形燈,當時更新手,更菜,大家不要笑哈

(做那個燈的時候剛剛開始學,電阻接小了,導致太亮,眼都快瞎了....)

16x16點陣一般會用74hc595驅動,所以要涉及到其他的知識,所以這裡就先不說了,下次再說。拜拜~☂

51微控制器 LED點陣

這次的程式是通過控制led點陣,點亮乙個 號。我們使用的是乙個8 8的電子,需要操作16bit,實現對行和列的管理,這點其實和矩陣按鍵是有些類似,只不過乙個是輸入,乙個是輸出,都是通過逐行掃瞄實現的 矩陣按鍵由於每次只檢查乙個按鍵,也可以使用行列掃瞄 下面是led點陣的原理圖 從上圖可以看出,每乙個...

51微控制器控制LED顯示漢字

2007 12 25 12 34 26 用51微控制器控制led顯示漢字,電路中行方向由p0口和p2口完成掃瞄,由於p0口沒有上拉電阻,因此接乙個4.7k 8的排阻上拉。如沒有排阻,也可用8個普通的4.7k 1 8w電阻。為提供負載能力,接16個2n5551的npn三極體驅動。列方向則由4 16解碼...

51微控制器之LED流水燈

在寫流水燈程式之前,我們了解一下資料型別。int在51中為2byte 型別位數 資料範圍 int16 32768 32767 short 16 32768 32767 long 32 2147483648 2147483647 unsigned int16 0 65535 unsigned shor...