51單片機教程:動態掃描顯示接口電路及程序
DISP:
PUSH ACC ;ACC入棧
PUSH PSW ;PSW入棧
MOV A,DISPBUFF ;取第一個待顯示數
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形碼
MOV P0,A ;將字形碼送P0位(段口)
CLR FIRST ;開第一位顯示器位口
LCALL DELAY ;延時1毫秒
SETB FIRST ;關閉第一位顯示器(開始準備第二位的數據)
MOV A,DISPBUFF+1 ;取顯示緩沖區的第二位
MOV DPTR,#DISPTAB
MOVC A,@A+DPTR
MOV P0,A ;將第二個字形碼送P0口
CLR SECOND ;開第二位顯示器
LCALL DELAY ;延時
SETB SECOND ;關第二位顯示
POP PSW
POP ACC
RET
DELAY: ;延時1毫秒
PUSH PSW
SETB RS0
MOV R7,#50
D1: MOV R6,#10
D2: DJNZ R6,$
DJNZ R7,D1
POP PSW
RET
DISPTAB:DB 28H,7EH,0a4H,64H,72H,61H,21H,7CH,20H,60H
END
從上面的單片機例程中能看出,動態掃描顯示必須由CPU持續地調用顯示程序,才能保證持續持續的顯示。
上面的這個程序能實現數字的顯示,但不太實用,為什么呢?這里僅是顯示兩個數字,并沒有做其他的工作,因此,兩個數碼管輪流顯示1毫秒,沒有問題,實際的工作中,當然不可能只顯示兩個數字,還是要做其他的事情的,這樣在二次調用顯示程序之間的時間間隔就不一不定了,如果時間間隔比較長,就會使顯示不連續。而實際工作中是很難保證所有工作都能在很短時間內完成的。況且這個顯示程序也有點“浪費”,每個數碼管顯示都要占用1個毫秒的時間,這在很多合是不允許的,怎么辦呢?我們能借助于定時器,定時時間一到,產生中斷,點亮一個數碼管,然后馬上返回,這個數碼管就會一直亮到下一次定時時間到,而不用調用延時程序了,這段時間能留給主程序干其他的事。到下一次定時時間到則顯示下一個數碼管,這樣就很少浪費了。
DIY機械鍵盤相關社區:機械鍵盤DIY













評論