程序要实现的功能是:按下k1数码管显示0,按下k2数码管显示1
电路如下(8个共阴极7段数码管,两个74HC573驱动,只有一个数码管显示,初始时不显示):
出现的问题:初始时数码管不应该有显示,但是实际上数码管显示8.
程序代码如下:
BIAOZHI1 BIT 00H
BIAOZHI2 BIT 01H
ORG 0000H
SJMP START
ORG 0030H
;--------------初始化------------
START: MOV SP, #70H
MOV 40H, #0FFH
;MOV P0, #00h
MOV P0, #01111111b
SETB P2.7
CALL DELAY
CLR P2.7
MOV P0, #00h
SETB P2.6
;SETB P2.6
;CALL DELAY
CLR BIAOZHI1
CLR BIAOZHI2
;--------------主程序------------
MAIN: CALL KEY
CALL DISPLAY
SJMP MAIN
;--------------按程序------------
KEY: JNB P3.0, K1
JNB P3.1, K2
FANHUI: RET
K1: CALL DELAY
JB P3.0, FANHUI
JNB P3.0, $
MOV 40H, #3FH
RET
K2: CALL DELAY
JB P3.1, FANHUI
JNB P3.1, $
MOV 40H, #06H
RET
;------------处理子程序----------
DISPLAY:
MOV P0, #00h
MOV P0, 40H
RET
;---------------------------------
DELAY: MOV R0, #50
D2: MOV R1, #100
D1: DJNZ R1, D1
DJNZ R0, D2
RET
END
我感觉问题出在初始化那个位置,P2.7置位,选择哪一个数码管显示,P2.7清零,锁存。这一步是正常的。
但是我本来想让P0=#00h,置位P2.6,使得初始化的时候数码管不显示,但是不好使。
而按K1的时候数码管显示0,按K2的时候数码管显示1,这一效果是正常的。
不知道哪里出了问题,希望大神指教!
|