實驗三 七段數碼顯示器

1.實驗內容編程

使用MCS-51彙編語言編寫程序,完成如下功能:編碼

1. 使用三個數碼管顯示十進制數值調試

2. 每隔0.1秒,該數值自動增一,到999後歸零繼續資源

3. 當開關S1按下時,暫停計數;S1鬆開時,恢復計數開發

2.顯示同步

本開發平臺有3個數碼管,使用串行方式鏈接在一塊兒,具體電路參見實驗原理。要想輸出一個字形碼,就須要從高位到低位依次向移位寄存器輸出8個比特。移位寄存器的數據線和時鐘線分別接到單片機的P4.5和P4.4管腳,可使用MCS-51裏面的位操做指令進行輸出。連續輸出3個字形,24個bit以後,欲顯示的字形將穩定地顯示在數碼管上,程序能夠轉而執行其餘工做。 七段字形的編碼方式須要經過實驗得到。這些編碼做爲程序中的常數,使用DB命令存放。在程序中,須要將數值轉換爲相應的字形編碼,可使用MOVC指令來完成。it

3.時間原理

本實驗要求的按時間顯示數值,直接經過軟件延時來實現,也就是若干次空循環來完成,不須要使用單片機內部的定時器等硬件資源。因爲在後面的實驗中也要使用軟件的延時子程序,所以這裏預先作準備。 本單片機使用12MHz主頻的晶振,結合MCS51的體系結構和指令時序,能夠計算每條指令的運行時間,也能夠經過Keil環境的調試功能來檢查程序片斷的執行時間。固然,最後能夠經過程序執行的整體運行結果來調整時間。但願同窗可以經過這個過程,得出一段可以精確到1ms的子程序,重複調用100次,從而達到定時0.1s的效果。從而完成實驗要求2。軟件

4.開關循環

在本實驗板上設置了兩個開關S1和S2,分佈接入到8031的P3.6和P3.7,開關按下時,輸入0,鬆開時,輸入1。利用這個開關完成實驗要求3。

5.實驗原理

本實驗採用3個74HC164級聯控制三個數碼管的顯示,具體實驗原理以下圖所示。其中使用單片機P4.5做爲模擬串口數據,使用P4.4模擬串口時鐘,CLR端接高電平。使用上一個74HC164的Q7做爲下一個74HC164的輸入端。

P4 EQU 0C0H

MOV P4.4, C

SETB P4.4

74HC164是高速CMOS 器件。74HC164是8位邊沿觸發式移位寄存器,串行輸入數據,而後並行輸出。數據經過兩個輸入端(A或B)之一串行輸入;任一輸入端能夠用做高電平使能端,控制另外一輸入端的數據輸入。兩個輸入端或者鏈接在一塊兒,或者把不用的輸入端接高電平,必定不要懸空。

時鐘 (CLK) 每次由低變高時,數據右移一位,輸入到Q0,Q0 是兩個數據輸入端(A和B)的邏輯與,它將上升時鐘沿以前保持一個創建時間的長度。

主復位(CLR)輸入端上的一個低電平將使其它全部輸入端都無效,同時非同步地清除寄存器,強制全部的輸出爲低電平。

 

彙編程序:

ORG 0000H ;復位起始地址
LJMP START ;中間地址保留給中斷向量表
ORG 0050H ;程序實際起始地址

START:
P4 EQU 0C0H
P4SW EQU 0BBH ;
CLK EQU P4.4 ;時鐘線
DAT EQU P4.5 ;數據線
SW EQU P3.6
MOV DPTR,#TAB
MOV P4SW,#70H
LP:
MOV R6,#0 ;計數
MOV R5,#0
MOV R4,#0
LOOP:
MOV A,R6 ;加入累加器
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表指令
LCALL SHOW

MOV A,R5 ;加入累加器
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表指令
LCALL SHOW

MOV A,R4 ;加入累加器
MOV DPTR,#TAB
MOVC A,@A+DPTR ;查表指令
LCALL SHOW

LCALL DELAY

PAUSE:
NOP
JNB SW,PAUSE ;按下S1,暫停

 

INC R6 ;每次計數+1 CJNE R6,#10,LOOP ;進位 INC R5 MOV R6,#0 CJNE R5,#10,LOOP ;比較兩個操做數是否相等,若是不相等則轉移 INC R4 MOV R5,#0 CJNE R4,#10,LOOP MOV R4,#0 LJMP LOOP; ;跳回循環計數 SHOW: MOV R0,#8 SLP: CLR CLK ;時鐘線輸出低電平 RLC A ;累加器A,將A中欲顯示的字符碼右移一位,最低位存入C中 MOV DAT,C SETB CLK ;時鐘線高電平 DJNZ R0,SLP ;減一不爲0轉到,繼續輸出字符碼 RET DELAY: MOV R2,#199 ;外循環 0.1s;[1 + 2 × 250] × 1us = 501us LOOPS:MOV B, #250 ;內循環 [1 + (501 + 2)×199] = 1000.98ms LOOPR:DJNZ B, LOOPR DJNZ R2,LOOPS RETTAB:DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND

相關文章
相關標籤/搜索