程序要实现的功能是:按下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,这一效果是正常的。
不知道哪里出了问题,希望大神指教!
|