找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1749|回復: 5
打印 上一主題 下一主題
收起左側(cè)

新手求助單片機I/O 直接LCD加數(shù)器

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:809671 發(fā)表于 2020-12-2 14:56 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
問題: 按一下開關(guān)數(shù)字加一,按到00062時亂碼,再按到00065時自動復位00000.
更改: SP,#30 ,加到00102時亂碼,00105時自動復位00000.
問題已糾結(jié)了一段時間,能力所限未能解決,懇請師兄師姐相助,感激不盡.



單片機源程序如下:
;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
;計數(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
;設定SEG推挽輸出
;設定COM高阻抗
                                MOV P3M1,#00000000B                                
                                MOV P3M0,#11111111B
                                MOV P1M1,#11111000B
                                MOV P1M0,#00000001B
                                MOV P5M1,#11111111B
                                MOV P5M0,#00000000B
;------------------------------------------------
;R0=個位數(shù),R1=十位數(shù)....
;預載入 "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"後停止
;------------------------------------------------
;個位數(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:

;顯示個位數(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=設定高阻抗
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


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發(fā)
ID:235200 發(fā)表于 2020-12-2 19:04 | 只看該作者
跟堆棧指針關(guān)系不大,程序中并無中斷,子程序調(diào)用也不多,問題主要是計數(shù)值存放在寄存器后的處理問題
回復

使用道具 舉報

板凳
ID:809671 發(fā)表于 2020-12-3 11:21 | 只看該作者
今天再測試後更新:
SP,#80H ,按一下開關(guān)數(shù)字加一,按到00063,64時亂碼,再按一下時單片機自動復位 00000.
更改: SP,#30H ,情況一樣.,按到00063,64時亂碼,再按一下時單片機自動復位 00000.
回復

使用道具 舉報

地板
ID:88256 發(fā)表于 2020-12-3 12:29 | 只看該作者
沒細看,感覺流程有點混亂,為什么加法程序不放在一起?管它有沒進位,先處理完加法再一起送顯示
回復

使用道具 舉報

5#
ID:809671 發(fā)表于 2020-12-3 13:30 | 只看該作者
hhdsdy 發(fā)表于 2020-12-3 12:29
沒細看,感覺流程有點混亂,為什么加法程序不放在一起?管它有沒進位,先處理完加法再一起送顯示

是邊想邊寫的有點亂,碰到問題就停下來了,還有其他功能未寫,最後才優(yōu)化.
以為很容易怎知都有困難.
回復

使用道具 舉報

6#
ID:809671 發(fā)表于 2020-12-3 18:39 來自觸屏版 | 只看該作者
csmyldl 發(fā)表于 2020-12-2 19:04
跟堆棧指針關(guān)系不大,程序中并無中斷,子程序調(diào)用也不多,問題主要是計數(shù)值存放在寄存器后的處理問題

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

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復 返回頂部 返回列表