51單片機(jī)教程:動(dòng)態(tài)掃描顯示接口電路及程序
Counter EQU 59H ;計(jì)數(shù)器,顯示程序通過它得知現(xiàn)正顯示哪個(gè)數(shù)碼管
FIRST EQU P2.7 ;第一位數(shù)碼管的位控制
SECOND EQU P2.6 ;第二位數(shù)碼管的位控制
DISPBUFF EQU 5AH ;顯示緩沖區(qū)為5AH和5BH
ORG 0000H
AJMP START
ORG 000BH ;定時(shí)器T0的入口
AJMP DISP ;顯示程序
ORG 30H
START:
MOV SP,#5FH ;設(shè)置堆棧
MOV P1,#0FFH
MOV P0,#0FFH
MOV P2,#0FFH ;初始化,所顯示器,LED滅
MOV TMOD,#00000001B ;定時(shí)器T0工作于模式1(16位定時(shí)/計(jì)數(shù)模式)
MOV TH0,#HIGH(65536-2000)
MOV TL0,#LOW(65536-2000)
SETB TR0
SETB EA
SETB ET0
MOV Counter,#0 ;計(jì)數(shù)器初始化
MOV DISPBUFF,#0 ;第一位始終顯示0
MOV A,#0
LOOP:
MOV DISPBUFF+1,A ;第二位輪流顯示0-9
INC A
LCALL DELAY
CJNE A,#10,LOOP
MOV A,#0
AJMP LOOP ;在此中間能按排任意程序,這里僅作示范。
;主程序到此結(jié)束
DISP: ;定時(shí)器T0的中斷響應(yīng)程序
PUSH ACC ;ACC入棧
PUSH PSW ;PSW入棧
MOV TH0,#HIGH(65536-2000) ;定時(shí)時(shí)間為2000個(gè)周期,約2170微秒(11.0592M)
MOV TL0,#LOW(65536-2000)
SETB FIRST
SETB SECOND ;關(guān)顯示
MOV A,#DISPBUFF ;顯示緩沖區(qū)首地址
ADD A,Counter
MOV R0,A
MOV A,@R0 ;根據(jù)計(jì)數(shù)器的值取對(duì)應(yīng)的顯示緩沖區(qū)的值
MOV DPTR,#DISPTAB ;字形表首地址
MOVC A,@A+DPTR ;取字形碼
MOV P0,A ;將字形碼送P0位(段口)
MOV A,Counter ;取計(jì)數(shù)器的值
JZ DISPFIRST ;如果是0則顯示第一位
CLR SECOND ;不然顯示第二位
AJMP DISPNEXT
DISPFIRST:
CLR FIRST ;顯示第一位
DISPNEXT:
INC Counter ;計(jì)數(shù)器加1
MOV A,Counter
DEC A ;如果計(jì)數(shù)器計(jì)到2,則讓它回0
DEC A
JZ RSTCOUNT
AJMP DISPEXIT
RSTCOUNT:
MOV Counter,#0 ;計(jì)數(shù)器的值只能是0或1
DISPEXIT:
POP PSW
POP ACC
RETI
DIY機(jī)械鍵盤相關(guān)社區(qū):機(jī)械鍵盤DIY
評(píng)論