⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd_ybb.asm

📁 基本NEC单片机的电动车液晶仪表源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
NAME MOTORBIKE LCD
;==============================================
TIME_F      EQU         0FE80H
;==============================================
MAOHAO      EQU         TIME_F.0
VOL_FLAG    EQU         TIME_F.1
VL_F        EQU         TIME_F.2
ZE_FLAG     EQU         TIME_F.3
ZE_UP       EQU         TIME_F.4
TEP_FLAG    EQU         TIME_F.5
SD_FLAG     EQU         TIME_F.6
AD_FLAG     EQU         TIME_F.7
;==============================================
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
VOL_C1      EQU         0FE99H            ;电压十位数
VOL_C2      EQU         0FE9AH            ;电压个位数
VOL_C3      EQU         0FE9BH            ;电压小数
SYS_S       EQU         0FE9CH
SYS_M       EQU         0FE9DH
SYS_H       EQU         0FE9EH
SYS_MG      EQU         0FE9FH
SYS_MS      EQU         0FEA0H
SYS_HG      EQU         0FEA1H
SYS_HS      EQU         0FEA2H
COM_BUF     EQU         0FEA3H
TEP_BUF     EQU         0FEA4H
TEP_TEMP    EQU         0FEA5H
TEP_CNT     EQU         0FEA6H
SD_BUF      EQU         0FEA7H
SD_TEMP     EQU         0FEA8H
SD_CNT      EQU         0FEA9H
LC_RAM0     EQU         0FEAAH
LC_RAM1     EQU         0FEABH
LC_CRAM0    EQU         0FEACH
LC_CRAM1    EQU         0FEADH
LC_CT0      EQU         0FEAEH
LC_CT1      EQU         0FEAFH
LC_XS0      EQU         0FEB0H
LC_XS1      EQU         0FEB1H
LC_XS2      EQU         0FEB2H
LC_XS3      EQU         0FEB3H
LC_S        EQU         0FEB4H
FLAGA       EQU         0FEB5H
AD_BUF      EQU         0FEB6H
AD_TEMP     EQU         0FEB7H
AD_CNT      EQU         0FEB8H
AD_ADJUST   EQU         0FEB9H
FLAGB       EQU         0FEBAH
;=====================================
SD_F        EQU         FLAGA.1
RA263       EQU         FLAGA.2
RA283       EQU         FLAGA.3
AD_F        EQU         FLAGA.4
;======================================
SD_TBUF     EQU         0FEC0H
TIMEB       EQU         0FEC1H
SD_S        EQU         0FEC2H
;==============================================
WR_1621     EQU         P3.2
DA_1621     EQU         P4.0
CS_1621     EQU         P4.3
;==============================================
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
            MOV         TIMEA,#1
            MOV         TIMEB,#1
            MOV         RAM10,#0AFH
            MOV         RAM11,#0AFH
            MOV         RAM12,#0AFH
            MOV         RAM13,#0AFH
           ; CALL        !DISPLAY_LCD
            MOV         RAM7,#1
            CALL        !DISPLAY_LCD
MAIN_A:     CALL        !TIME_SUB            
            CALL        !VOL_TEST
            CALL        !TEMP_TEST
            CALL        !AD_TEST
            CALL        !SD_TEST
            CALL        !DISPLAY
            CALL        !LC_TEST
            BR          !MAIN_A           
;===============================================
ISR_INTTM000:PUSH       AX
             CLR1	TMIF000
             MOV        A,TIMEA
             ROL        A,1
             BF         A.6,$OUT_TM000
             MOV        A,#1
OUT_TM000:   MOV        TIMEA,A
             INC        TIME10MS
             CMP        TIME10MS,#10
             BC         $OUT_TM000A
             MOV        TIME10MS,#0          ;10MS
             BF         SD_F,$TIME_LAB0
             INC        SD_S
             CMP        SD_S,#30
             BC         $TIME_LAB
             MOV        SD_S,#0
             MOV        A,TIMEB
             ROL        A,1
             MOV        TIMEB,A
             BF         A.6,$TIME_LAB
TIME_LAB0:   MOV        TIMEB,#1
             MOV        SD_S,#0
TIME_LAB:    INC        TIME500MS
             CMP        TIME500MS,#50
             BC         $OUT_TM000A
             MOV        TIME500MS,#0
             INC        SYS_S
             XOR        TIME_F,#01H          ;冒号的闪烁
             INC        LC_S
             CMP        LC_S,#20
             BC         $OUT_TM000A
             SET1       FLAGA.0 
             MOV        LC_S,#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
;==================================================
TIME_OUTB:   BR         !TIME_OUT
TIME_SUB:    BF         TIMEA.0,$TIME_OUTB
             BT         FLAGB.0,$TIME_OUTB
             MOV        FLAGB,#1
             CMP        SYS_S,#120
             BC         $TIME_OUTA
             MOV        SYS_S,#0
             MOV        A,SYS_M
             INC        A
             MOV        SYS_M,A
             CMP        A,#60
             BC         $TIME_OUTA
             MOV        SYS_M,#0
             MOV        A,SYS_H
             INC        A
             MOV        SYS_H,A
             CMP        A,#19
             BC         $TIME_OUTA
             MOV        SYS_H,#19
TIME_OUTA:  
             BF         TIMEB.0,$DD_LAB0
             CLR1       RA283
             CLR1       RA263
             CLR1       RAM9.3
             CLR1       RAM9.2
             CLR1       RAM9.1
             SET1       RAM9.0
DD_LAB0:     BF         TIMEB.1,$DD_LAB1
             SET1       RAM9.1
DD_LAB1:     BF         TIMEB.2,$DD_LAB2
             SET1       RAM9.2
DD_LAB2:     BF         TIMEB.3,$DD_LAB3
             SET1       RAM9.3
DD_LAB3:     BF         TIMEB.4,$DD_LAB4
             SET1       RA283
DD_LAB4:     BF         TIMEB.5,$DD_LAB5 
             SET1       RA263                                
DD_LAB5:     MOV        A,SYS_M
             CALL       !BCD_COV
             MOV        SYS_MG,A
             CALL       !TAB_A
             MOV        RAM1,A                ;分钟的个位
             MOV        A,B
             MOV        SYS_MS,A
             CALL       !TAB_A
             MOV        RAM2,A                ;分钟的十位
             MOV        A,SYS_H
             CALL       !BCD_COV
             MOV        SYS_HG,A
             CALL       !TAB_A
             MOV        RAM3,A                ;小时的个位
             MOV        A,B
             MOV        SYS_HS,A
             CMP        A,#0
             BZ         $TIME_OUT
             SET1       RAM3.0                ;小时的十位
TIME_OUT:    RET             
;==================================================
TAB_A:       MOVW       HL,#TAB_A0
             ADD        A,L
             MOV        L,A
             BNC        $TAB_ALAB
             INC        H
TAB_ALAB:    MOV        A,[HL]
             RET 
;======================================================                    
TAB_A0:      DB 0FAH,60H,0D6H,0F4H,6CH,0BCH,0BEH,0E0H,0FEH,0FCH ;0EEH 
             ;    0   1   2    3    4   5    6    7    8    9     A
;==================================================
TAB_B:       MOVW       HL,#TAB_B0
             ADD        A,L
             MOV        L,A
             BNC        $TAB_BLAB
             INC        H
TAB_BLAB:    MOV        A,[HL]
             RET        
TAB_B0:      DB 0AFH,06H,06DH,04FH,0C6H,0CBH,0EBH,00EH,0EFH,0CFH ;0EEH 
             ;    0   1   2    3    4   5    6    7    8    9     A
;=================================================
VOL_RSTH:    MOV        VOL_CNT,#0
VOL_EXTA:    BR         !VOL_EXT
VOL_TEST:    BF         TIMEA.1,$VOL_EXTA
             BT         FLAGB.1,$VOL_EXTA
             MOV        FLAGB,#2
             MOV        ADM,#1
             MOV        ADS,#2 
             NOP
             NOP
             NOP
             NOP
             NOP
             SET1       ADCS
WAIT_VAD:    BF         ADIF,$WAIT_VAD
             CLR1       ADIF
             MOV        A,ADCRH
             MOV        ADM,#0
             ADD        A,VOL_BUF
             RORC       A,1
             MOV        VOL_BUF,A
             CMP	A,VOL_TEMP
	 BZ	$VOL_RSTH
	 BC	$VOL_DW
VOL_UP:	 BT	VOL_FLAG,$VOL_AVR
	 SET1	VOL_FLAG
	 BR	$VOL_RSTH
VOL_DW:	 BF	VOL_FLAG,$VOL_AVR
	 CLR1	VOL_FLAG
	 BR	$VOL_RSTH	
VOL_AVR:  	 INC	VOL_CNT
	 CMP	VOL_CNT,#80
	 BC	$VOL_EXTA
	 BF         VOL_FLAG,$VOL_SUB
	 ADD	VOL_TEMP,#1
	 BR         $VOL_RST
VOL_SUB:	 SUB        VOL_TEMP,#1 
VOL_RST:	 MOV	VOL_CNT,#0
             CLR1       ZE_FLAG
             CMP        A,#106
	 BNC        $VOL_RSTA
	 MOV        A,#106
	 SET1       ZE_FLAG
VOL_RSTA:	 CMP        A,#228
	 BC         $VOL_RSTB
	 MOV        A,#228
VOL_RSTB:    MOV        VOL_TEMP,A
             CLR1       VL_F
             CMP        A,#164
             BNC        $VOL_CONA
             SET1       VL_F
VOL_CONA:    MOV        B,#0
VOL_CON:     MOVW       HL,#VOL_TAB
             MOV        A,L
             ADD        A,B
             MOV        L,A
             BNC        $TAKE_VOL
             INC        H
TAKE_VOL:    MOV        A,[HL]
             CMP        A,VOL_TEMP
             BNC        $VOL_ED
             INC        B
             BR         $VOL_CON
VOL_ED:      MOV        A,B
             CMP        A,#0
             BZ         $VOL_LAB1
             DEC        B
VOL_LAB1:    MOV        VOL_C3,#5
             MOV        RAM4,#3BH
             MOV        A,RAM7
             AND        A,#0FH
             OR         A,#0D0H
             MOV        RAM7,A
             MOV        A,B
	 BT         A.0,$VOL_LAB0
             MOV        VOL_C3,#0
             MOV        RAM4,#3FH
             MOV        A,RAM7
             AND        A,#0FH
             OR         A,#0B0H
             MOV        RAM7,A
VOL_LAB0:    MOV        A,B
             CLR1       CY
             RORC       A,1
             ADD        A,#28
             MOV        VOL_C2,A
             CALL       !BCD_COV
             MOV        VOL_C2,A
             CALL       !TAB_B
             MOV        RAM6,A
             MOV        A,B
             MOV        VOL_C1,A
             CALL       !TAB_B
             MOV        RAM5,A                          
VOL_EXT:	 RET
;================================================
;================================================
VOL_TAB:     DB 106D,108D,110D,112D,114D,116D,118D,119D,121D,123D,125D,127D,129D,131D,133D,135D
             ;   28  28.5 29   29.5 30   30.5 31   31.5 32   32.5 33   33.5 34   34.5 35   35.5
             DB 137D,138D,140D,142D,144D,146D,148D,150D,152D,154D,155D,157D,159D,161D,163D,165D
              ; 36   36.5 37   37.5 38   38.5 39   39.5 40   40.5 41   41.5 42   42.5 43   43.5
             DB 167D,169D,171D,173D,174D,176D,178D,180D,182D,184D,186D,188D,190D,192D,193D,195D
             ;   44  44.5 45   45.5  46  46.5 47   47.5 48   48.5  49  49.5 50   50.5 51   51.5 
             DB 197D,199D,201D,203D,205D,207D,209D,210D,212D,214D,216D,218D,220D,222D,224D,226D,228D
             ;  52   52.5 53   53.5 54  54.5  55   55.5 56  56.5  57  57.5  58  58.5  59   59.5 60             
;================================================
TEP_RSTH:   MOV         TEP_CNT,#0
TEP_EXTA:   BR          !TEP_EXT
TEMP_TEST: 	BF	TIMEA.2,$TEP_EXTA
            BT          FLAGB.2,$TEP_EXTA
            MOV         FLAGB,#4
           	MOV         ADM,#1
           	MOV         ADS,#2
           	NOP
           	NOP
           	NOP
           	NOP
           	NOP
           	SET1        ADCS
WAIT_TEP:	BF	ADIF,$WAIT_TEP
            CLR1        ADIF
            MOV         A,ADCRH
;            MOV         A,#126
            MOV         ADM,#0
            ADD         A,TEP_BUF
            RORC        A,1
            MOV         TEP_BUF,A
            CMP         A,TEP_TEMP
            BZ          $TEP_RST
            BC          $TEP_DW    
TEP_UP:     BT          TEP_FLAG,$TEP_AVR
            SET1        TEP_FLAG
            BR          $TEP_RST  
TEP_DW:     BF          TEP_FLAG,$TEP_AVR
            CLR1        TEP_FLAG
            BR          $TEP_RST
TEP_AVR:    INC         TEP_CNT
            CMP         TEP_CNT,#80
            BC          $TEP_EXTA
            BF          TEP_FLAG,$TEP_SUB
            ADD         TEP_TEMP,#1
            BR          $TEP_RST
TEP_SUB:    SUB         TEP_TEMP,#1            
TEP_RST:    MOV         TEP_CNT,#0
            CMP         A,#16
            BNC         $TEP_RSTA
            MOV         A,#16
TEP_RSTA:   CMP         A,#177
            BC          $TEP_RSTB
            MOV         A,#177
TEP_RSTB:   MOV         TEP_TEMP,A
            MOV         A,TEP_TEMP
            SET1        ZE_UP
            CMP         A,#48              ;0
            BZ          $TEP_LAB0
            BNC         $TEP_CONA
            CLR1        ZE_UP
TEP_CONA:   MOV         B,#0
TEP_CON:    MOVW        HL,#TEP_TAB
            MOV         A,L
            ADD         A,B

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -