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

📄 lcd_yb.bak

📁 基本NEC单片机的电动车液晶仪表源程序
💻 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 + -