?? licheng.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 + -