📄 czc.asm
字号:
;****************************计价器源程序****************************
DAY_PRICE EQU 6FH;定义价格存放单元
NIGHT_PRICE EQU 6EH
MIDWAY_PRICE EQU 6DH
START_PRICE EQU 6CH;起步价
COUNTL EQU 6BH;计数初值
COUNTH EQU 6AH
M100 EQU 69H ;外部中断次数
DISTANCE EQU 68H ;行车距离
MS100 EQU 67H;外部中断次数
SEC EQU 66H;秒,分,时存放单元
MIN EQU 65H
HOUR EQU 64H
LEDSL EQU 63H ;时分钞显示缓冲区
LEDSH EQU 62H
LEDML EQU 61H
LEDMH EQU 60H
LEDHL EQU 5FH
LEDHH EQU 5EH
LEDDANJIAL EQU 5DH ;总额,单价显示缓冲区
LEDDANJIAH EQU 5CH
LINE_ EQU 5BH
LEDCOUNT1 EQU 5AH
LEDCOUNT2 EQU 59H
LEDCOUNT3 EQU 58H
LEDDANJIA2L EQU 57H ;路程,单价显示缓冲区
LEDDANJIA2H EQU 56H
LINE__ EQU 55H
LINE___ EQU 54H
LEDDISTANCEL EQU 53H
LEDDISTANCEH EQU 52H
LEDDAY_PL EQU 51H ;中途,晚上,白天显示缓冲区
LEDDAY_PH EQU 50H
LEDNIG_PL EQU 4FH
LEDNIG_PH EQU 4EH
LEDW_PL EQU 4DH
LEDW_PH EQU 4CH
S1 BIT P1.0;调整按键
S2 BIT P1.1
S3 BIT P1.2
S4 BIT P1.3
S11 EQU 4BH
S22 EQU 4AH
S33 EQU 49H
S44 EQU 48H
M1 EQU 47H
H1 EQU 46H
M2 EQU 45H
H2 EQU 44H
PRICE EQU 43H
;-------------------主程序------------------
ORG 0000H
AJMP MAIN
ORG 0003H ;外中断0中断入口地址
AJMP TO ;;;跳至to
ORG 000BH ;定时器T0中断入口地址
AJMP TOTIME
ORG 001BH ;定时器T1中断入口地址
AJMP TOSTART
ORG 0030H
MAIN: MOV SP,#70H
MOV TMOD, #11H
MOV TH0, #3CH;;;;设定50000的计数初值15536
MOV TL0, #0B0H
MOV TH1, #3CH
MOV TL1, #0B0H
MOV 22H, #0AH;用于判断显示数字是否满10
SETB EA;;;;;;;;开总中断允许
SETB TR0
SETB EX0;;;;;;;允许外部中断
SETB IT0
SETB ET0;;;;;;;允许T0中断
SETB ET1;;;;;;;允许T1中断
;-------RAM单元初始化
MOV R7,#34
MOV R0,#69H
LOOPL: MOV @R0,#0
DEC R0
DJNZ R7,LOOPL
MOV COUNTL, #00H ;;;;;;;;;;;;;;起步价
MOV COUNTH, #05H
MOV DAY_PRICE,#25H ;白天价格初始化
MOV NIGHT_PRICE,#30H ;晚上价格初始化
MOV MIDWAY_PRICE,#10H ;中途等待初始化
MOV START_PRICE, #50H ;起步价初始化
MOV S11, #0;;;;;;;;;;;;
MOV S22, #0;;;;;;;;;;;;;;
MOV S33, #0;;;;;;;;;;;;;;
MOV S44, #0;;;;;;;;;;;;;;
MOV DISTANCE, #03H
MOV HOUR, #12H
;;;;;;;;;;;;;;; 键盘第一层扫描程序(键盘扫描主程序)
KEY_MAIN: SETB TR0
ACALL HMS_DIS;;;;;调用显示程序
ACALL T100MSD;;;;;延时
ACALL T100MSD
ACALL T100MSD
JB S1, KEY_MAIN
ACALL T10MSD;;;;;;;;;;消抖
JB S1, KEY_MAIN;;;;s1不被按下继续扫描
JNB S1,$;;;;;;等待
SJMP WAI1
WA1: JB S1, K1
ACALL T10MSD
JB S1, K1
WAIT1: JNB S1, WAIT1
WAI1: INC S11
MOV A, S11
CJNE A, #1, NT1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(未定义)
MOV M1, MIN
MOV H1, HOUR
MOV R0, #LEDDANJIAL;;;;;;;但见显示缓冲区地址放入R0
MOV R2, #6
CLR A
MOV COUNTL,A
MOV COUNTH,A
MOV M100, A
MOV DISTANCE,A
BK1: MOV @R0, A
DEC R0
DJNZ R2, BK1;起动初始化
MOV PRICE,DAY_PRICE
MOV COUNTL, #00H;起步价
MOV COUNTH, #05H
MOV DISTANCE,#02H
LCALL CP_DIS;总金额和单价显示
K1: JB S2, K2
ACALL T10MSD
JB S2, K2
WAIT2: JNB S2, WAIT2
INC S22
MOV A, S22
CJNE A, #1, NEXT1
LCALL PA_DIS
LJMP KEY_DJ
NEXT1: CJNE A, #2, NEXT2
CLR TR0
LCALL HMS_DIS
LJMP KEY_SJ
NEXT2: CJNE A, #3, K2
MOV S22, #0
K2: JB S3, K3
ACALL T10MSD
JB S3, K3
WAIT3: JNB S3, WAIT3
INC S33
MOV A, S33
CJNE A, #1, NXT1
LCALL DP_DIS
NXT1: CJNE A, #2, NXT2
CLR C
MOV A, M2
SUBB A, M1
MOV M1, A
MOV A, H2
SUBB A, H1
MOV H1, A
LCALL XCSJ_DIS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(未定义)
NXT2: CJNE A, #3, K3
MOV S33, #0
LCALL CP_DIS
K3: JB S4, BK_KEY_MAIN
ACALL T10MSD
JB S4, BK_KEY_MAIN
WAIT4: JNB S4, WAIT4
INC S44
MOV A, S44
CJNE A, #1, NT1
MOV PRICE,DAY_PRICE
LCALL CP_DIS
NT1: CJNE A, #2, NT2
MOV PRICE,NIGHT_PRICE
LCALL CP_DIS
NT2: CJNE A, #3, NT3
MOV PRICE,MIDWAY_PRICE
SETB TR1
LCALL CP_DIS
NT3: CJNE A, #4, BK_KEY_MAIN
MOV S44, #0
LJMP KEY_MAIN
BK_KEY_MAIN: LJMP WA1
;;;;;;;;;;;;;; 键盘第二层扫描程序
;;;;;;;;;;;;;;(单价调整程序)(KEY_DJ)
KEY_DJ: JB S1, KY1
ACALL T10MSD
JB S1, KY1
WAIT5: JNB S1, WAIT5
INC S11
MOV A, S11
CJNE A, #1,NEXT11
LJMP DAY_P
NEXT11: CJNE A, #2,NEXT12
LCALL NIG_P
NEXT12: CJNE A, #3, KY1
LCALL MID_P
MOV S11, #0
LJMP KEY_MAIN
KY1: JB S2, KY2
ACALL T10MSD
JB S2, KY2
WAIT6: JNB S2, WAIT6
INC S22
MOV A, S22
CJNE A, #1, NEXT13
LCALL PA_DIS
LJMP KEY_DJ
NEXT13: CJNE A, #2, NEXT14
CLR TR0
LCALL HMS_DIS
LCALL KEY_SJ
NEXT14: CJNE A, #3, KY2
MOV S22, #0
LJMP KEY_MAIN
KY2: AJMP KEY_DJ
; 键盘第三层扫描程序
;;; (时间调整程序)
;(KEY_SJ)
KEY_SJ: JB S1, KEY1
ACALL T10MSD
JB S1, KEY1
WAIT7: JNB S1, WAIT7
INC S11
MOV A, S11
CJNE A, #1,NEXT21
LCALL HOU_T
NEXT21: CJNE A, #2,NEXT22
LCALL MIN_T
NEXT22: CJNE A, #3,KEY1
MOV S11, #0
LJMP KEY_MAIN
KEY1: JB S2, KEY2
ACALL T10MSD
JB S2, KEY2
WAIT8: JNB S2, WAIT8
INC S22
MOV A, S22
CJNE A, #1, NEXT23
LCALL PA_DIS
LJMP KEY_DJ
NEXT23: CJNE A, #2, NEXT24
CLR TR0
LCALL HMS_DIS
NEXT24: CJNE A, #3, KEY2
MOV S22,#0
LCALL KEY_SJ
LJMP KEY_MAIN
KEY2: AJMP KEY_SJ
;;;;;;;;;;;;;;; 键盘第四层扫描程序(闪显/加1/减1程序)
DAY_P: SETB F0 ;调用定时延时标志位
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
MOV LEDDAY_PL, #0AH
MOV LEDDAY_PH, #0AH
LCALL PA_DIS1
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
MOV A, DAY_PRICE
MOV B, #10
DIV AB
DA A
MOV LEDDAY_PL, B
MOV LEDDAY_PH, A
LCALL PA_DIS
AJMP LP1
LP1: JB S3, KEY11
LCALL T10MSD
JB S3, KEY11
WAIT9: JNB S3, WAIT9
INC DAY_PRICE
MOV A, #1
ADD A, DAY_PRICE
DA A
MOV DAY_PRICE,A
MOV A, DAY_PRICE
CJNE A, #99H, KEY11
MOV DAY_PRICE, #0
KEY11: JB S4, KEY12
LCALL T10MSD
JB S4, KEY12
MOV A,DAY_PRICE
ADD A, #99H
DA A
MOV DAY_PRICE,A
CJNE A, #00H, KEY12
MOV A, #99H
KEY12: JB S1, KEY13
ACALL T10MSD
JB S1, KEY13
WAIT11: JNB S1, WAIT11
INC S11
MOV A, S11
CJNE A, #1,NEXT31
LCALL DAY_P
NEXT31: CJNE A, #2,NEXT32
LCALL NIG_P
NEXT32: CJNE A, #3,NEXT33
LCALL MID_P
NEXT33: CJNE A, #4, KEY13
MOV S11, #0
KEY13: JB S2, KEY14
LCALL T10MSD
JB S2, KEY14
WAIT12: JNB S2, WAIT12
LJMP KEY_MAIN
KEY14: AJMP DAY_P
;--------------------------------------------
NIG_P: SETB F0 ;调用定时延时标志位
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
MOV LEDNIG_PL, #0AH
MOV LEDNIG_PH, #0AH
LCALL PA_DIS1
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL PA_DIS
JB S3, KEY21
LCALL T10MSD
JB S3, KEY21
WAIT13: JNB S3, WAIT13
MOV A, #1
ADD A, NIGHT_PRICE
DA A
MOV NIGHT_PRICE,A
CJNE A, #99H,KEY21
MOV NIGHT_PRICE,#0
KEY21: JB S4, KEY22
LCALL T10MSD
JB S4, KEY22
WAIT14: JNB S4, WAIT14
;--------------------------------------------
MOV A, NIGHT_PRICE
ADD A, #99H
DA A
MOV NIGHT_PRICE,A
CJNE A, #00H, KEY22
MOV NIGHT_PRICE,#99H
KEY22: JB S1, KEY23
ACALL T10MSD
JB S1, KEY23
WAIT15: JNB S1, WAIT15
INC S11
MOV A, S11
CJNE A, #1,NEXT41
LCALL DAY_P
NEXT41: CJNE A, #2,NEXT42
LCALL NIG_P
NEXT42: CJNE A, #3,NEXT43
LCALL MID_P
NEXT43: CJNE A, #4, KEY23
MOV S11, #0
LJMP KEY_DJ
KEY23: JB S2, KEY24
LCALL T10MSD
JB S2, KEY24
WAIT30: JNB S2, WAIT30
LJMP KEY_MAIN
KEY24: AJMP NIG_P
;--------------------------------------------
MID_P: SETB F0 ;调用定时延时标志位
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
MOV LEDW_PL, #0AH
MOV LEDW_PH, #0AH
LCALL PA_DIS1
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL T100MSD
LCALL PA_DIS
JB S3, KEY31
LCALL T10MSD
JB S3, KEY31
WAIT16: JNB S3, WAIT16
INC MIDWAY_PRICE
MOV A, MIDWAY_PRICE
ADD A, #1
DA A
MOV MIDWAY_PRICE,A
CJNE A, #99H, KEY31
MOV MIDWAY_PRICE, #00H
;----------------------------------
CJNE A, #100, KEY31
MOV MIDWAY_PRICE, #0
KEY31: JB S4, KEY32
LCALL T10MSD
JB S4, KEY32
WAIT17: JNB S4, WAIT17
MOV A, MIDWAY_PRICE
ADD A, #99H
DA A
MOV MIDWAY_PRICE,A
CJNE A, #00H, KEY32
MOV NIGHT_PRICE,#99H
KEY32: JB S1, KEY33
ACALL T10MSD
JB S1, KEY33
WAIT18: JNB S1, WAIT18
INC S11
MOV A, S11
CJNE A, #1,NEXT51
LCALL DAY_P
NEXT51: CJNE A, #2,NEXT52
LCALL NIG_P
NEXT52: CJNE A, #3,NEXT53
LCALL MID_P
NEXT53: CJNE A, #4, KEY33
MOV S11, #0
LJMP KEY_DJ
KEY33: JB S2, KEY34
LCALL T10MSD
JB S2, KEY34
WAIT31: JNB S2, WAIT31
LJMP KEY_MAIN
KEY34: AJMP MID_P
;--------------------------------------------
HOU_T: SETB F0 ;调用定时延时标志位
LCALL T100MSD
LCALL T100MSD
MOV LEDHL, #0AH
MOV LEDHH, #0AH
LCALL HMS_DIS1;直接调用显示,不经过拆分程序
LCALL T100MSD
LCALL T100MSD
MOV SEC, #0
LCALL HMS_DIS
JB S3, KEY41
LCALL T10MSD
JB S3, KEY41
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -