⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.asm

📁 基于51单片机系统的出租车计价器程序
💻 ASM
字号:
;计价器源程序 

DAY_DANJIA EQU 5FH ;白天单价
NIGHT_DANJIA EQU 5EH
REDLIGHT_DANJIA EQU 5DH
DANJIA EQU 5CH
DAYSTART_PRICE EQU 5BH ;白天起步价
NIGHTSTART_PRICE EQU 5AH
PRICEL EQU 59H
PRICEH EQU 58H
DISTANCE EQU 57H ;行车距离
LEDDANJIAL EQU 56H ;单价显示缓冲区
LEDDANJIAH EQU 55H
LEDPRICE1 EQU 54H ;金额显示缓冲
LEDPRICE2 EQU 53H
LEDPRICE3 EQU 52H
LEDDISTANCEL EQU 51H ;路程显示缓冲区
LEDDISTANCEH EQU 50H

S1 BIT P1.0
S2 BIT P1.1
S3 BIT P1.2
S4 BIT P1.3
S5 BIT P1.4
S6 BIT P1.5

ORG 8000H
AJMP MAIN
ORG 8003H
AJMP REDLIGHT
ORG 800BH
AJMP TIME0
ORG 801BH
AJMP TIME1

ORG 8030H
MAIN: MOV SP,#60H
MOV TMOD, #22H ;T0,T1为8位自动重装载
MOV TH0, #250 ;初始时间常数
MOV TL0, #250
MOV TH1, #60
MOV TL1, #60
SETB EA ;总中断允许
SETB ET0 ;T0中断允许
SETB ET1
SETB EX0  ;外部中断允许
SETB IT0  ;下降沿触发
SETB IT1
CLR RS0
CLR RS1 ;设置第0组工作寄存器

;RAM单元初始化
MOV DAY_DANJIA,#07H ;白天价格初始化
MOV NIGHT_DANJIA,#09H ;晚上价格初始化
MOV REDLIGHT_DANJIA,#03H ;中途等待初始化
MOV DAYSTART_PRICE, #60 ;白天起步价初始化
MOV NIGHTSTART_PRICE,#70 ;晚上起步价初始化
MOV DISTANCE, #00H

; 键盘扫描主程序
KEY_1: 
ACALL CLEAR ;清0复位显示
ACALL T100MSD  
ACALL T100MSD   
JB S1,KEY_1  ;每200ms扫描一次
ACALL YUYIN1
KEY_2:
ACALL T100MSD
ACALL T100MSD
JB S3,DAY
JB S4,NIGHT
JMP KEY_2
KEY_3:
ACALL T100MSD
ACALL T100MSD
JNB S2,KEY_3 
ACALL YUYIN2

;
ADD A,DISTANCE ;路程加500米
MOV DISTANCE,A

MOV A,PRICE
ADD A,AMOUNTL
DA A
MOV AMOUNTL,A
CJNE A, #10H,RETURN1
MOV AMOUNTL,#0
MOV A, #1
ADD A, AMOUNTH
DA A
MOV AMOUNTH,A
CJNE A, #99H, RETURN1
MOV AMOUNTH,#0
ACALL DISPLAY 
RETURN1: POP ACC
POP PSW
RETI

TIME1: PUSH PSW
PUSH ACC
MOV A,#05H 
ADD A,DISTANCE ;路程加500米
MOV DISTANCE,A

CJNE A,#35, DISPLAY
SUBB A, #50
JZ CHANGE_DANJIA1
MOV A, DANJIA
ADD A,PRICEL
DA A
MOV PRICEL,A
ANL A,0F0H
ADD A, PRICEH
DA A
MOV PRICEH,A
MOV A,PRICEL
ANL A,0FH
MOV PRICEL,A
ACALL DISPLAY
CJNE A,#99,REYURN1 
MOV PRICEH,#0
ACALL DISPLAY
RETURN1: POP ACC
POP PSW
RETI

;白天价格初始化(5公里以内)
DAY: SETB TRO ;启动T0
MOV DANJIA,DAY_DANJIA
MOV PRICEL,#00H
MOV PRICEH,#06H
MOV DISTANCE,#00H
ACALL DISPLAY
JNB S5,$
ACALL DISPALY
JB S5,STOP
SJMP $
;夜晚价格初始化
NIGHT: SETB TRO ;启动T0
MOV DANJIA,night_DANJIA
MOV PRICEL,#00H
MOV PRICEH,#07H
MOV DISTANCE,#00H
ACALL DISPLAY
JNB S5,$
ACALL DISPALY
JB S5,STOP
SJMP $
;红灯堵车启动T1
REDLIGHT: PUSH PSW 
PUSH ACC
MOV R0,TL0
SETB RS0 ;转到第1组工作寄存器
MOV A,#50H
DELAY:ACALL T100MSD
DEC A
JNZ DELAY

;终点停车初始化
STOP: CLR TR0
CLR TR1 ;关闭T0,T1
ACALL T100MSD
ACALL T100MSD
ACALL T100MSD
ACALL YUYIN2


;价格调整(5公里以外)
;白天价格调整
CHANGE_DANJIA1:MOV DAY_DANJIA,#09H
MOV DANJIA,DAY_DANJIA
JB S4,CHANGE_DANJIA2
ACALL DISPLAY
RET
;晚上价格调整
CHANGE_DANJIA2:MOV NIGHT_DANJIA,#12
MOV DANJIA,DAY_DANJIA
RET
;红灯堵车价格调整
CHANGE_DANJIA3:MOV DANJIA,REDLIGHT_DANJIA
ACALL DISPALY
RET

;显示子程序
DISPLAY:
PUSH ACC 
PUSH PSW
SETB RS0 ;转入第3组工作寄存器
SETB RS1

MOV R0,#DANJIA ;单价拆分
MOV R1,#LEDDANJIAL
MOV A, @R0
MOV B, A
ANL A, #0FH
MOV @R1,A
DEC R1
MOV A, B
SWAP A
ANL A, #0FH
MOV @R1,A
DEC R1
MOV A,LEDDANJIAL ;送单价低位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI, $
CLR TI
MOV A, LEDDANJIAH ;送单价高位
MOV DPTR,#TAB
MOVC A,@A+DPTR
CPL ACC.4
MOV SBUF,A
JNB TI,$
CLR TI

MOV SBUF,#0FEH ;送短线(短线的字型码是0FEH)
JNB TI, $
CLR TI

MOV R0,#PRICEH ;显示金额
MOV R1,#LEDRPICE2
MOV A, @R0
MOV B, A
ANL A, #0FH
MOV @R1,A
DEC R1
MOV A, B
SWAP A
ANL A, #0FH
MOV @R1,A
MOV LEDPRICE1,PRICEL
MOV A,LEDPRICE1 ;送总金额低位
MOV DPTR,#TAB
MOVC A, @A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,LEDPRICE2 ;送总金额中位
MOV DPTR,#TAB
MOVC A,@A+DPTR
CPL ACC.4
MOV SBUF,A
JNB TI, $
CLR TI
MOV A,LEDPRICE3 ;送总金额高位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI

MOV SBUF,#0FEH ;送短线(短线的字型码是0FEH)
JNB TI, $
CLR TI

MOV R0,#DISTANCE ;路程的拆分
MOV R1,#LEDDISTANCEL
MOV A, @R0
MOV B, A
ANL A, #0FH
MOV @R1,A
DEC R1
MOV A, B
SWAP A
ANL A, #0FH
MOV @R1,A
DEC R1
MOV A,LEDDISTANCEL ;送路程低位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI, $
CLR TI
MOV A,LEDDISTANCEH ;送路程高位
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
CLR TI
CLR RS1
POP PSW
POP ACC
RET

;语音模块
YUYIN1:ACALL T100MSD
RET
YUYIN2:ACALL T100MSD
RET

CLEAR::ACALL T100MSD
RET

TAB:DB 11H,0D7H,32H,92H,0D4H,98H,18H,0D1H,10H,90H,0FFH
;--------------------------------------------
; 100毫秒延时程序
;************************************
T100MSD: MOV R3, #200
D11: MOV R4, #125
D12: DJNZ R4, D12
DJNZ R3, D11
RET
END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -