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

📄 lcd_yba.asm

📁 基本NEC单片机的电动车液晶仪表源程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
            MOV         L,A
            BNC         $TAKE_TEP
            INC 	H
TAKE_TEP:   MOV         A,[HL]
            CMP         A,TEP_TEMP
            BNC         $TEP_ED
            INC         B
            BR          $TEP_CON
TEP_LAB0:   MOV         A,#0
            MOV         B,#0
            BR          $TEP_LAB4            
TEP_ED:     MOV         A,B
            CMP         A,#0
            BZ          $TEP_LAB1
            DEC         B
TEP_LAB1:   BT          ZE_UP,$TEP_LAB20
            MOV         A,#25                                 
            SUB         A,B
            MOV         B,A  
            BR          $TEP_LAB2
TEP_LAB20:  MOV         A,B
            SUB         A,#25
            MOV         B,A                                
TEP_LAB2:   MOV         A,B
            CALL        !BCD_COV
TEP_LAB4:   ;MOV         TEP_L,A
            CALL        !TAB_C
            MOV         COM_BUF,A
            AND         A,#0FH
            MOV         RAM8,A
            MOV         A,RAM9
            AND         A,#0FH
            MOV         RAM9,A
            MOV         A,COM_BUF
            AND         A,#0F0H
            OR          A,RAM9
            MOV         RAM9,A
            MOV         A,B
            CALL        !TAB_C
            MOV         COM_BUF,A
            MOV         A,RAM7
            AND         A,#0F0H
            MOV         RAM7,A
            MOV         A,COM_BUF
            AND         A,#0FH
            OR          A,RAM7
            MOV         RAM7,A
            
            MOV         A,COM_BUF
            AND         A,#0F0H
            OR          A,RAM8
            MOV         RAM8,A
TEP_EXT:            RET
;=======================================================================    
TAB_C:       MOVW       HL,#TAB_C0
             ADD        A,L
             MOV        L,A
             BNC        $TAB_CLAB
             INC        H
TAB_CLAB:    MOV        A,[HL]
             RET                  
TAB_C0:     DB 0F5H,060H,0B6H,0F2H,063H,0D3H,0D7H,070H,0F7H,0F3H ;077H
            ;    0   1    2    3    4    5    6   7     8    9    A     
;====================================================================== 
TEP_TAB:   DB 016D,017D,018D,019D,020D,021D,022D,023D,024D,025D,026D,027D,029D,030D
           ;  -25  -24  -23  -22  -21  -20  -19  -18  -17  -16  -15  -14  -13  -12
           DB 031D,032D,034D,035D,037D,038D,040D,041D,043D,045D,046D,048D,050D,052D
           ;  -11  -10  -9   -8   -7   -6   -5   -4   -3   -2   -1    0    1    2
           DB 054D,056D,058D,059D,061D,064D,066D,068D,070D,072D,074D,076D,079D,081D
           ;  3    4    5    6    7    8    9    10   11   12   13   14   15   16
           DB 083D,085D,088D,090D,092D,095D,097D,099D,102D,104D,107D,109D,111D,114D
           ;  17   18   19   20   21   22   23   24   25   26   27   28   29   30
           DB 116D,118D,121D,123D,125D,128D,130D,132D,135D,137D,139D,141D,144D,146D
           ;  31   32   33   34   35   36   37   38   39   40   41   42   43   44
           DB 148D,150D,152D,154D,156D,158D,160D,162D,164D,166D,168D,170D,172D,174D
           ;  45   46   47   48   49   50   51   52   53   54   55   56   57   58
           DB 175D,177D
           ;  59   60                          
;================================================
;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为需要显示的数据
		BF          MAOHAO,$MH_L
		SET1        A.0
MH_L:		CALL	!SDA1621;seg2	
		MOV	A,RAM3			;RAM3为需要显示的数据
		CALL	!SDA1621;seg3
		MOV	A,RAM4
		CALL	!SDA1621;seg4
		MOV	A,RAM5
		SET1        A.4
		BF          VL_F,$VL_MS
		BT          MAOHAO,$VL_MS
		CLR1        A.4
VL_MS:		CALL	!SDA1621;seg5
		MOV	A,RAM6
		CALL	!SDA1621;seg6
		MOV	A,RAM7
		CLR1        A.3
		BT          ZE_UP,$FH_LAB
		SET1        A.3
FH_LAB:		CALL	!SDA1621;seg7
		MOV	A,RAM8
		SET1        A.3
		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
		SET1        A.4                ;KM
		CALL	!SDA1621;seg12
		MOV	A,RAM13
		SET1        A.4
		CALL	!SDA1621;seg13
		MOV	A,RAM14
		CLR1        A.3
		BF          RA263,$DDD_LAB0
		SET1        A.3
DDD_LAB0:		CALL	!SDA1621;seg14
		MOV	A,RAM15
		CLR1        A.3
		BF          RA283,$DDD_LAB
		SET1        A.3
DDD_LAB:		CALL	!SDA1621;seg15
		MOV	A,RAM16
		CALL	!SDA1621;seg16		
		RET	     
;==============================================================
;BCD转换,出来时A为个数,B为十位数,
;===============================================================
BCD_COV:                MOV         B,#0
BCD_CON:                CMP         A,#10
                        BC          $BCD_END
                        INC         B
                        SUB         A,#10
                        BR          $BCD_CON
BCD_END:                RET   
;================================================================  
DISPLAY:                BF          TIMEA.5,$DISP_OUT
                        CALL        !DISPLAY_LCD 
DISP_OUT:               RET
;===============================================================
SD_RSTH:     MOV        SD_CNT,#0
SD_EXTA:     BR         !SD_EXT
SD_TEST:     BF         TIMEA.4,$SD_EXTA
             MOV        ADM,#1
             MOV        ADS,#2 
             NOP
             NOP
             NOP
             NOP
             NOP
             SET1       ADCS
WAIT_SAD:    BF         ADIF,$WAIT_SAD
             CLR1       ADIF
             MOV        A,ADCRH
             MOV         ADM,#0
             ADD        A,SD_BUF
             RORC       A,1
             MOV        SD_BUF,A
             CMP	A,SD_TEMP
	 BZ	$SD_RSTH
	 BC	$SD_DW
SD_UP:	 BT	SD_FLAG,$SD_AVR
	 SET1	SD_FLAG
	 BR	$SD_RST
SD_DW:	 BF	SD_FLAG,$SD_AVR
	 CLR1	SD_FLAG
	 BR	$SD_RST	
SD_AVR:  	 INC	SD_CNT
	 CMP	SD_CNT,#80
	 BC	$SD_EXTA
	 BF         SD_FLAG,$SD_SUB
	 ADD        SD_TEMP,#1
	 BR         $SD_RST
SD_SUB:      SUB        SD_TEMP,#1	  
SD_RST:	 MOV	SD_CNT,#0
           ;  CMP        A,#106
;	 BNC        $SD_RSTA
;	 MOV        A,#106
SD_RSTA:	 CMP        A,#228
	 BC         $SD_RSTB
	 MOV        A,#228
SD_RSTB:     MOV        SD_TEMP,A
SD_CONA:     MOV        B,#0
SD_CON:      MOVW       HL,#SD_TAB
             MOV        A,L
             ADD        A,B
             MOV        L,A
             BNC        $TAKE_SD
             INC        H
TAKE_SD:     MOV        A,[HL]
             CMP        A,SD_TEMP
             BNC        $SD_ED
             INC        B
             BR         $SD_CON
SD_ED:       MOV        A,B
             CLR1       SD_F
             CMP        A,#0
             BZ         $SD_LAB10
             DEC        B
             SET1       SD_F
             BR         $SD_LAB1
SD_LAB10:    MOV        LC_S,#0         
SD_LAB1:     MOV        A,B
             MOV        SD_TBUF,A
             CMP        A,#0
             BZ         $SD_WZ
             BF         AD_F,$SD_WZ
             CALL       !ADD_LOP
             MOV        SD_TBUF,A
SD_WZ:       CALL       !BCD_COV 
             CALL       !TAB_C
             MOV        RAM14,A
             MOV        A,B
             CALL       !TAB_C
             MOV        RAM15,A                         
SD_EXT:	 RET  
;=====================================================
SD_TAB:      DB 000D,004D,008D,011D,015D,019D,023D,027D,030D,034D,038D,042D,046D
             ;    0    1   2    3    4    5    6    7    8    9    10   11   12
             DB 049D,053D,057D,061D,064D,068D,072D,076D,080D,083D,087D,091D,095D
             ;    13  14   15   16   17   18   19   20   21   22   23   24   25
             DB 099D,102D,106D,110D,114D,118D,121D,125D,129D,133D,137D,140D,144D
             ;    26  27   28   29   30   31   32   33   34   35   36   37   38
             DB 148D,152D,155D,159D,163D,167D,171D,174D,178D,182D,186D,190D,193D
             ;    39  40   41   42   43   44   45   46   47   48   49   50   51
             DB 197D,201D,205D,209D,212D,216D,220D,224D,228D
             ;   52   53   54   55   56   57   58   59   60       
;=====================================================
ADD_LOP:      MOV	A,AD_ADJUST
             MOV  	B,A
             MOVW  	AX,#0
ADD_LP0:     ADD  	A,SD_TBUF
             BNC        $ADD_LP1
             INC        X
ADD_LP1:     DBNZ 	B,$ADD_LP0
             XCH        A,X
ADD_LP2:     CMPW       AX,#10
             BC         $ADD_LP3
             INC        B
             SUBW       AX,#10
             BR         $ADD_LP2
ADD_LP3:     MOV        A,B
             CMP        A,#99
             BC         $ADD_OUT
             MOV        A,#99
ADD_OUT:     RET  
;======================================================
;显示999.9KM,3个字节
;=====================================================
LC_TEST:     BF        FLAGA.0,$LC_OUT
             CLR1      FLAGA.0
             CALL      !ADD_28
             MOVW      LC_RAM0,AX
             MOV       A,LC_CRAM0
             ADD       A,LC_RAM0
             MOV       LC_CRAM0,A
             MOV       A,LC_CRAM1
             ADDC      A,LC_RAM1
             MOV       LC_CRAM1,A
             MOVW      AX,LC_CRAM0
             CALL      !SUB_1000
             MOVW      LC_CRAM0,AX
             MOV       A,LC_CT0
             ADD       A,B
             MOV       LC_CT0,A
             ADDC      LC_CT1,#0
             MOVW      AX,LC_CT0
             MOV       B,#0
             MOV       LC_XS0,#0
             MOV       LC_XS1,#0
             MOV       LC_XS2,#0
             MOV       LC_XS3,#0  
DW_1000:     CMPW      AX,#1000
             BC        $DW_100
             ADD       LC_XS3,#1
             SUBW      AX,#1000
             BR        $DW_1000
DW_100:      CMPW       AX,#100
             BC        $DW_10
             ADD       LC_XS2,#1
             SUBW      AX,#100
             BR        $DW_100
DW_10:       CMPW       AX,#10
             BC        $DW_OUT
             ADD       LC_XS1,#1
             SUBW      AX,#10
             BR        $DW_10
DW_OUT:      MOV       A,X
             MOV       LC_XS0,A
             CALL      !TAB_B
             MOV       RAM13,A
             MOV       A,LC_XS1
             CALL      !TAB_B
             MOV       RAM12,A
             MOV       A,LC_XS2
             CALL      !TAB_B
             MOV       RAM11,A
             MOV       A,LC_XS3
             CALL      !TAB_B
             MOV       RAM10,A                                                       
LC_OUT:      RET              
ADD_28:      MOV      A,SD_TBUF
             MOV      B,A
             MOVW     AX,#0 
LP_ADD:      ADDW     AX,#28
             DBNZ     B,$LP_ADD
             RET                               
;=====================================================
SUB_1000:    MOV      B,#0
SUB_LP:      CMPW      AX,#1000
             BC       $SUB_OUT
             INC      B
             SUBW     AX,#1000
             BR       $SUB_LP
SUB_OUT:     RET     
;=====================================================
AD_RSTH:     MOV        AD_CNT,#0
AD_EXTA:     BR         !AD_EXT
AD_TEST:     BF         TIMEA.3,$AD_EXTA
             MOV        ADM,#1
             MOV        ADS,#2 
             NOP
             NOP
             NOP
             NOP
             NOP
             SET1       ADCS
WAIT_AAD:    BF         ADIF,$WAIT_AAD
             CLR1       ADIF
             MOV        A,ADCRH
             MOV         ADM,#0
             MOV        A,#100
             ADD        A,AD_BUF
             RORC       A,1
             MOV        AD_BUF,A
             CMP	A,AD_TEMP
	 BZ	$AD_RSTH
	 BC	$AD_DW
AD_UP:	 BT	AD_FLAG,$AD_AVR
	 SET1	AD_FLAG
	 BR	$AD_RST
AD_DW:	 BF	AD_FLAG,$AD_AVR
	 CLR1	AD_FLAG
	 BR	$AD_RST	
AD_AVR:  	 INC	AD_CNT
	 CMP	AD_CNT,#80
	 BC	$AD_EXTA
	 BF         AD_FLAG,$AD_SUB
	 ADD        AD_TEMP,#1
	 BR         $AD_RST
AD_SUB:      SUB        AD_TEMP,#1	  
AD_RST:	 MOV	AD_CNT,#0
             CMP        A,#65
	 BNC        $AD_RSTA
	 CLR1       AD_F
	 BR         $AD_EXT
AD_RSTA:	 SUB        A,#64
             MOV        AD_TEMP,A
             CLR1       CY
             RORC       A,1
             CLR1       CY
             RORC       A,1
             MOV        AD_ADJUST,A
             SET1       AD_F
             CMP       	AD_ADJUST,#0
             BNZ        $AD_EXT
             CLR1       AD_F
AD_EXT:      RET             	
 	 END
		

⌨️ 快捷键说明

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