?? bike.asm
字號:
;******************OCM4x8C串口******************
CS EQU P1.0
STD EQU P1.1
SCLK EQU P1.2 ;液晶控制口定義
RS_STU EQU 20H.0
flag equ 20h.1
flag1 equ 20h.2
ACK equ 20h.3
flagx equ 20h.4
qidong equ 20h.5
FLAG3 DATA 23H
PFA BIT FLAG3.7
PFB BIT FLAG3.6
PFC BIT FLAG3.5
PFD BIT FLAG3.4
READY BIT FLAG3.3
COUNT EQU 34H
DA_IN EQU 35H
WR_COUNT1 EQU 36H
WR_COUNT2 EQU 37H
SLA EQU 5eH
SUBA EQU 5fH
SCL bit P1.4
SDA bit P1.5
;***********************************************
ORG 0000H ;程序執行開始地址
LJMP main ;跳至START
ORG 0003H ;外中斷0中斷程序入口
LJMP INTEX0 ;跳至INTEX0中斷服務程序
ORG 000BH ;定時器T0中斷程序入口
ljmp intt0 ;中斷返回
ORG 0013H ;外中斷1中斷入口
reti
; LJMP INTEX1 ; 跳至INTEX1中斷服務程序
ORG 001BH ; 定時器T1中斷程序入口
LJMP INTT1 ; 跳至INTT1中斷服務程序
ORG 0023H ;串口中斷入口地址
RETI ;中斷返回
ORG 002BH ;定時器T2中斷入口地址
RETI
main: ; call qing_dangqian_licheng
; call qing_shangci_licheng
; call qing_zong_licheng
call du_dangqian_licheng
mov 40h,74h
mov 41h,75h
mov 42h,76h
call du_zong_licheng
mov 43h,77h
mov 44h,78h
mov 45h,79h
MOV TMOD,#11H ;T1為16位外部控制定時器
SETB PX0 ;外中斷0優先級為1
setb IT0 ;外中斷0用邊沿觸發
SETB EA ;開中斷允許
SETB EX0 ;開外中斷0
CLR A ;清A
mov 4fh,A
MOV 20H,A ;清內存中特定單元
MOV 6CH,A ;
MOV 6DH,A ;
MOV 70H,A ;
MOV 71H,A ;
MOV 72H,A ;
MOV 73H,A ;
MOV 60H,A ;
MOV 61H,A ;
MOV 62H,A ;
MOV 63H,A ; 清內存中特定單元
mov 00h,a
mov Tl1,a
mov TH1,a
MOV 68H,A ;內存置數據#0FFH
MOV 69H,A ; 內存置數據#0FFH
MOV 6AH,A ; 內存置數據#0FFH
MOV 6BH,A ; 內存置數據#0FFH
mov 6ch,a
mov 6dh,a
mov 6eh,a
mov 22h,#00
mov TH0,#00h ;重裝定時器
mov TL0,#00h
CALL LCD_INIT
LCALL cls
lcall delay ;加延時,防止亂碼
setb flag
;***********************************************
LGS1: MOV DPTR,#D_CHESU ;顯示當前車速
MOV COUNT,#08H
MOV A,#80H
LCALL SEND_I
LGS11: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,LGS11
MOV DPTR,#D_JULI ;顯示行駛距離
MOV COUNT,#08H
MOV A,#90H
LCALL SEND_I
LGS21: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,LGS21
fan_lu1:
jnb flag,fan_lu
MOV A,#84H
LCALL SEND_I
mov a,#30h
LCALL SEND_D
mov a,#2eh
LCALL SEND_D
MOV A,#85H
LCALL SEND_I
mov a,#30h
LCALL SEND_D
mov a,#30h
LCALL SEND_D
MOV A,#86H ;Km
LCALL SEND_I
mov a,#4bh
LCALL SEND_D
mov a,#6dh
LCALL SEND_D
MOV A,#87H ;/h
LCALL SEND_I
mov a,#2fh
LCALL SEND_D
MOV A,#68H
LCALL SEND_D
call delay
ljmp no_qi1
fan_lu: clr c
call delay
call sudu_jisuan
call delay
no_qi1:
JB P1.3,fan_lu1
call delay
jnb p1.3,$
LCALL cls
LCALL delay
LGK:
MOV DPTR,#D_SJULI ;顯示上次行駛
MOV COUNT,#08H
MOV A,#80H
LCALL SEND_I
LGS31: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,LGS31
MOV DPTR,#D_ZONGLU ;顯示總里程
MOV COUNT,#06H
MOV A,#90H
LCALL SEND_I
LGS41: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,LGS41
call jisuan_shangci_lucheng ;選擇清除后,當前路程會記錄到這個位置,當前的里程會歸零
call jisuan_zonglicheng ;在第二行顯示總里程數
tel_b: LCALL delay
jb P1.3,tel_qing
call delay
jnb p1.3,$
LCALL cls
LCALL delay
LJMP LGS1
tel_qing: LCALL delay
jb p1.7,tel_b
call confirm
LCALL delay
tel_nex_2:
jb p1.3,tel_nex_1
call juli_genghuan
jmp LGK
tel_nex_1:
jb p1.7,tel_nex_2
call cls
jmp LGK
confirm: MOV DPTR,#D_COM1 ;顯示是否要刪除
MOV COUNT,#10H
MOV A,#80H
LCALL SEND_I
COM11: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,COM11
MOV DPTR,#D_COM2 ;顯示是--上 否--下
MOV COUNT,#10H
MOV A,#90H
LCALL SEND_I
COM21: CLR A
MOVC A,@A+DPTR
LCALL SEND_D
INC DPTR
DJNZ COUNT,COM21
RET
lucheng_jisuan:
mov 50h,40h ;預處理最低位圈數40h,結果指向30h
call yuchuli
mov 30h,52h
mov 31h,53h
mov 32h,54h
mov r0,#30h
lcall btof
mov 50h,41h ;預處理中間位圈數41h,結果指向36h
call yuchuli
mov 36h,52h
mov 37h,53h
mov 38h,54h
mov r0,#36h
lcall btof
mov 33h,#03h ;中間位乘于255,結果指向36h
mov 34h,#25h
mov 35h,#60h
mov r0,#33h
lcall btof
mov r0,#36h
mov r1,#33h
lcall fmul
mov r1,#30h ;中間位加上最低位的圈數,結果指向36h
lcall fadd
mov 50h,42h ;預處理最高位圈數42h,結果指向3ch
lcall yuchuli
mov 3ch,52h
mov 3dh,53h
mov 3eh,54h
mov r0,#3ch
lcall btof
mov 39h,#05h ;最高位乘于65630,結果指向3ch
mov 3ah,#65h
mov 3bh,#53h
mov r0,#39h
lcall btof
mov r0,#3ch
mov r1,#39h
lcall fmul
mov r0,#3ch ;前面的結果加上最高位,算出總共的圈數,結果指向36h
mov r1,#36h
lcall fadd
mov 30h,#01h ;輪圈的周長數據,指向30h
mov 31h,#20h
mov 32h,#90h
mov r0,#30h
lcall btof
mov r0,#3ch ;輪圈的周長乘于總圈數,算出總共的行駛距離,結果指向3ch
mov r1,#30h
lcall fmul
lcall ftob
mov a,3ch
subb a,#04h
jc xiaoyu_1km
ljmp dayu_1km
xiaoyu_1km: clr c
mov a,3ch
cjne a,#03h,xiaoyu100m
call qing_wei ;后四個字位置清除
MOV A,#94H
LCALL SEND_I
mov a,3dh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
mov a,3dh
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#95H
LCALL SEND_I
mov a,3eh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#96H
LCALL SEND_I
mov a,#0c3h
LCALL SEND_D
mov a,#0d7h
LCALL SEND_D
ljmp out_lucheng_jisuan
xiaoyu100m:
call qing_wei ;后四個字位置清除
mov a,3ch
cjne a,#02h,xiaoyu10m
MOV A,#94H
LCALL SEND_I
mov a,3dh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
mov a,3dh
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#95H ;米
LCALL SEND_I
mov a,#0c3h
LCALL SEND_D
mov a,#0d7h
LCALL SEND_D
ljmp out_lucheng_jisuan
xiaoyu10m: call qing_wei ;后四個字位置清除
MOV A,#94H
LCALL SEND_I
mov a,3dh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#95H ;米
LCALL SEND_I
mov a,#0c3h
LCALL SEND_D
mov a,#0d7h
LCALL SEND_D
ljmp out_lucheng_jisuan
dayu_1km: mov a,3ch
cjne a,#04h,dayu_10Km
MOV A,#94H
LCALL SEND_I
mov a,3dh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
mov a,3dh
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#95H
LCALL SEND_I
mov a,3eh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
mov a,3eh
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#96H ;米
LCALL SEND_I
mov a,#0c3h
LCALL SEND_D
mov a,#0d7h
LCALL SEND_D
MOV A,#97H
LCALL SEND_I
mov a,#0a1h
LCALL SEND_D
mov a,#0a0h
LCALL SEND_D
jmp out_lucheng_jisuan
dayu_10Km: call qing_wei ;后四個字位置清除
MOV A,#94H
LCALL SEND_I
mov a,3dh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
mov a,3dh
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#95H
LCALL SEND_I
mov a,#2eh
LCALL SEND_D
MOV A,#96H
LCALL SEND_I
mov a,3eh
swap a
anl a,#0fh
add a,#30h
LCALL SEND_D
mov a,3eh
anl a,#0fh
add a,#30h
LCALL SEND_D
MOV A,#97H ;Km
LCALL SEND_I
mov a,#4bh
LCALL SEND_D
mov a,#6dh
LCALL SEND_D
out_lucheng_jisuan:
ret
jisuan_shangci_lucheng:
call du_shangci_licheng
mov 50h,7ah ;預處理最低位圈數40h,結果指向30h
call yuchuli
mov 30h,52h
mov 31h,53h
mov 32h,54h
mov r0,#30h
lcall btof
mov 50h,7bh ;預處理中間位圈數41h,結果指向36h
call yuchuli
mov 36h,52h
mov 37h,53h
mov 38h,54h
mov r0,#36h
lcall btof
mov 33h,#03h ;中間位乘于255,結果指向36h
mov 34h,#25h
mov 35h,#60h
mov r0,#33h
lcall btof
mov r0,#36h
mov r1,#33h
lcall fmul
mov r1,#30h ;中間位加上最低位的圈數,結果指向36h
lcall fadd
mov 50h,7ch ;預處理最高位圈數42h,結果指向3ch
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -