📄 cx3.asm
字号:
;程序创建时间:2009年1月6日
;组长:李军、张勇、胡毅、陈记春、张浩、丁维赟、周涛、李鑫、汪峰
;程序功能:具有白天、 晚上收费标准.按键有启动计时、
;数据清零、白天/晚上转换. 单价、路程、总金额显示。
;使用AT89C51型号单片机
;由AT89C51的P1口作为段选信号线
;由AT89C51的P2口作为位选信号线
;由AT89C51的P0.1、P0.0口作为启动计时、白天/晚上转换信号线
;由AT89C51的系统复位键作为数据清零键
ORG 0000H
AJMP MAIN
ORG 000BH ;定时器T0中断程序入口
AJMP JIFEI ;跳至JIFEI执行
;;;;;;;;;;;;;;;;;;
;;;;;;主程序;;;;;;
;;;;;;;;;;;;;;;;;;
ORG 0030H ;主程序地址
MAIN:
CLR EX0 ;禁止外部0中断
CLR EX1 ;禁止外部1中断
CLR ET0 ;禁止计数器0中断
SETB EA ;CPU开中断
JIAGE1: ;单价初始化显示1.0元
MOV A,#01H
MOV P2,A
MOV A,#3FH
MOV P1,A
ACALL YANSHI
MOV A,#02H
MOV P2,A
MOV A,#86H
MOV P1,A
ACALL YANSHI
MOV R0,#01H ;保存当前单价
MOV R3,#00H ;设定里程R3初始值
MOV C,P0.1 ;读端口p0.1的值
JNC QIDONG ;启动计费
MOV C,P0.0 ;读端口p0.0的值
JNC JIAGE2
AJMP JIAGE1
JIAGE2: ;单价初始化显示2.0元
MOV A,#01H
MOV P2,A
MOV A,#3FH
MOV P1,A
ACALL YANSHI
MOV A,#02H
MOV P2,A
MOV A,#0DBH
MOV P1,A
ACALL YANSHI
MOV R0,#02H ;保存当前单价
MOV R3,#00H ;设定里程R3初始值
MOV C,P0.1 ;读端口p0.1的值
JNC QIDONG ;启动计费
MOV C,P0.0 ;读端口p0.0的值
JNC JIAGE1
AJMP JIAGE2
QIDONG:
SETB ET0 ;允许计数器0溢出中断
SETB EA ;CPU开中断
MOV TMOD,#05H ;设置T0为模式1,外部计数方式
MOV TH0,#0FFH ;设置T0计数初值
MOV TL0,#0FBH
SETB TR0 ;启动计数
CLR C ;清除C
ACALL WEICHI ;调用维持显示
L1: JC QIDONG ;维持显示,并等待下一次中断
ACALL WEICHI
AJMP L1
;;;;;;;;;;;;;;;;;;
;;;;JIFEI中断;;;;;
;;;;;;;;;;;;;;;;;;
JIFEI: SETB C ;C置1
PUSH ACC
PUSH PSW ;保存状态字
CLR ET0
CLR TR0
INC R3 ;里程+1
POP PSW ;恢复状态字
POP ACC
RETI
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;计算金额并维持显示子程序;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
WEICHI: ;显示
MOV 71H,R3 ;保存里程
MOV B,71H ;送入里程
MOV A,R0 ;送入单价
MUL AB
MOV 70H,A ;保存金额
MOV 72H,R0 ;保存单价
MOV 60H,#00H ;处理单价
MOV 61H,72H
MOV A,#0AH
ADD A,61H
MOV 61H,A
MOV B,#0AH ;处理里程
MOV A,71H
DIV AB
MOV 62H,B
MOV 63H,A
MOV B,#0AH ;处理金额
MOV 64H,#00H
MOV A,70H
DIV AB
MOV 65H,B
MOV B,#0AH
DIV AB
MOV 66H,B
MOV B,#0AH
DIV AB
MOV 67H,B
MOV A,#0AH
ADD A,65H
MOV 65H,A
ACALL DIS ;调用显示子程序,显示金额里程单价
RET
;;;;;;;;;;;;;;;;;;
;;;;显示子程序;;;;
;;;;;;;;;;;;;;;;;;
DIS:
MOV R1,#60H ;显示缓冲区首地址
MOV R2,#01H ;位控制字
MOV A,R2
MOV DPTR,#TAB ;字型表头地址->DPTR
LP0: MOV P2,A ;写位控制字
MOV A,@R1 ;取显示数据
MOVC A,@A+DPTR ;取出字型码
MOV P1,A ;送出显示
ACALL YANSHI ;延时
INC R1 ;数据缓冲区地址加1
MOV A,R2
JB ACC.7,LP1 ;判断是否显示到最左边LED
RL A ;没有,左移一位
MOV R2,A
AJMP LP0
LP1: RET ;返回
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;字型码
DB 0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH
;;;;;;;;;;;;;;;;;;
;;;;延时子程序;;;;
;;;;;;;;;;;;;;;;;;
YANSHI: MOV R7,#02H
DL: MOV R6,#0FFH
DL1: DJNZ R6,DL1
DJNZ R7,DL
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -