微機介面實驗 數碼管顯示程式詳解

2021-10-12 07:37:38 字數 1654 閱讀 3180

本次講解的針對的是共陰極數碼管,先把原理圖和**放上來

數碼管裡共8個led,由於說明了給定的是共陰極數碼管,即陰極是接在一起的,通過原理圖下方的7407驅動器接在了x1-x6,陽極分別通過1k電阻上拉。所以當x1-x6接8255的io口時,可以通過io口輸出低電平,將陰極拉低。同時8個段選a-dp也引出了外部介面可以接到8255io上,通過8255io選擇具體是哪乙個led亮,所以點亮數碼管的原理已經很清楚了,x1-x6可以選擇哪乙個數碼管亮,a-dp可以選擇數碼管上具體的哪一段led亮。

本**對應的8255 a0-a5連x1-x6,b口連a-dp。

接下來看顯示程式,push ax就不多說了,防止影響呼叫前後的程式,mov dl,0dfh 和mov al, dl 這兩句,實際上就是將11011111給了al。

接下來看again,push dx就是將你現在的選中某個數碼管的位碼儲存起來,對應上文的11011111,一會要用的時候pop就可以了。接著通過8255的a口輸出了al現在的值,本文沒給出來,連線圖中,8255的a口a0-a5接的是x1-x6,當然根據自己的連線可以更改這裡的數字和使用的io口,所以其實就是向x1-x6口輸出了011111,通過7407緩衝,將數碼管1的陰極拉低了,其他都為高,也就是選中了第乙個數碼管,然後就到了mov al,[si] 剛才將si裡的值賦為了3000,其實前文的**裡是將3000作為了顯示緩衝區的,也就是此時的偏移位址3000對應的位址中存放著要顯示的數的十進位制形式,那麼此時al的值就應該是想顯示的值的,然後通過mov bx,offset dtalbe,將dtale表的偏移位址放到了bx,接著將ax的高8位清0,然後通過add指令,將ax與bx相加,也就是將要顯示的數加到了bx存放的值上,此時,通過mov al,[bx] 將bx中的值對應的偏移位址 加上 段基址 所合成的位址中 對應的值放到了al去,也就是將dtable對應你要顯示的數的段選碼放到了al去,這裡其實就是對應了彙編裡的xlat指令。通過表的首位址和你給予的表中的偏移位址,找到了你想要的數的位址,此處bx存放的就是表的首位址,al原來存放的就是對應到表中的偏移位址,比如你想要表裡5對應的顯示碼,那麼al就是5,此時通過上述操作,執行結果就是al中存放著5對應的顯示碼。然後通過接著8255b口的a-dp,輸入顯示碼,就可以在這個數碼管顯示你想顯示的數字。然後延時,si自增去找你的下乙個想顯示的數字,此時pop dx,將位碼放到al,test al,01h就是想測試一下你的位碼最後一位是不是0,因為下文的ror是迴圈右移,想顯示6個數碼管的6個數字,就要迴圈位移6次,最後就到了11111110,此時的位碼最後一位是0,代表每個管子都顯示了對應的數字了,此時test就會使標誌位變0,然後jz就可以跳轉到結束去了,否則代表還沒有把每個數碼管都設定顯示的數字,就要迴圈右移位碼,然後跳轉回again選擇下乙個數碼管,根據si對應的位址中存放的數,繼續顯示。

以上就是本次的講解,純屬個人理解,如有不對,請指正

數碼管顯示實驗

實驗目的 通過實驗,掌握如何通過74hc595擴充套件io口,掌握如何運用動態掃瞄的方法驅動多位數碼管 實驗內容 判斷按鍵sw8 int1 是否按下,並對按鍵次數計數,顯示在數碼管之上 微控制器剛啟動後,數碼管顯示為全0,當第一次按下sw8後,數碼管顯示0001,當第二次按下sw8後,數碼管顯示00...

按鍵數碼管顯示實驗

要求 能夠實現本微控制器按下鍵盤,能夠在數碼管上顯示鍵盤值。連線 將片選cs0鏈結到key led cs。define ledlen 6 xdata unsigned char outbit at 0x8002 位控制口 xdata unsigned char outseg at 0x8004 段控...

FPGA之靜態數碼管顯示實驗

硬體原理圖 硬體介面定義 如下 module seg led static top input sys clk,input sys rst n,output 5 0 seg wei,output 7 0 seg duan wire time flag wire clk time count u ti...