目錄、數碼管循環顯示09、C語言語句結構、多位數碼管動態掃描顯示、099計數器顯示(靜態顯示)、七段碼字庫譯碼器74LS47應用、數碼管循環顯示09、目錄、使用AT89S52單片機的七個引腳P1口的P2.0P2.6依次接到共陰LED數碼管的ah七位段控制引腳,數碼管的公共端接地。 編寫程序,在數碼管上循環顯示09 十位數字。 , 任務, 預備知識:, 單片機系統中人機通訊的顯示部分主要有以下三種形式: 1. LED發光二極管顯示(已經學過); 2、LED數碼管顯示(本章學習); 3、LCD液晶顯示; 1LED數碼管 LED數碼管封裝有8個發光二極管,每節一個發光二極管,其字體結構如圖(a)所示。 選擇不同的字段點亮,可以顯示不同的字體。 例如,當a、b、c、d、e、f、g字段點亮時,顯示字符“8”; 當字段 a、f、g、c、d 為 on 時,顯示字符“5”。 圖(b)為單顆LED數碼管的引腳排列,圖中的com引腳為單顆LED數碼管的公共端。 ,(a)字體結構圖,返回本節,共陽極數碼管內部8個LED的陽極連在一起作為公共端; 只有當公共端接高電平時,數碼管才會亮。 共陰數碼管內部8個LED的陰極連在一起作為公共端; 只有公共端接低電平時數碼管才會亮。
,LED數碼管引腳及內部結構,返回本節,2.數碼管字體編碼,D7 D6 D5 D4 D3 D2 D1 D0,數碼管編碼規則,LED數碼管字體編碼表,返回本節,3。 數碼管的顯示方法 (1)動態顯示。 依次點亮每個數碼管的顯示模式。 即在一定時間內,只選擇一個數碼管的“位選擇端”,發出相應的字庫碼,在下一個時間段依次選擇另一個數碼管,發出相應的字庫代碼。 按照這個規律循環,可以使每個數碼管斷續顯示相應的字符。 這個過程稱為動態掃描顯示。 (2)靜態展示。 當碼管顯示某一字符時,相應的發光二極管常亮或常滅。 數碼管相互獨立,公共端常接地(共陰極)或+5V(共陽極)。 每個數碼管的八位段分別連接一個八位I/O口。 只要I/O口有字形碼輸出,數碼管就會顯示給定的字符并保持不變,直到I/O口輸出新的段碼。 ,返回本節, (1) 為8路同相三態雙向數據總線驅動芯片,具有雙向三態功能,可輸出或輸入數據。 結構如圖所示。 A、B:總線端,:( )三態使能端(低電平有效) DIR:( )方向控制端(DIR=“1”,信號從A傳到B;否則,信號從B傳到 A),4。
電路設計,返回本節,(2)。 數碼管顯示電路的設計是根據工作任務的要求進行的。 數碼管顯示電路由單片機最小應用系統,一塊1位共陰極LED數碼管,一塊74LS245驅動芯片加一個限流電阻RN1(RX8關鍵詞)構成,如圖在圖中。 ,返回本節, 5.程序設計, 1.數碼管顯示功能的實現分析 由于顯示數字09的字形代碼沒有規律可循,所以只能通過查表的方式來完成我們的需求。 這樣,我們就按照09這個數字的先后順序,把每個數字的字體代碼依次排好! 創建表(用數組實現)如下:,char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f;,2。 數碼管顯示程序如下: #include /include AT89X52.H header file char code table=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; 字符; void delay (void) char i,j,k; 對于(i=40;i0;i-)對于(j=40;j0;j-)對于(k=248;k0;k-); ,回到本節,void main(void) while(1) for(=0;兩個值作為一個比較,判斷其比較的結果是否滿足給定的條件。
關系運算的結果只有兩種可能,即“真”和“假”。 , 二、邏輯運算符與邏輯表達式、關系運算符描述的是單一條件。 ,1. 邏輯運算符(1)“&”(邏輯與)是二元運算符,當且僅當兩個操作數的值都為“真”時數碼管靜態顯示流程圖,運算結果為“真”,否則為假; (2) “|” (邏輯或)是一個二元運算符,當且僅當兩個操作數的值都為“假”時,運算結果為“假”,否則為真; (3) “!” (邏輯非)是一元運算符。 當操作數的值為“真”時,運算結果為“假”,當操作數的值為“假”時,運算結果為“真”。 ,2. 邏輯表達式 將關系表達式或邏輯量與邏輯運算符連接起來的公式稱為邏輯表達式。 一般邏輯表達式用于描述多個條件的組合。 ,注:至于運算涉及的數量,只要不為零,就視為“真”。 四、switch語句,在多分支程序中,當分支較多時,使用if嵌套程序冗長,可讀性降低。 這種情況下,可以使用C語言提供的switch語句。 , switch() case常量表達式1:語句1 case常量表達式2:語句2 case常量表達式n::語句n+1 注意事項: (1)每個case中常量表達式的值必須不同; (2)注意break語句的使用; (3) default 子句可以省略(除非必要)。
五、循環結構控制語句 1.while語句的特點是:先判斷表達式,再執行語句。 ,2. do-while語句 do-while語句的特點是先執行循環體,再判斷循環條件是否成立。 ,其一般形式如下: Do 循環體語句 while(); 注意 ”;” 是不可或缺的。 ,while和do-while的區別:前者如果條件不成立則不會執行循環體; 而后者即使條件不成立也會執行一次循環體語句。 ,3. for 語句 for ( 1; 2; 3) 兩個死循環:for (;); 2)求解表達式2,若其值為真,則執行for語句中指定的嵌入語句(循環體),若為假,則執行步驟(3),則結束循環; (3) 求解表達式 3; (4) 回到第2步繼續。 ,break語句:break語句結束整個循環過程,不再判斷循環條件是否為真。 break語句只能用在循環語句和switch語句中。 ,語句:該語句只是結束當前循環,而不是終止整個循環的執行。 該語句只能在循環語句中使用; 多個數碼管動態掃描顯示,目錄、顯示由6個共陰極LED數碼管組成,采用AT89S52單片機,P0口輸出顯示段碼,通過一個74LS245輸出到LED數碼管司機。 管,P1口輸出位碼(片選)給LED數碼管。
通過動態掃描程序使6位數碼管顯示“123456”。 ,任務:1.多路數碼管動態顯示電路設計,1.電路組成(1)單片機最小應用系統(2)一塊74LS245驅動芯片組成(3)限流與排除(RX8)(4) ) 6位數碼管, 2. 引腳分配 (1) P0口輸出顯示段碼P0.0P0.6通過一片74LS245依次接段碼口ag, P0口I/O輸出必須接一個外部上拉電阻; (2) P1口 輸出位碼P1.0P1.5依次接到位碼口16,如下圖所示。 ,電路圖改進措施,2.多位數碼管動態顯示程序設計,多位數碼管動態顯示功能分析數碼管靜態顯示流程圖,動態掃描逐一控制各數碼管COM端使各數碼管點亮轉動。 在依次打開數碼管的掃描過程中,每個數碼管的點亮時間極短(約1ms)。 但由于人眼視覺的暫留和發光二極管的余輝,給人的印象是一組穩定的顯示數據。 ,(1)優點可以節省I/O口資源; 硬件電路也比較簡單。 (2)缺點:顯示的穩定性不如靜態顯示; 它占用更多的CPU時間。 ,2. 動態掃描的優缺點, 3.動態掃描程序如下,#include /include AT89X52.H頭文件char code Tab=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F; 字符代碼 Col=0xfe,0xfd,0xfb,0xf7,0xef,0xdf; /位代碼 void Delay() char i;for(i=0;i250;i+); void main() / display 123456 char j;while(1 )for(j=1; j是指當數碼管顯示某個字符時,對應的發光二極管常亮或常滅。
, 2.靜態顯示的優缺點 (1)優點 較小的電流可以獲得較高的亮度; 更少的CPU時間被占用; 編程簡單; 顯示易于檢測和控制。 (2) 缺點 占用較多的I/O線; 硬件電路復雜,成本高; 只適用于顯示位數較少的場合。 ,3. 計數顯示實現分析 (1)單片機識別按鍵的過程; (2)單片機對正確識別的按鍵進行計數,計數滿后從0開始計數; 數顯,計數值為十六進制數,需要拆成十位和個位送出顯示。 計算計數值到10的余數得到個位; 計數值除以10得到十位; (4) 通過查表的方式分別顯示個位和十位。 ,