📄 lcd_yb.bak
字号:
NAME MOTORBIKE LCD
;==============================================
TIME_F EQU 0FE80H
;==============================================
;TIME_F.0==10MS FLAG
;TIME_F.1==500MS FLAG
VOL_FLAG EQU TIME_F.2
;==============================================
TIMEA EQU 0FE81H
TIME10MS EQU 0FE82H
TIME500MS EQU 0FE83H
VOL_CNT EQU 0FE84H
VOL_TEMP EQU 0FE85H
VOL_BUF EQU 0FE86H
RAM1 EQU 0FE87H
RAM2 EQU 0FE88H
RAM3 EQU 0FE89H
RAM4 EQU 0FE8AH
RAM5 EQU 0FE8BH
RAM6 EQU 0FE8CH
RAM7 EQU 0FE8DH
RAM8 EQU 0FE8EH
RAM9 EQU 0FE8FH
RAM10 EQU 0FE90H
RAM11 EQU 0FE91H
RAM12 EQU 0FE92H
RAM13 EQU 0FE93H
RAM14 EQU 0FE94H
RAM15 EQU 0FE95H
RAM16 EQU 0FE96H
TEMP EQU 0FE97H
SEND_CNT EQU 0FE98H
;==============================================
WR_1621 EQU P3.2
DA_1621 EQU P4.0
CS_1621 EQU P4.3
RAM2.0 EQU RAM1.1
;==============================================
ORG 0000H
DW MAIN
ORG 000CH
DW MAIN
ORG 000EH
DW ISR_INTTM000
ORG 0040H
?INIT_CPU: DW INIT_CPU
?REST_RAM: DW REST_RAM
?INIT_PORT: DW INIT_PORT
?INIT_TM00: DW INIT_TM00
ORG 0080H
DB 94H ;option byte
DB 0A7H ;protect byte
ORG 0082H
MAIN: MOVW AX,#0FEF6H
MOVW SP,AX
DI
CALLT [?INIT_CPU]
MOV A,RESF
BF A.4,$RST_RAM
BR $INIT_P
RST_RAM: CALLT [?REST_RAM]
INIT_P: CALLT [?INIT_PORT]
CALLT [?INIT_TM00]
EI
CALL !DISPLAY_LCD
MOV RAM2,#1
MAIN_A: ; CALL !TIME_SUB
; CALL !TEMP_TEST
CALL !VOL_TEST
BR !MAIN_A
;===============================================
ISR_INTTM000:PUSH AX
CLR1 TMIF000
MOV A,TIMEA
ROL A,1
BF A.5,$OUT_TM000
MOV A,#0
OUT_TM000: MOV TIMEA,A
INC TIME10MS
CMP TIME10MS,#10
BC $OUT_TM000A
MOV TIME10MS,#0 ;10MS
INC TIME500MS
CMP TIME500MS,#50
BC $OUT_TM000A
MOV TIME500MS,#0
OUT_TM000A: POP AX
RETI
;================================================
INIT_CPU: MOV WDTM,#70H ;16.384MS
MOV WDTE,#0ACH
MOV PCC,#00H ;set fx to 8M
MOV PPCC,#00H
MOV LSRCM,#01H
MOV IF0,#00H
MOV MK0,#0FFH
RET
;==================================================
REST_RAM: MOVW HL,#0FE80H
MOV B,#110
MOV A,#0
REST_RAM1: MOV [HL],A
INCW HL
DBNZ B,$REST_RAM1
RET
;==================================================
INIT_PORT: MOV P2,#0
MOV PMC2,#0FH
MOV PM2,#0FFH
CLR1 PM3.2
CLR1 P3.2
MOV PM4,#0
MOV P4,#09H
RET
;==================================================
INIT_TM00: MOV TMC00,#0
MOV TOC00,#0
MOV CRC00,#0
MOV PRM00,#0
MOVW AX,#8000-1
MOVW CR000,AX
MOV TMC00,#0CH
CLR1 TMMK000
CLR1 TMIF000
RET
;==================================================
VOL_TEST: BF TIMEA.2,$VOL_EXT
MOV ADM,#1
MOV ADS,#2
NOP
NOP
NOP
NOP
NOP
SET1 ADCS
WAIT_VAD: BF ADIF,$WAIT_VAD
MOV ADM,#0
CLR1 ADIF
MOV A,ADCRH
MOV VOL_BUF,A
CMP A,VOL_TEMP
BZ $VOL_RST
BC $VOL_DW
VOL_UP: BT VOL_FLAG,$VOL_AVR
SET1 VOL_FLAG
BR $VOL_RST
VOL_DW: BF VOL_FLAG,$VOL_AVR
CLR1 VOL_FLAG
BR $VOL_RST
VOL_AVR: INC VOL_CNT
CMP VOL_CNT,#80
BC $VOL_EXT
MOV VOL_TEMP,A
VOL_RST: MOV VOL_CNT,#0
VOL_EXT: RET
;================================================
;LCD显示程序
;以下为HT1621的写程序,发送命令字格式为:100 xxxx xxxx x all is 12bits
;该程序的入口参数为A,再送到TEMP
COM1621: MOV TEMP,A
CLR1 CS_1621
SET1 DA_1621
CALL !CK_1621
CLR1 DA_1621
CALL !CK_1621
CALL !CK_1621
;上为发关100代码
CALL !SD_1621
CALL !CK_1621 ;第九个脉冲 0
SET1 CS_1621
RET
;-----------------------
SDA1621: MOV TEMP,A
SD_1621: MOV SEND_CNT,#8
SD1621A: SET1 DA_1621
BT A.7,$SD1621B
CLR1 DA_1621
SD1621B: SET1 WR_1621
ROLC A,1
NOP
NOP
NOP
NOP
CLR1 WR_1621
DBNZ SEND_CNT,$SD1621A
ROLC A,1
MOV TEMP,A ;保持入参不变
RET
;-----------------------
CK_1621: SET1 WR_1621
NOP
NOP
NOP
NOP
NOP
NOP
CLR1 WR_1621
RET
;====================================================
;LCD显示程序
DISPLAY_LCD:;1621控制字
MOV A,#00011000B;0X18 ;XTAL 256K INTTEL_MODE---RC
CALL !COM1621
MOV A,#00000001B;0X01 ;SYS_OSC START MODE
CALL !COM1621
MOV A,#00101001B;0X29 ;1/4;1/3 BIAS 4COM LCD MODE
CALL !COM1621
MOV A,#00000011B;0X03 ;LCD ON MODE
CALL !COM1621
;------------------------
;开始的SEG段选择,假设开始为SEG1
CLR1 CS_1621 ;片选有效
MOV A,#10100000B;值看情况定 ;开始的SEG段选择,后边没送一个数据SEG加1
CALL !SDA1621 ;101 01100.0--看情况定
CLR1 DA_1621 ;第九位值恒为'0'
CALL !CK_1621 ;第九位空脉冲
;------------------------
MOV A,RAM1 ;RAM1为需要显示的数据
CALL !SDA1621;seg1
MOV A,RAM2 ;RAM2为需要显示的数据
CALL !SDA1621;seg2
MOV A,RAM3 ;RAM3为需要显示的数据
CALL !SDA1621;seg3
MOV A,RAM4
CALL !SDA1621;seg4
MOV A,RAM5
CALL !SDA1621;seg5
MOV A,RAM6
CALL !SDA1621;seg6
MOV A,RAM7
CALL !SDA1621;seg7
MOV A,RAM8
CALL !SDA1621;seg8
MOV A,RAM9 ;RAM1为需要显示的数据
CALL !SDA1621;seg9
MOV A,RAM10 ;RAM2为需要显示的数据
CALL !SDA1621;seg10
MOV A,RAM11 ;RAM3为需要显示的数据
CALL !SDA1621;seg11
MOV A,RAM12
CALL !SDA1621;seg12
MOV A,RAM13
CALL !SDA1621;seg13
MOV A,RAM14
CALL !SDA1621;seg14
MOV A,RAM15
CALL !SDA1621;seg15
MOV A,RAM16
CALL !SDA1621;seg16
RET
;===============================================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -