找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 39|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)做出租車計(jì)價(jià)器溢出(匯編)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
求大神解答,本程序里程超過10km價(jià)格溢出,請(qǐng)問該如何修改??
$NOMOD51
$INCLUDE (8051.MCU)

;==========================
; 常量/變量地址定義
;==========================
cDisplayBuffer        EQU        30H
cDisplayBit        EQU        3CH
Circumference  EQU 0B7H         ; 輪胎周長(zhǎng) = 183cm = 1.83m
StartpriceH        EQU 04H            ; 起步價(jià)高字節(jié)(0x04B0 = 1200 分 = 12 元)
StartpriceL        EQU 0B0H
PriceL         EQU 1AH          ; 每公里單價(jià)2.6元 × 10 = 26(十進(jìn)制)

;==========================
; 啟動(dòng)中斷向量
;==========================
ORG 0000H
JMP MAIN
ORG 0003H
JMP Milage
ORG 000BH
JMP Speed

;==========================
; 數(shù)碼管段碼表
;==========================
DispTable:       
DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH

;==========================
; 數(shù)碼管顯示子程序
;==========================
Display:
    MOV        A, cDisplayBit
    MOV        P2, A
    MOV        DPTR, #DispTable
    MOV        A, #cDisplayBuffer
    ADD        A, cDisplayBit
    MOV        R0, A
    MOV        A, @R0
    MOVC        A, @A+DPTR
    MOV         P1, A
    INC         cDisplayBit
    ANL        cDisplayBit, #15
    RET

;==========================
; 延時(shí)
;==========================
Delay:
    MOV         R0, #10
    MOV          R1, #10
    DJNZ         R1, $
    DJNZ        R0, $-4
    RET

;==========================
; 二進(jìn)制轉(zhuǎn) BCD(里程/價(jià)格通用)
;==========================
Bin:
    MOV        R0, #42H
    MOV        R1, #45H  
    CLR A
    MOV @R1,A
    INC R1
    MOV @R1,A
    INC R1
    MOV @R1,A
    INC R1
    MOV @R1,A
    PUSH 7
    MOV R7,#24
BD1:
    CLR C
    INC R0
    INC R0
    MOV A,@R0
    RLC A
    MOV @R0,A
    DEC R0
    MOV A,@R0
    RLC A
    MOV @R0,A
    DEC R0
    MOV A,@R0
    RLC A
    MOV @R0,A
    PUSH 1
    MOV A,@R1
    ADDC A,@R1
    DA A
    MOV @R1,A
    DEC R1
    MOV A,@R1
    ADDC A,@R1
    DA A
    MOV @R1,A
    DEC R1
    MOV A,@R1
    ADDC A,@R1
    DA A
    MOV @R1,A
    DEC R1
    MOV A,@R1
    ADDC A,@R1
    DA A
    MOV @R1,A
    POP 1
    DJNZ R7,BD1
    POP 7
    RET

;==========================
; 里程計(jì)算
;==========================
Calculatemilage:
      MOV A,R3
      MOV B,#Circumference
      MUL AB
      MOV 43H,B
      MOV 44H,A
      MOV A,R4
      MOV B,#Circumference
      MUL AB
      ADD A,43H
      MOV 43H,A
      MOV A,B
      ADDC A,#0
      MOV 42H,A
      RET

nextMilage:
      MOV A,47H
      MOV B,#10H
      DIV AB
      MOV 37H,A
      MOV A,46H
      MOV B,#10H
      DIV AB
      MOV 36H,B
      ADD A,#10
      MOV 35H,A
      MOV A,45H
      MOV B,#10H
      DIV AB
      MOV 34H,B
      RET
      
CalculateSPEED:
      MOV A,R6
      MOV B,#Circumference
      MUL AB
      MOV 42H,B
      MOV B,#24H
      MUL AB
      MOV 44H,A
      MOV 43H,B
      MOV A,42H
      MOV B,#24H
      MUL AB
      ADD A,43H
      MOV 43H,A
      MOV A,B
      ADDC A,#0
      MOV 42H,A
      
      RET
nextSPEED:
      MOV A,47H
      MOV B,#10H
      DIV AB
      MOV 3BH,B
      ADD A,#10
      MOV 3AH,A
      MOV A,46H
      MOV B,#10H
      DIV AB
      MOV 39H,B
      MOV 38H,A
      RET

CalculatePRICE:
      MOV A,34H
      CLR C
      SUBB A,#1
      JNC nextPRICE
      CLR C
      MOV A,35H
      SUBB A,#12
      JNC nextPRICE
      
      MOV 42H,#00H
      MOV 44H,#StartpriceL
      MOV 43H,#StartpriceH
      RET
      
      
nextPRICE:
      CLR C
      MOV A,36H
      SUBB A,#0
      MOV 44H,A
      MOV A,35H
      SUBB A,#12
      MOV 43H,A
      MOV A,34H
      SUBB A,#0
      MOV 42H,A
      
      MOV 46H,#00H
      MOV A,44H
      MOV B,#1
      MUL AB
      MOV 45H,A
      MOV A,43H
      MOV B,#10
      MUL AB
      ADD A,45H
      MOV 45H,A
      MOV A,#00
      ADDC A,#00
      MOV 46H,A
      MOV A,42H
      MOV B,#100
      MUL AB
      ADD A,45H
      MOV 45H,A
      MOV A,46H
      ADDC A,#00
      ADD A,B
      MOV 46H,A
      
      
      
      MOV A,45H
      MOV B,#priceL
      MUL AB
      MOV 53H,A
      MOV 52H,B

      
      MOV A,46H
      MOV B,#priceL
      MUL AB
      ADD A,52H
      MOV 52H,A
      MOV A,B
      ADDC A,#0
      MOV 51H,A
      
      MOV A,53H
      ADD A,#StartpriceL
      MOV 53H,A
      MOV A,52H
      ADDC A,#00
      ADD A,#StartpriceH
      MOV 52H,A
      MOV A,51H
      ADDC A,#00
      MOV 51H,A
      
      
      MOV 44H,53H
      MOV 43H,52H
      MOV 42H,51H

      
      RET
      
      
PlayPRICE:
      MOV A,48H
      MOV B,#10H
      DIV AB
      MOV 33H,B
      MOV 32H,A
      MOV A,47H
      MOV B,#10H
      DIV AB
      MOV 30H,A   
      MOV A,B
      ADD A,#10
      MOV 31H,A

      RET
MAIN:
      MOV R2,#100
       MOV    SP,#60H   
       MOV    TMOD,#01H
       MOV    TL1,#00H
       MOV    TH1,#0B8H
       SETB TR0
       SETB ET0
       SETB        IT0
       SETB        EX0
         SETB        EA  
DECIDE:
      JNB P3.7,WAIT
      SJMP DECIDE
WAIT:
     LCALL Calculatemilage
     LCALL Bin
     LCALL nextMilage
     LCALL CalculatePRICE
     LCALL Bin
     LCALL PlayPRICE
     LCALL CalculateSPEED
     LCALL Bin
     LCALL nextSPEED
     LCALL Display
     LCALL Delay
     JNB P3.7,WAIT
STOP:
     LCALL Display
     LCALL Delay
     JNB P3.7,RESTART
     SJMP STOP
RESTART:
      MOV R3,#00H
      MOV R4,#00H
      MOV R5,#00H
      MOV R6,#00H
      SJMP MAIN
     
     
Milage:
      PUSH PSW

      INC R3
      INC R5
      CJNE R3,#0FFH,OUT
      MOV R3,#0
      INC R4
      

OUT:
      POP PSW
      RETI

Speed:
      MOV 27H,A
      PUSH 27H
      PUSH PSW
     MOV    TL0,#00H
     MOV    TH0,#0B8H
     DJNZ R2,OUT2
     MOV A,R5
     MOV R6,A
     MOV R2,#100
     MOV R5,#00H
OUT2:
      POP PSW
      POP 27H
      MOV A,27H
      RETI
      END


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

使用道具 舉報(bào)

沙發(fā)
ID:1155980 發(fā)表于 2025-7-4 15:45 | 只看該作者
這個(gè)計(jì)價(jià)的要求是“里程是否大于3km,若不大于,則顯示為12元,若大于3km,則跳入計(jì)費(fèi)程序,先把里程減去3km,然后剩余的里程與2.6元做乘法,換算進(jìn)制后儲(chǔ)存到相應(yīng)的顯示內(nèi)存即可!
回復(fù)

使用道具 舉報(bào)

板凳
ID:1155980 發(fā)表于 2025-7-4 15:46 | 只看該作者
同時(shí)讓ai給我把起步里程2km改成3km他好像根本讀不懂,哪位大神知道該怎么修改
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表