新手求助数码管显示有误、报警装置不动作

2019-07-18 13:40发布

我在做一个客车超载检测系统,感觉写的程序比较简单清楚,但是功能就是实现不了,我通过P1.3(加)和P1.4(减)来设置规定人数, 通过图片右下的两个D触发器来设置上车的中断,通过中断来计数实际的人数,通过实际人数和规定人数做差来完成报警,感觉思路很清晰,硬件电路感觉也没错,程序的标注比较全面,请求大侠帮忙看看………(其中司机钥匙位不开始的话,报警装置不动作)
YAOSHI_SET BIT   P1.2   ;司机钥匙
ADD_SET BIT  P1.3 ;设置加位
DEC_SET  BIT  P1.4 ;设置减位
JIANCE  EQU  30H    ;检测位地址赋值
SHEZHI   EQU  80H    ;设置位地址赋值
ORG     0000H
LJMP     MAIN
ORG     000BH
LJMP     IT0P
ORG     001BH
LJMP     IT1P
ORG    0050H
MAIN: MOV   SP,#60H              ;设置堆栈区
MOV    TMOD,#66H    ;设置工作方式2
MOV    TL0,#0FFH             ;设置初值
MOV    TH0,#0FFH                    
MOV    TL1,#0FFH            ;设置初值
MOV    TH1,#0FFH
SETB    TR1  ;启动T1工作
SETB    ET1  ;允许T1中断
SETB    TR0  ;启动T0工作
SETB    ET0  ;允许T0中断
SETB    EA      ;开总中断允许
MOV  DPTR,#TABLE
MOV  SHEZHI,#0 ;初始化
MOV  JIANCE,#0
MOV P2,#0F3H          ;设置数码管位选、设置F3目的在于避免使继电器初始误动作,因为我们用的是7406反相驱动器
MOV P0,#3FH              ;数码管段选的初始赋值
START: LCALL   AJ     ;长调用AJ
LCALL   CONTROL  
LJMP START
;**************************************************
IT0P:  PUSH    PSW    ;通过两个中断服务来改变检测值
PUSH    ACC
INC     JIANCE
POP     ACC
POP     PSW
REti
;******************
IT1P:  PUSH   PSW
PUSH   ACC
DEC    JIANCE      
POP    ACC
POP    PSW      
RETI
;****************************************************
;判断是否有控制键按下,是哪一个键按下
AJ:   LCALL  DISPLAY     ;嵌套长调用显示
JNB ADD_SET,S1   
JNB DEC_SET,S2   
RET
S1:   LCALL DELAY   ;延时消抖
JB ADD_SET,AJ   ;若的确加键按下,执行K1,否则返回按键
K1:     INC   SHEZHI                     
MOV  A,SHEZHI
CJNE  A,#40,J1    ;设置人数超过40人自动归零                        
MOV  SHEZHI,#0
LJMP  AJ
S2:   LCALL  DELAY
JB  DEC_SET,AJ   ;若的确减键按下,执行K2,否则返回按键
K2:   DEC   SHEZHI                       
MOV  A,SHEZHI
CJNE  A,#40,J2                          
MOV  SHEZHI,#0
LJMP  AJ
      ;**************************
;等待按键抬起
J1: JB     ADD_SET,AJ
LCALL DISPLAY
SJMP    J1
J2:  JB    DEC_SET,AJ
LCALL DISPLAY
SJMP J2
;****************************************************************
CONTROL: CLR   C
MOV    A,SHEZHI
SUBB   A,JIANCE
JNC    MIE
JB     YAOSHI_SET,CONTROL      ;司机钥匙未启动前,声光报警部分不动作
LCALL  DELAY
JNC    YAOSHI_SET,ZHIXING
RET
ZHIXING:CLR     P2.7     ;继电器工作,锁定电路,并用发光二极管指示
CLR     P1.0   ;蜂鸣器工作报警
LOOP:CLR     P1.1   ;发光二极管亮并且闪烁
LCALL   DELAY1
LCALL   DELAY1
SETB     P1.1
LCALL   DELAY1
SJMP LOOP  
;*************************
MIE:    SETB     P2.7      ;关断声光报警,关闭继电器
SETB     P1.1
SETB     P1.0
RET
;*****************************************************************
;显示控制子程序
DISPLAY:MOV  A,JIANCE         ;显示车内检测人数
MOV    B,#10
DIV    AB        
CLR    P2.1    ;先显示十位数字,个位位选置高
MOVC    A,@A+DPTR
MOV  P0,A
LCALL  DELAY      ;延迟
CLR    P2.0      ;不选择十位了
MOV  A,B
SETB  P2.1       ;显示个位数字
MOVC    A,@A+DPTR
MOV  P0,A
LCALL   DELAY       ;再次余辉延迟
CLR  P2.1           ;个位也不选择了
RET
;****************************************************************
TABLE:DB     3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DB  3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
DELAY:  MOV R7,#40
D3:MOV    R6,#125
D2:DJNZ R6,D2   
DJNZ R7,D3
RET                  ;一共延时约为10ms,并非精确值
DELAY1:  MOV  R5,#100
D1: DJNZ R5,D1
RET   ;发光二极管闪烁延时
END
整体电路图.jpg
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。