📄 lcdspeedmeter.asm
字号:
;*******************************************************************************
;*******************************************************************************
;**--------------File Message---------------------------------------------------
;*******************************************************************************
;---------------History Version-------------------------------------------------
;** Creator:
;** Version: V1.0
;** 2006/05/07/ ----
;** Description: Original Version
;*******************************************************************************
SYSSTATUS EQU 020H
FON EQU 0
FCW EQU 1
FSPEEDCON EQU 009H ; 是否速度转换
FFindKey EQU 010H
FHaveKey EQU 011H
FHadKEY EQU 012H
FZERO1 EQU 013H
FZERO2 EQU 014H
FZERO3 EQU 015H
BUZZNUM EQU 029H ; 蜂鸣器计数器
T0STEPBUZZ EQU 02AH ; 定时器0蜂鸣器用计数器
T0STEP EQU 02BH ; 定时器计数器
LCDDATA1 EQU 02CH ; LCD数据缓存区
LCDDATA2 EQU 02DH
LCDDATA3 EQU 02EH
LCDDATA4 EQU 02FH
LCDBUF1 EQU 031H ; LCD显示缓存
LCDBUF2 EQU 032H
LCDBUF3 EQU 033H
LCDBUF4 EQU 034H
RPMSPEED0 EQU 035H ; RPM速度
RPMSPEED1 EQU 036H
RPMSPEED2 EQU 037H
KEYBUF0 EQU 03AH
KEYBUF1 EQU 03BH
SPEEDVAL EQU 03CH
TMR1STEP EQU 03DH
BRAKETIME EQU 03EH
BUZZTIME EQU 03FH ;
SPEEDNUM EQU 040H ; 速度计数寄存器
SPEEDHEX0 EQU 041H
SPEEDHEX1 EQU 042H
SPEEDHEX2 EQU 043H
SPEEDSTEP EQU 044H
LCD1BC EQU 060H
LCD2D EQU 061H
LCDP1 EQU 062H
LCD3D EQU 063H
LCDP2 EQU 064H
LCD4D EQU 065H
LCDP3 EQU 066H
LCD5D EQU 067H
LCD2E EQU 068H
LCD2C EQU 069H
LCD3E EQU 06AH
LCD3C EQU 06BH
LCD4E EQU 06CH
LCD4C EQU 06DH
LCD5E EQU 06EH
LCD5C EQU 06FH
LCD2G EQU 070H
LCD2B EQU 071H
LCD3G EQU 072H
LCD3B EQU 073H
LCD4G EQU 074H
LCD4B EQU 075H
LCD5G EQU 076H
LCD5B EQU 077H
LCD2F EQU 078H
LCD2A EQU 079H
LCD3F EQU 07AH
LCD3A EQU 07BH
LCD4F EQU 07CH
LCD4A EQU 07DH
LCD5F EQU 07EH
LCD5A EQU 07FH
FRPMSTOP EQU 03AH
FRPMHOLD EQU 03BH
;-------------------------------------------------------------------------------
LCDCOMPORT EQU P2 ; LCDCOM口
LCDCOM0 EQU 10101010B
LCDCOM1A EQU 10101000B
LCDCOM1B EQU 10101011B
LCDCOM2A EQU 10100010B
LCDCOM2B EQU 10101110B
LCDCOM3A EQU 10001010B
LCDCOM3B EQU 10111010B
LCDCOM4A EQU 00101010B
LCDCOM4B EQU 11101010B
LCDSEGPORT EQU P0 ; LCD SEG口
BUZZPIN EQU 0E9H ; 蜂鸣器控制脚P4.1
LCDBGLIGHT EQU P1.6 ; 背光控制灯
BRAKEPIN EQU P3.7 ; 制动控制脚
SPEEDPWM EQU P3.4
;*******************************************************************************
;** 中断向量表
;*******************************************************************************
;>>>>>Begin
ORG 0000H
LJMP START
ORG 000BH
LJMP INT_TIMER0
ORG 001BH
LJMP INT_TIMER1
;*******************************************************************************
;** TIMER0时间中断函数
;*******************************************************************************
INT_TIMER0:
PUSH PSW
PUSH ACC
PUSH DPL
PUSH DPH
MOV TH0,#0F8H ;>>TIMER1中断定时=10ms/F=12MHz
MOV TL0,#080H
SETB RS0
CLR RS1
INC T0STEP
;-------------------------------------------------------------------------------速度计算时间=0.46875s
INC SPEEDSTEP ; (N/0.45875)*32=RPM
MOV A,SPEEDSTEP
CJNE A,#0F2H,$+3
JC T0SPEEDCON0
MOV SPEEDSTEP,#00H
MOV SPEEDHEX2,SPEEDNUM
MOV SPEEDHEX1,TH1
MOV SPEEDHEX0,TL1
MOV TL1,#00H
MOV TH1,#00H
MOV SPEEDNUM,#00H
SETB FSPEEDCON ; 速度转换标志位
T0SPEEDCON0:
;-------------------------------------------------------------------------------制动时间
MOV A,BRAKETIME
JNZ BRAKECON0
CLR BRAKEPIN
JMP BRAKECON1
BRAKECON0:
DEC BRAKETIME
SETB BRAKEPIN
BRAKECON1:
;-------------------------------------------------------------------------------蜂鸣器时间
MOV A,BUZZTIME
JNZ BUZZCON0
CLR BUZZPIN ; P4.1
JMP BUZZCON1
BUZZCON0:
DEC BUZZTIME
SETB BUZZPIN ; P4.1
BUZZCON1:
;-------------------------------------------------------------------------------
MOV TMR1STEP,T0STEP
ANL TMR1STEP,#0FH
MOV A,SpeedVal
JNZ TMR1CON1
SETB SPEEDPWM
JMP TMR1OUT
TMR1CON1:
CJNE A,TMR1STEP,$+3
JC TMR1CON2
CLR SPEEDPWM
JMP TMR1OUT
TMR1CON2:
SETB SPEEDPWM
TMR1OUT:
;-------------------------------------------------------------------------------
MOV LCDCOMPORT,#LCDCOM0 ;>>全部COM端1/2电压
MOV A,T0STEP
ANL A,#03H
MOV B,A
JNZ TMR0CON2
JNB T0STEP.2,TMR0CON1
MOV LCDBUF1,LCDDATA1
MOV LCDBUF2,LCDDATA2
MOV LCDBUF3,LCDDATA3
MOV LCDBUF4,LCDDATA4
TMR0CON1:
JB T0STEP.2,TMR0CON2
MOV A,LCDDATA1
CPL A
MOV LCDBUF1,A
MOV A,LCDDATA2
CPL A
MOV LCDBUF2,A
MOV A,LCDDATA3
CPL A
MOV LCDBUF3,A
MOV A,LCDDATA4
CPL A
MOV LCDBUF4,A
TMR0CON2:
JNB T0STEP.2,TMR0CON3
MOV A,B
MOV B,#8
MUL AB
MOV DPTR,#JMPTAB1
JMP @A+DPTR
JMPTAB1:
MOV LCDCOMPORT,#LCDCOM1A
MOV LCDSEGPORT,LCDBUF1
AJMP TMR0CON4
MOV LCDCOMPORT,#LCDCOM2A
MOV LCDSEGPORT,LCDBUF2
AJMP TMR0CON4
MOV LCDCOMPORT,#LCDCOM3A
MOV LCDSEGPORT,LCDBUF3
AJMP TMR0CON4
MOV LCDCOMPORT,#LCDCOM4A
MOV LCDSEGPORT,LCDBUF4
AJMP TMR0CON4
TMR0CON3:
MOV A,B
MOV B,#8
MUL AB
MOV DPTR,#JMPTAB2
JMP @A+DPTR
JMPTAB2:
MOV LCDCOMPORT,#LCDCOM1B
MOV LCDSEGPORT,LCDBUF1
AJMP TMR0CON4
MOV LCDCOMPORT,#LCDCOM2B
MOV LCDSEGPORT,LCDBUF2
AJMP TMR0CON4
MOV LCDCOMPORT,#LCDCOM3B
MOV LCDSEGPORT,LCDBUF3
AJMP TMR0CON4
MOV LCDCOMPORT,#LCDCOM4B
MOV LCDSEGPORT,LCDBUF4
AJMP TMR0CON4
;-------------------------------------------------------------------------------按键处理
TMR0CON4:
TMR0CON5:
MOV A,T0STEP
ANL A,#010H
JNZ TMR0CON6
MOV A,P1
ORL A,#07H
ANL A,#0C7H
MOV B,A
MOV P1,A
NOP
NOP
NOP
MOV A,P1
ANL A,#03FH
ANL B,#03FH
XRL A,B
JNZ TMR0CON5A
JMP TMR0CON5Z
TMR0CON5A:
MOV A,P1
MOV R0,#00H
TMR0CON5B:
RRC A
INC R0
JC TMR0CON5B
MOV A,P1
ORL A,#038H
ANL A,#0F8H
MOV P1,A
NOP
NOP
NOP
MOV A,P1
RR A
RR A
RR A
MOV R1,#00H
TMR0CON5C:
RRC A
INC R1
JC TMR0CON5C
MOV A,R0
ANL A,#03H
MOV B,#03H
MUL AB
MOV B,R1
ANL B,#03H
ADD A,B
JB FFindKey,TMR0CON5D
MOV KEYBUF0,A
SETB FFindKey
JMP TMR0CON6
TMR0CON5D:
JB FHaveKey,TMR0CON5E
CJNE A,KEYBUF0,TMR0CON5Z
MOV KEYBUF1,KEYBUF0
SETB FHaveKey
TMR0CON5E:
JMP TMR0CON6
TMR0CON5Z:
CLR FFindKey
CLR FHaveKey
CLR FHadKey
;-------------------------------------------------------------------------------
TMR0CON6:
POP DPH
POP DPL
POP ACC
POP PSW
RETI
;*******************************************************************************
;** TIMER1时间中断函数
;*******************************************************************************
INT_TIMER1:
INC SPEEDNUM
RETI
;*******************************************************************************
;>>>The Pro inti.
;*******************************************************************************
START:
CLR EA
MOV SP,#0E0H
MOV 8EH,#02H ;bit0:ALE,=1(disable),=0(enable)|bit1:EXTRAM,=1(out ram),=0(in ram)
MOV R0,#0FFH ;*******CLR RAM
CLR A
INITRAM:
MOV @R0,A
DJNZ R0,INITRAM
;-------------------------------------------------------------------------------
MOV TMOD,#01010001B ; TIMER1计数器,TIMER0为定时器
MOV TH0,#0CAH ;>>TIMER1中断定时=10ms/F=16.384MHz
MOV TL0,#0ABH
MOV TH1,#00H ;>>TIMER1中断定时=10ms/F=16.384MHz
MOV TL1,#00H
MOV IP,#00001000B
MOV IE,#00001010B ;>>ET0/1/2=1
SETB TR0
SETB TR1
SETB EA
MOV LCDDATA1,#084H
MOV LCDDATA2,#0C0H
MOV LCDDATA3,#080H
MOV LCDDATA4,#0C0H
CLR LCDBGLIGHT
CLR BUZZPIN
MOV BUZZNUM,#08H
MOV RPMSPEED0,#00H
MOV RPMSPEED1,#00H
MOV RPMSPEED2,#00H
;*******************************************************************************
;;主循环程序。
;*******************************************************************************
MAINLOOP:
NOP
NOP
JNB FHaveKey,MAINCON1
NOP
NOP
JB FHadKey,MAINCON1
NOP
NOP
CALL KEYHANDLE
NOP
NOP
SETB FHADKEY
NOP
NOP
MAINCON1:
JNB FSPEEDCON,MAINCON2
NOP
NOP
CALL SPEEDCONVERT
NOP
NOP
MAINCON2:
NOP
NOP
JMP MAINLOOP
NOP
NOP
;*******************************************************************************
;;按键处理程序。
;*******************************************************************************
KEYHANDLE:
MOV BUZZTIME,#080H
MOV A,KEYBUF1
MOV RPMSPEED0,A
CJNE A,#08H,KEYCON1 ; S down
MOV A,SpeedVal
JZ KEYCON0A
DEC A
ANL A,#0FH
MOV SpeedVal,A
KEYCON0A:
JMP KEYOUT
KEYCON1:
CJNE A,#09H,KEYCON2 ; ON/OFF
JB FON,KEYCON1A
SETB FON
SETB P3.6
JMP KEYOUT
KEYCON1A:
CLR FON
CLR P3.6
JMP KEYOUT
KEYCON2:
CJNE A,#0AH,KEYCON3 ; CW/CCW
MOV A,SpeedVal
JZ KEYCON2A
JB FON,KEYCON2B
KEYCON2A:
JB FCW,KEYCON2A1
SETB FCW
SETB 0E8H ; P4.0
JMP KEYCON2B
KEYCON2A1:
CLR FCW
CLR 0E8H ; P4.0
KEYCON2B:
JMP KEYOUT
KEYCON3:
CJNE A,#0BH,KEYCON4 ; Break
SETB P3.7
MOV BRAKETIME,#080H
JMP KEYOUT
KEYCON4:
CJNE A,#0CH,KEYCON5 ; S up
MOV A,SpeedVal
INC A
ANL A,#0FH
JZ KEYCON4A
MOV SpeedVal,A
KEYCON4A:
JMP KEYOUT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -