?? licheng.asm
字號(hào):
;2051單片機(jī)自行車?yán)锍瘫沓绦?;Desigh by LinLifang 2006-02-01
ORG 0000H
AJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
ORG 0013H
RETI
ORG 001BH
ORG 0023H
RETI
ORG 0030H
MAIN:
MOV 34H,#00H ;34H存百分位數(shù)
MOV 35H,#00H ;35H存十分位數(shù)
MOV 36H,#00H ;36H存?zhèn)€位數(shù)
MOV 37H,#00H ;37H存十位數(shù)
MOV 38H,#00H ;38H存百位數(shù)
MOV 30H,#50H ;30H存加數(shù)低8 位
MOV 31H,#20H ;31H存加數(shù)高8 位,測(cè)得26"自行車輪周距為2050mm。
LOOP:
ACALL DISP ;調(diào)用顯示子程序
LOP:
ACALL KEY ;調(diào)用觸點(diǎn)子程序
JNB F0,LOOP ;標(biāo)志位為0,回LOOP,循環(huán)執(zhí)行
ACALL MAIN1 ;標(biāo)志位為1,轉(zhuǎn)里程運(yùn)算子程序
AJMP LOOP ;跳回LOOP,檢測(cè)觸點(diǎn)狀態(tài)
KEY:
CLR F0 ;清標(biāo)志位
JB P3.2,K_RET ;如果為1,觸點(diǎn)未合
ACALL DELAY ;否則延時(shí)去抖
SETB P3.2 ;P3.2置1
JB P3.2,K_RET ;再判
SETB F0 ;設(shè)置觸點(diǎn)合上標(biāo)志
K_RET:
JB P3.2,K_RET1 ;觸點(diǎn)合上,返回觸點(diǎn)子程序調(diào)用
ACALL DISP ;如不加此句,觸點(diǎn)合上時(shí),LED滅一下。
AJMP K_RET ;循環(huán)等待觸點(diǎn)釋放,直到值為0,說明已釋放.才從觸點(diǎn)處理程序返回
K_RET1:
RET
DELAY:
MOV R5,#5 ;延時(shí),防抖。
LOP1:
ACALL DISP ;循環(huán)調(diào)用5次顯示子程序,防抖作用同時(shí)讓LED顯示,以不閃爍。
DJNZ R5,LOP1 ;R5不為0,繼續(xù)顯示直到R5等于0
RET ;返回防抖子程序調(diào)用
MAIN1:
MOV R0,#30H ;送數(shù)30H到R0
MOV R1,#32H ;送數(shù)32H到R1
MOV A,@R0 ;送30H地址內(nèi)數(shù)到A
ADD A,@R1 ;30H內(nèi)數(shù)與32H內(nèi)數(shù)相加
DA A ;二﹣十進(jìn)制數(shù)調(diào)整
MOV @R1,A ;和存32H
INC R0 ;30H+1=31H
INC R1 ;32H+1=33H
MOV A,@R0 ;送31H地址內(nèi)數(shù)到A
ADDC A,@R1 ;31H內(nèi)數(shù)與33H內(nèi)數(shù)及進(jìn)位位內(nèi)數(shù)相加
DA A ;二﹣十進(jìn)制數(shù)調(diào)整
MOV @R1,A ;和數(shù)送33H
CLR A ;清A
ADDC A,#00H ;取進(jìn)位位內(nèi)數(shù)
CJNE A,#01H,K_RET1 ;進(jìn)位數(shù)為0調(diào)用返回,為1繼續(xù)執(zhí)行
MAIN2:
SETB P3.2
MOV A,34H ;里程百分位數(shù)送A
ADD A,#01H ;加1
DA A ;二﹣十進(jìn)制調(diào)整
MOV 34H,A ;調(diào)整后送34H
CJNE A,#10H,K_RET1
;A未到10返回
MOV 34H,#00H ;34H清零
MOV A,35H ;里程十分位數(shù)送A
ADD A,#01H ;加1
DA A ;二﹣十進(jìn)制調(diào)整
MOV 35H,A ;調(diào)整后存35H
CJNE A,#10H,K_RET1
;A未到10調(diào)用返回
MOV 35H,#00H ;35H清零
MOV A,36H ;里程個(gè)位數(shù)送A
ADD A,#01H ;加1
DA A ;二﹣十進(jìn)制調(diào)整
MOV 36H,A ;調(diào)整后存36H
CJNE A,#10H,K_RET1
;A未到10調(diào)用返回
MOV 36H,#00H ;36H清零
MOV A,37H ;里程十位數(shù)送A
ADD A,#01H ;加1
DA A ;二十進(jìn)制調(diào)整
MOV 37H,A ;調(diào)整后數(shù)存37H
CJNE A,#10H,K_RET1 ;A未到10調(diào)用返回
MOV 37H,#00H ;37H清零
MOV A,38H ;里程百位數(shù)送A
ADD A,#01H ;加1
DA A ;二﹣十進(jìn)制調(diào)整
MOV 38H,A ;調(diào)整后數(shù)存38H
CJNE A,#10H,K_RET1 ;A未到10調(diào)用返回
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 ;延時(shí)
SETB P3.0 ;關(guān)百分位,防止鬼影
MOV A,35H ;十分位數(shù)送A
MOV DPTR,#TAB ;碼表首地址
MOVC A,@A+DPTR ;取字形碼送A
MOV P1,A ;字形碼送P1口
CLR P3.1 ;開十分位
ACALL DL1MS ;延時(shí)
SETB P3.1 ;關(guān)十分位,防止鬼影
MOV A,36H ;個(gè)位數(shù)送A
MOV DPTR,#TAB ;碼表首地址
MOVC A,@A+DPTR ;取字形碼送A
MOV P1,A ;字形碼送P1口
SETB P1.7 ;開個(gè)位小數(shù)點(diǎn)
CLR P3.3 ;開個(gè)位
ACALL DL1MS ;延時(shí)
SETB P3.3 ;關(guān)個(gè)位,防止鬼影
MOV A,37H ;十位數(shù)送A
MOV DPTR,#TAB ;碼表首地址
MOVC A,@A+DPTR ;取字形碼送A
MOV P1,A ;字形碼送P1口
CLR P3.4 ;開十位
ACALL DL1MS ;延時(shí)
SETB P3.4 ;關(guān)十位,防止鬼影
MOV A,38H ;百位數(shù)送A
MOV DPTR,#TAB ;碼表首地址
MOVC A,@A+DPTR ;取字形碼送A
MOV P1,A ;字形碼送P1口
CLR P3.5 ;開百位
ACALL DL1MS ;延時(shí)
SETB P3.5 ;關(guān)百位,防止鬼影
RET
DL1MS: MOV R7,#80 ;2+2X80=162微秒,延時(shí)按12MHZ計(jì)算
DJNZ R7,$
RET
;共陽LED字型碼表
TAB: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -