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

📄 czc.asm

📁 (1) 不同情况具有不同的收费标准。 l 白天 l 晚上 l 途中等待(>10min 开始收费) (2) 能进行手动修改单价 (3) 具有数据的复位功能 (4) IO 口分配的简易要
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;****************************计价器源程序****************************
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 + -