1. 程式人生 > >(學習筆記)手把手教你學51微控制器:中斷與數碼管動態顯示

(學習筆記)手把手教你學51微控制器:中斷與數碼管動態顯示

一、c語言的陣列

1.1陣列的基本概念

陣列是具有相同資料型別的有序資料的組合,一般來講陣列定義後滿足以下三個條件:

(1)具有相同的資料型別

(2)具有相同的名字

(3)在儲存器中是被連續存放的

1.2陣列的宣告

資料型別 陣列名【陣列長度】;

(1)同一個陣列中的元素具有相同的資料型別。

(2)陣列名必須為字母、數字、下劃線組成且第一個字元必須是字母或者下劃線。

(3)陣列長度可以是常量或者常量表達式,且必須是正整數

1.3陣列的初始化

資料型別 陣列名【陣列長度】={初值列表};

1.4陣列的使用和賦值

(1)c語言程式中,是不能一次使用整個陣列的,只能使用陣列的單個元素。

(2)陣列元素的方括號裡的下標可以是整型常數、整型變數或者表示式,而陣列初始化方括號裡的數字必須是常熟而不能是變數。

(3)陣列整體賦值只能在初始化的時候進行,程式執行程式碼中只能對單個數碼賦值。

二、條件語句

2.1 if語句

 if……else

2.2 if……else if……else語句

2.3 switch語句

分支過多時可以採用switch語句,避免if……else配對出錯。

switch(表示式)

{

     case 常量表達式1:語句1;

    case 常量表達式2:語句2;

    …

    default:語句n+1;

}

首先計算“表示式”的值,然後從第一個case開始,與“常量表達式x”進行比較,若於當前值不相等,不執行冒號後面的語句,一旦發現和某個常量表達式的值相等,則執行之後的所有語句

改進:

switch(表示式)

{

     case 常量表達式1:語句1;break;

    case 常量表達式2:語句2;break;

    …

    default:語句n+1;break;

}

break,跳出當前迴圈,包括for或者while,同時還可以用來結束switch語句塊。

三、數碼管的動態顯示

3.1動態顯示的基本原理

動態顯示(動態掃描):多個數碼管顯示實際上是輪流點亮數碼管,利用人眼的視覺暫留(餘暉效應),看起來像是所有數碼管同時亮了。

完成一次全部數碼管的掃描需要10ms以內,只要重新整理頻率大於100Hz,即重新整理時間小於10ms,就可以做到無閃爍。

3.2數碼管顯示消隱

在數碼管位選和段選的瞬態會產生餘暉,為了避免可採取以下措施:

(1)重新整理之前關閉所有的段,改變位選後再開啟段。

賦值語句前加上 P0=0xFF

(2)關閉數碼管的位,賦值好之後再開啟。

在賦值語句前加上 ENLED=1 ,賦值重新整理語句完成後  ENLED=1

仍存在問題:亮度不一

例如在秒錶倒計時程式中由於每個數碼管的顯示時間為1s, 實際顯示時間為“1s+從上一次重新整理值到這一次重新整理值執行程式碼耗費的時間”,由於後者的時間差會導致幾個數碼管亮度不一。故需要採用其他思路解決這個問題。

四、微控制器中斷系統

4.1定時器中斷的應用

明確定時器和中斷不是一回事!

定時器是微控制器模組的一個資源,確確實實存在的一個模組,而中斷則是微控制器的一種運算機制。

標準的51微控制器中控制中斷的暫存器有兩個,一個是中斷使能暫存器,另一個是中斷優先順序暫存器

                                                IE----中斷使能暫存器的位分配(地址0xA8 可位定址 )

                   

                  

中斷使能暫存器IE的位0~5控制了 6 箇中斷使能,第 6 位沒用到,第 7 位是總開關。0~5位相當於分開關。故只要用到中斷就必須先寫 EA=1  。

                    

T0中斷,要使用這個中斷那麼就要把它的中斷使能為 ET0 置1。

中斷函式寫好後,每當滿足中斷條件而觸發中斷後,系統就會自動來呼叫中斷函式。

4.2中斷優先順序

中斷優先順序有兩種,一種是搶佔優先順序,一種是固有優先順序。

                   

IP的每一位表示對應中斷的搶佔優先順序,每一位的復位值都是0,當把某一位置1時,這一位的優先順序就比其他位的優先順序高。

當進入低優先順序中斷中執行時,如又發生了高優先順序的中斷,則立刻進入高優先順序中斷執行,處理完高優先順序級中斷後,再返回處理低優先順序中斷,這個過程就叫做 中斷巢狀 ,也稱為搶佔。所以搶佔優先順序的概念就是,優先順序高的中斷可以打斷優先順序低的中斷的執行,從而形成巢狀。當然反過來,優先順序低的中斷是不能打斷優先順序高的中斷的。

既然有搶佔優先順序,自然也有非搶佔優先順序,也成為 固有優先順序 。如表 6 - 5 中斷優先順序編號中,數字越小優先順序越高,不具有搶佔的特性。即使在低優先順序中斷執行過程中又發生了高優先順序的中斷,也只能等到低優先順序執行完之後才能得到響應。