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

📄 cx3.asm

📁 单片机实现出租车计价器的汇编代码。通过keil
💻 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 + -