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

📄 lichengbiao.asm

📁 用汇编语言开发的计里程的应用
💻 ASM
字号:
   ;2051单片机自行车里程表程序
;Desigh by LinLifang  2006-02-01

ORG 0000H
	AJMP MAIN
ORG 0003H
	RETI
ORG 000BH 
	RETI
ORG 0013H
	RETI
ORG 001BH
	RETI
ORG 0023H 
	RETI
ORG 0030H
MAIN:	
	MOV 34H,#00H	;34H存百分位数
	MOV 35H,#00H	;35H存十分位数
	MOV 36H,#00H	;36H存个位数
	MOV 37H,#00H	;37H存十位数
	MOV 38H,#00H	;38H存百位数
	MOV 30H,#50H	;30H存加数低8 位	
	MOV 31H,#20H	;31H存加数高8 位,测得26"自行车轮周距为2050mm。
LOOP:
	ACALL DISP	;调用显示子程序
LOP:	
	ACALL KEY	;调用触点子程序
	JNB F0,LOOP	;标志位为0,回LOOP,循环执行
	ACALL MAIN1	;标志位为1,转里程运算子程序
	AJMP LOOP	;跳回LOOP,检测触点状态

KEY:
	CLR F0		;清标志位
	JB P3.2,K_RET	;如果为1,触点未合
	ACALL DELAY	;否则延时去抖
	SETB P3.2	;P3.2置1	
	JB P3.2,K_RET	;再判
	SETB F0		;设置触点合上标志

K_RET:	
	JB P3.2,K_RET1	;触点合上,返回触点子程序调用 
	ACALL DISP	;如不加此句,触点合上时,LED灭一下。
	
	AJMP K_RET	;循环等待触点释放,直到值为0,说明已释放.才从触点处理程序返回

K_RET1:	
	RET				

DELAY:	
	MOV R5,#5	;延时,防抖。
LOP1:		
	ACALL DISP	;循环调用5次显示子程序,防抖作用同时让LED显示,以不闪烁。
	DJNZ R5,LOP1	;R5不为0,继续显示直到R5等于0
	RET		;返回防抖子程序调用
 			
MAIN1:	
	MOV R0,#30H	;送数30H到R0
	MOV R1,#32H	;送数32H到R1
	MOV A,@R0	;送30H地址内数到A
	ADD A,@R1	;30H内数与32H内数相加
	DA A		;二﹣十进制数调整	
	MOV @R1,A	;和存32H
	INC R0		;30H+1=31H
	INC R1		;32H+1=33H
	MOV A,@R0	;送31H地址内数到A
	ADDC A,@R1	;31H内数与33H内数及进位位内数相加
	DA A		;二﹣十进制数调整	
	MOV @R1,A	;和数送33H
	CLR A		;清A
	ADDC A,#00H	;取进位位内数
	CJNE A,#01H,K_RET1	;进位数为0调用返回,为1继续执行

MAIN2:
	SETB P3.2	
	MOV A,34H	;里程百分位数送A
	ADD A,#01H	;加1
	DA A		;二﹣十进制调整
	MOV 34H,A	;调整后送34H
	CJNE A,#10H,K_RET1
 			;A未到10返回
	MOV 34H,#00H	;34H清零
	MOV A,35H	;里程十分位数送A
	ADD A,#01H	;加1
	DA A		;二﹣十进制调整
	MOV 35H,A	;调整后存35H
	CJNE A,#10H,K_RET1
			;A未到10调用返回
	MOV 35H,#00H	;35H清零
	MOV A,36H	;里程个位数送A 
	ADD A,#01H	;加1
	DA A		;二﹣十进制调整
	MOV 36H,A	;调整后存36H
	CJNE A,#10H,K_RET1
			;A未到10调用返回
	MOV 36H,#00H	;36H清零
	MOV A,37H	;里程十位数送A
	ADD A,#01H	;加1
	DA A		;二十进制调整
	MOV 37H,A	;调整后数存37H
	CJNE A,#10H,K_RET1	;A未到10调用返回
	MOV 37H,#00H	;37H清零
	MOV A,38H	;里程百位数送A
	ADD A,#01H	;加1
	DA A		;二﹣十进制调整
	MOV 38H,A	;调整后数存38H
	CJNE A,#10H,K_RET1	;A未到10调用返回
	MOV 38H,#00H	;38H清零
	RET		;返回

DISP:
	MOV A,34H	;百分位送A
	MOV DPTR,#TAB	;码表首地址	
	MOVC A,@A+DPTR	;取字形码送A	   
	MOV P1,A	;字形码送P1口
	CLR P3.0	;开百分位
	ACALL DL1MS	;延时
	SETB P3.0	;关百分位,防止鬼影
	
	MOV A,35H	;十分位数送A
	MOV DPTR,#TAB	;码表首地址
	MOVC A,@A+DPTR	;取字形码送A
	MOV P1,A	;字形码送P1口
	CLR P3.1	;开十分位
	ACALL DL1MS	;延时
	SETB P3.1	;关十分位,防止鬼影	

	MOV A,36H	;个位数送A
	MOV DPTR,#TAB	;码表首地址
	MOVC A,@A+DPTR	;取字形码送A
	MOV P1,A	;字形码送P1口
	SETB P1.7		;开个位小数点
	CLR P3.3			;开个位
	ACALL DL1MS		;延时
	SETB P3.3		;关个位,防止鬼影
 
	MOV A,37H	;十位数送A
	MOV DPTR,#TAB	;码表首地址
	MOVC A,@A+DPTR	;取字形码送A
	MOV P1,A	;字形码送P1口
	
	CLR P3.4	;开十位
	ACALL DL1MS	;延时
	SETB P3.4	;关十位,防止鬼影
	
	MOV A,38H	;百位数送A	
	MOV DPTR,#TAB	;码表首地址
	MOVC A,@A+DPTR	;取字形码送A
	MOV P1,A	;字形码送P1口
	
	CLR P3.5	;开百位
	ACALL DL1MS	;延时
	SETB P3.5	;关百位,防止鬼影
	RET

DL1MS:	MOV R7,#80	;2+2X80=162微秒,延时按12MHZ计算
	DJNZ R7,$
	RET

	;共阳LED字型码表
TAB: DB 	3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH

	END

⌨️ 快捷键说明

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