標(biāo)題: 新手求助單片機(jī)I/O 直接LCD加數(shù)器 [打印本頁]

作者: leehk88    時(shí)間: 2020-12-2 14:56
標(biāo)題: 新手求助單片機(jī)I/O 直接LCD加數(shù)器
問題: 按一下開關(guān)數(shù)字加一,按到00062時(shí)亂碼,再按到00065時(shí)自動(dòng)復(fù)位00000.
更改: SP,#30 ,加到00102時(shí)亂碼,00105時(shí)自動(dòng)復(fù)位00000.
問題已糾結(jié)了一段時(shí)間,能力所限未能解決,懇請(qǐng)師兄師姐相助,感激不盡.



單片機(jī)源程序如下:
;20201202
;STC15W202S
;5位數(shù)LCD 加數(shù)器
;I/O口直接輸出
;SEG=P3.0~P3.3,P3.6~P3.7,P1.1
;COM1~COM5=P1.3~P1.5,P5.4,P5.5
;計(jì)數(shù)開關(guān)=P1.2
;RC:11.0592MHz

                                P1M1 EQU 0x91
                                P1M0 EQU 0x92
                                P3M1 EQU 0xB1
                                P3M0 EQU 0xB2
                                P5M1 EQU 0xC9
                                P5M0 EQU 0xCA
                                P5      EQU 0C8H
;------------------------------------------------
                        ORG 0000H
                        AJMP SETTING
                  
                        ORG 100H
;------------------------------------------------                                                        
SETTING:                  MOV SP, #80H
;設(shè)定SEG推挽輸出
;設(shè)定COM高阻抗
                                MOV P3M1,#00000000B                                
                                MOV P3M0,#11111111B
                                MOV P1M1,#11111000B
                                MOV P1M0,#00000001B
                                MOV P5M1,#11111111B
                                MOV P5M0,#00000000B
;------------------------------------------------
;R0=個(gè)位數(shù),R1=十位數(shù)....
;預(yù)載入 "00000"
                                MOV R0,#0
                                MOV R1,#0
                                MOV R2,#0
                                MOV R3,#0
                                MOV R4,#0
;------------------------------------------------
;等P1.2高電位(通過開關(guān))         
WAIT_SW_H:             ACALL DISP_ALL;掃瞄顯示全部
                                JNB P1.2,WAIT_SW_H;P1.2=0,JMP

;等P1.2低電位(通過開關(guān))                                                                                                        
WAIT_SW_L:              ACALL DISP_ALL;掃瞄顯示全部
                                JB P1.2,WAIT_SW_L;P1.2=1,JMP
                                ACALL DISP_ALL
                                    

CALC:                                      CJNE R0,#9,INC_R0;R0少於9,跳轉(zhuǎn)R0+1
                                               MOV R0,#0;R0=9,清0
                                               CJNE R1,#9,INC_R1
                                               MOV R1,#0
                                               CJNE R2,#9,INC_R2
                                                MOV R2,#0
                                                CJNE R3,#9,INC_R3
                                                MOV R3,#0
                                                CJNE R4,#9,INC_R4
                                               AJMP CALC;累加至"99999"後停止
;------------------------------------------------
;個(gè)位數(shù)加1
INC_R0:           INC R0
                      AJMP WAIT_SW_H
                                                
;十位數(shù)加1
INC_R1:        INC R1
                   AJMP WAIT_SW_H
;百位數(shù)加1                                                
INC_R2:        INC R2
                  AJMP WAIT_SW_H
;千位數(shù)加1
INC_R3:       INC R3
                 AJMP WAIT_SW_H
;萬位數(shù)加1                                                
INC_R4:       INC R4
                 AJMP WAIT_SW_H
;------------------------------------------------
;顯示全部
DISP_ALL:

;顯示個(gè)位數(shù)
                  MOV A,R0
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P5M1,#11011111B
                  MOV P5M0,#00100000B                 
                  SETB P5.5                  
                  ACALL DELAY_1MS
                  ACALL COM_HI_IMPEDANCE
                  
                 MOV A,R0
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                  CPL A
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                   MOV P5M1,#11011111B
                  MOV P5M0,#00100000B        
                  CLR P5.5                          
                  ACALL DELAY_1MS
                   ACALL COM_HI_IMPEDANCE
                  
; 顯示十位數(shù)
                  MOV A,R1
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P5M1,#11101111B
                  MOV P5M0,#00010000B
                  SETB P5.4
                  ACALL DELAY_1MS                  
                  ACALL COM_HI_IMPEDANCE
                  
                 MOV A,R1
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                  CPL A
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P5M1,#11101111B
                  MOV P5M0,#00010000B                  
                  CLR P5.4
                  ACALL DELAY_1MS
                  ACALL COM_HI_IMPEDANCE
                  
;顯示百位數(shù)
                  MOV A,R2
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P1M1,#11011000B
                  MOV P1M0,#00100001B
                  SETB P1.5
                  ACALL DELAY_1MS                  
                  ACALL COM_HI_IMPEDANCE
                  
                 MOV A,R2
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                  CPL A
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P1M1,#11011000B
                  MOV P1M0,#00100001B
                  CLR P1.5
                  ACALL DELAY_1MS
                  ACALL COM_HI_IMPEDANCE
                  
;顯示千位數(shù)
                  MOV A,R3
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P1M1,#11101000B
                  MOV P1M0,#00010001B
                  SETB P1.4
                  ACALL DELAY_1MS                  
                  ACALL COM_HI_IMPEDANCE
                  
                 MOV A,R3
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                  CPL A
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P1M1,#11101000B
                  MOV P1M0,#00010001B
                  CLR P1.4
                  ACALL DELAY_1MS
                  ACALL COM_HI_IMPEDANCE                  
                  
;顯示萬位數(shù)
                  MOV A,R4
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P1M1,#11110000B
                  MOV P1M0,#00001001B
                  SETB P1.3
                  ACALL DELAY_1MS                  
                  ACALL COM_HI_IMPEDANCE
                  
                 MOV A,R4
                 MOV DPTR,#TABLE                  
                 MOVC A,@A+DPTR
                  CPL A
                 MOV P3,A
                  RLC A
                  RLC A
                  RLC A
                  MOV P1.0,C
                  MOV P1M1,#11110000B
                  MOV P1M0,#00001001B
                  CLR P1.3
                  ACALL DELAY_1MS
                  ACALL COM_HI_IMPEDANCE
                 RET
;------------------------------------------------
;COM1~COM5=設(shè)定高阻抗
COM_HI_IMPEDANCE:
                               MOV P1M1,#11111000B
                                MOV P1M0,#00000001B
                                MOV P5M1,#11111111B
                                MOV P5M0,#00000000B        
                        RET                  
;------------------------------------------------
DELAY_1MS:
                       MOV R7,#10
DL1_1MS:         MOV R6,#10
DL2_1MS:         MOV R5,#26
DL3_1MS:         DJNZ R5,DL3_1MS
                        DJNZ R6,DL2_1MS
                        DJNZ R7,DL1_1MS
                        RET
;------------------------------------------------                  
TABLE:  
          DB 008H,0BDH,054H,094H,0B1H,092H,02H,0BCH,010H,090H;0~9
;------------------------------------------------
                  END



作者: csmyldl    時(shí)間: 2020-12-2 19:04
跟堆棧指針關(guān)系不大,程序中并無中斷,子程序調(diào)用也不多,問題主要是計(jì)數(shù)值存放在寄存器后的處理問題
作者: leehk88    時(shí)間: 2020-12-3 11:21
今天再測(cè)試後更新:
SP,#80H ,按一下開關(guān)數(shù)字加一,按到00063,64時(shí)亂碼,再按一下時(shí)單片機(jī)自動(dòng)復(fù)位 00000.
更改: SP,#30H ,情況一樣.,按到00063,64時(shí)亂碼,再按一下時(shí)單片機(jī)自動(dòng)復(fù)位 00000.
作者: hhdsdy    時(shí)間: 2020-12-3 12:29
沒細(xì)看,感覺流程有點(diǎn)混亂,為什么加法程序不放在一起?管它有沒進(jìn)位,先處理完加法再一起送顯示
作者: leehk88    時(shí)間: 2020-12-3 13:30
hhdsdy 發(fā)表于 2020-12-3 12:29
沒細(xì)看,感覺流程有點(diǎn)混亂,為什么加法程序不放在一起?管它有沒進(jìn)位,先處理完加法再一起送顯示

是邊想邊寫的有點(diǎn)亂,碰到問題就停下來了,還有其他功能未寫,最後才優(yōu)化.
以為很容易怎知都有困難.
作者: leehk88    時(shí)間: 2020-12-3 18:39
csmyldl 發(fā)表于 2020-12-2 19:04
跟堆棧指針關(guān)系不大,程序中并無中斷,子程序調(diào)用也不多,問題主要是計(jì)數(shù)值存放在寄存器后的處理問題

確認(rèn)了與堆棧指針無關(guān)。
沒有開全局中斷及看門狗,供電電壓穩(wěn)定,就是不明白為何會(huì)軟件復(fù)位。
與編程器有關(guān)嗎?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1