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

📄 vfd_dsp.c

📁 pt6312 VFD 应用程序,C汇编混合编
💻 C
字号:
/* vfd_DSP.C	*/

//#include<SM8958A.H>
#include<REG8958.H>
#include"myRADIO_CDa.H"
extern	void	CLEAR_WDT(void);

//===========================================
void	DISPLAY_WRITE(void)
 {
 //PT6312BUF08=VFD_ALL_8TABLE[0];
#pragma asm
;DISPLAY_WRITE:
extrn	code	(CLEAR_WDT);
extrn	code	(TRANSM_DATA_TO_6312)
extrn	code	(CLOCK_DISPLAY);
extrn	bit	(CD_POWER_ON)
extrn	bit	(STB)
extrn	bit	(B_AM_PM)
extrn	bit	(B_DSP_EN)
extrn	bit	(SCK)
extrn	bit	(DIN)
;extrn	data	(PT6312BUF08)

	LCALL	CLEAR_WDT
		JNB	 B_DSP_EN,DISPLAY_WRITE_EXIT
		CLR	 B_DSP_EN
waiting_T1_LATER:
		MOV		A,TH0
		CJNE	A,#0F7H,$+3
		JNC		waiting_T1_LATER

;PT6312 Display Mode:
        MOV	 A,#00000010B      ;00xxxb2b1b0=00xxx010 (6digits x 16segments)
        MOV	PT6312BUF08,A
        CLR   STB        ;CS=0 Data enable
        clr 	EA
	LCALL  TRANSM_DATA_TO_6312	;write the Mode into PT6312
;        setb 	EA
        SETB   STB        ;CS=1 Data Disable
;--------------------------------
;Control Display Commands:
        MOV	 A,#8EH      ;10xx(b3)b2-b0=10xx(1)110 is 14/16 , b3=1 Display ON , b7b6=10 display control
        ;;MOV	 A,#8DH      ;10xx(b3)b2-b0=10xx(1)101 is 12/16 , b3=1 Display ON , b7b6=10 display control
        MOV	PT6312BUF08,A
        CLR   STB        ;CS=0 Data enable
        clr 	EA        ;CS=0 Data enable
	LCALL  TRANSM_DATA_TO_6312	;write the Control Commands into PT6312
 ;       setb 	EA
        SETB   STB         ;CS=1 Data Disable
;-------------------------------------------------
        MOV	 A,#01000000B;
        MOV	PT6312BUF08,A
        CLR   STB        ;CS=0 Data enable
        clr 	EA        ;CS=0 Data enable
	LCALL  TRANSM_DATA_TO_6312	;write the Control Commands into PT6312
 ;       setb 	EA
        SETB   STB         ;CS=1 Data Disable
;-------------------------------------------------
;	LCALL	CLEAR_WDT
;		JNB	 B_DSP_EN,DISPLAY_WRITE_EXIT
;		CLR	 B_DSP_EN
;waiting_T1_LATER:
;		MOV		A,TH1
;		CJNE	A,#0F7H,$+3
;		JNC		waiting_T1_LATER
        MOV	 A,#DIGIT1-1		; buffer 从DIGIT1Starting
        MOV	 R0,A		;
        MOV	 A,#01000000B	;命令;
        MOV	 PT6312BUF08,A
;;        CLR   STB          ;CS=0 Data enable
	NOP
;;	LCALL TRANSM_DATA_TO_6312	;命令:设定 data 的命令(FixAddress给定地址)上边已经做了
;;        SETB   STB          ;CS=1
        MOV	 A,#0cH       		;6 x DIGITs
        MOV	 R2,A
DISPLAY_WRITE2:         ;<-------------------DECFSZ  GENR5E,-----------\--
;ADDRESS:
       MOV	 A,#DIGIT1-1		; buffer
	CLR	C
	SUBB	A,R0
	ORL	A,#0C0H
	MOV	PT6312BUF08,A
	ANL	A,#01FH
	JNZ	SKIP_ADDRESS_SET  ;
        SETB   STB          ;CS=1
        SETB   STB          ;CS=1
	CLR   STB        ;CS=0 Data enable
        clr 	EA
	;LJMP	SKIP_ADDRESS_SET	;$+2
	LCALL TRANSM_DATA_TO_6312
;DATA TO RAM:
SKIP_ADDRESS_SET:
	INC	R0		; buffer 地址增加一
	;JZ	   ;BTFSC	MCUSTAT,Z
	;INCF	FSR0H,1
	MOV	 A,@R0		; buffer 中指定地址的 data 传
	MOV	PT6312BUF08,A
	MOV	R3,A
;******************************************************************
	;rrcf	FSR0L,W,0
	;JNC	  ;btfss	MCUSTAT,C
	;LJMP	NOT_COV
	MOV	 A,R0		; buffer
	JNB	ACC.0,NOT_COV
	MOV	 A,R3	;PT6312BUF08高半节传入TEMP0C低半节,以便右移
	SWAP	 A
	MOV	 R3,A
	MOV	R1,#4
COV_H4:
	MOV	 A,R3
	RRC	A	;高半节左右位交换
	MOV	 R3,A
	MOV	 A,PT6312BUF08
	RLC	A	;并传入PT6312BUF08低半节
	MOV	 PT6312BUF08,A
	DJNZ	R1,COV_H4
	MOV	 A,PT6312BUF08
	SWAP	A	;恢复到PT6312BUF08高半节
	MOV	 PT6312BUF08,A
NOT_COV:
;************************
	LCALL TRANSM_DATA_TO_6312	;(源地址) data ->VFD_DRIVE地址中
        DJNZ    R2,DISPLAY_WRITE2        ;---------DECFSZ  GENR5E,----------/
		NOP
   	    SETB	STB         ;CS=1 TEST THE INC_ADDRESS
        setb EA
DISPLAY_WRITE_EXIT:
	RET			;END OF DISPLAY_WRITE:
;*************************************************************
 #pragma endasm
}
//===========================================
void	PT6312_4A21X(void)
 {
#pragma asm
	LCALL	PI6312_disp_proc1
 #pragma endasm
}
//===========================================
void	PT6312_4A21_6G_A(void)
 {
#pragma asm
;PT6312_4A21_6G_A:
	MOV	 TAB_OFFSET,A
		MOV	R0,#DIGIT6
	MOV	A,@R0
	ANL   A,#11111100B     	;       /
	MOV	@R0,A

	MOV	 A,#3BH	;DE,gx 的初始化地址
	MOV	GX_ADDRESS,A
	MOV	 A,#00H	;gx BitAddress
	LCALL	PI6312_disp_proc1
 #pragma endasm
}
//===========================================
void	PT6312_4A21_3G_1A(void)
 {
#pragma asm
	MOV	 TAB_OFFSET,A
	MOV	 A,#35H	;DE,gx  address
	MOV	GX_ADDRESS,A
	MOV	 A,#07H	;gx BitAddress
	LCALL	PI6312_disp_proc1
 #pragma endasm
}
//===========================================
void	PT6312_4A21_3G_2A(void)
 {
#pragma asm
;PT6312_4A21_3G_2A:
	MOV	 TAB_OFFSET,A
	MOV	 A,#35H	;DE,gx  address
	MOV	GX_ADDRESS,A
	MOV	 A,#00H	;gx BitAddress
	LCALL	PI6312_disp_proc1
 #pragma endasm
}
//===========================================
void	PT6312_4A21_4G_A(void)
 {
#pragma asm
;PT6312_4A21_4G_A:
	MOV	 TAB_OFFSET,A
	MOV	 A,#37H	;DE,gx  address
	MOV	GX_ADDRESS,A
	MOV	 A,#00H	;gx BitAddress
	LCALL	PI6312_disp_proc1
 #pragma endasm
}
//===========================================
void	PT6312_4A21_5G_1A(void)
 {
#pragma asm
;PT6312_4A21_5G_1A:
	MOV	 TAB_OFFSET,A
	MOV	 A,#39H	;DE,gx  address
	MOV	GX_ADDRESS,A
	MOV	 A,#07H	;gx BitAddress
	LCALL	PI6312_disp_proc1
 #pragma endasm
}
//===========================================
void	PT6312_4A21_5G_2A(void)
 {
#pragma asm
;PT6312_4A21_5G_2A:
	;BCF		DIGIT5,P16
	MOV	 TAB_OFFSET,A
	;------------------
	MOV	R0,#DIGIT5
	MOV	A,@R0
	ANL	A,#11111110B
	MOV	@R0,A
	;------------------
	MOV	 A,#39H	;DE,gx  address
	MOV	GX_ADDRESS,A
	MOV	 A,#00H	;gx地址内的位置
	LCALL	PI6312_disp_proc1
 #pragma endasm
}

//===========================================
void	PT6312_4A21_2G_A(void)
 {
#pragma asm
;;PT6312_4A21_2G_A:
	MOV	 TAB_OFFSET,A
	MOV	 A,#33H	;DE,gx  address
	MOV	GX_ADDRESS,A
	MOV	 A,#00H	;gx BitAddress
	LCALL	PI6312_disp_proc1
 #pragma endasm
}

//===========================================
void	PI6312_disp_proc1(void)
 {
  PT6312BUF08 = VFD_ALL_8TABLE[0];
#pragma asm
extrn	bit	(MAIN_PWR);
extrn	bit	(B_MO_CW);
extrn	bit	(B_MO_CCW);
extrn	bit	(LED_FLASH);
extrn	bit	(INPUTTEST);
extrn	bit	(CD_ON)
extrn	bit	(B_LONGSL_FLG)
extrn	bit	(MUTE)
extrn	bit	(ADC_OUT_B)
extrn	bit	(AUDIO_ON)
;;extrn	bit	(CD_POWER_ON)
extrn	bit	(B_IIC_WRITEDONE_FLAG)
extrn	bit	(BEEP)
extrn	bit	(FM24C01_SDA)
extrn	bit	(FM24C01_SCL)
extrn	bit	(SDA)
extrn	bit	(SCL)

extrn	data	(SEL_KEY_STATUS_0XF2)
extrn	data	(VOL_VALUE_0X7B)
extrn	data	(BALANCEL_VALUE_0X7C)
extrn	data	(FADER_VALUE_0X7D)
extrn	data	(BASS_VALUE_0X7E)
extrn	data	(TREBLE_VALUE_0X7F)
extrn	data	(TRAN_VOL_80H)	; Volume (attenuation)value数,AAA for "个"
extrn	data	(TRAN_RL_81H)	;Single channel(attenuation)value
extrn	data	(TRAN_RR_82H)	;Single channel(attenuation)value
extrn	data	(TRAN_FL_83H)	;Single channel(attenuation)value
extrn	data	(TRAN_FR_84H)	;Single channel(attenuation)value
extrn	data	(TRAN_SW_85H)	;音信开关s2="1" for LOUD_OUTNESS=ON,(g1g2)是ON后提升系数
extrn	data	(TRAN_BAS_86H);BASS(attenuation)value

extrn	data	(RADIO_BAND_0X63)
extrn	data	(TRAN_TRE_87H)
;;extrn	code	(DISPLAY_WRITE);
;;extrn	code	(CLOCK_DISPLAY);
;;extrn	bit	(CD_POWER_ON)
;;extrn	bit	(STB)
;;extrn	bit	(B_AM_PM)
;;extrn	bit	(B_DSP_EN)
;;extrn	bit	(SCK)
;;extrn	bit	(DIN)
;;extrn	data	(PT6312BUF08)
extrn	data	(T_MINUTE)
extrn	data	(T_HOURS)

extrn	data	(DIGIT1) ;;0;
extrn	data	(DIGIT1A) ;;1;
extrn	data	(DIGIT2) ;;2;
extrn	data	(DIGIT2A) ;;3;
extrn	data	(DIGIT3) ;;4;
extrn	data	(DIGIT3A) ;;5;
extrn	data	(DIGIT4) ;;6;
extrn	data	(DIGIT4A) ;;7;
extrn	data	(DIGIT5) ;;8;
extrn	data	(DIGIT5A) ;;9;
extrn	data	(DIGIT6) ;;A;
extrn	data	(DIGIT6A) ;;B;
extrn	data	(TAB_OFFSET)
extrn	data	(GX_ADDRESS)
extrn	data	(BIT_ADDRESS)


;PI6312_disp_proc1:
	MOV	BIT_ADDRESS,A
	setb	B_DSP_EN	;;write PT6312 enable
	MOV	 A,TAB_OFFSET
	ADD  	A,#LOW (VFD_ALL_8TABLE)
	MOV  	DPL,A
	CLR  	A
	ADDC 	A,#HIGH (VFD_ALL_8TABLE)
	MOV  	DPH,A
	CLR  	A
	MOVC 	A,@A+DPTR
 ;       MOV     DPTR,#VFD_ALL_8TABLE
 ;       MOVC    A,@A+DPTR	;@A=2,1,0
	;LCALL	VFD_ALL_8TABLE	;SAME AS 0EH->(d)Get B'01111010'->W
	MOV	PT6312BUF08,A		;(PT6312BUF08)=B'01111010'取到的字模LSB全都是b0="0"
    	MOV  	R0,GX_ADDRESS		;指定MCU源地址=基址 + 2x(n-1)=30H+2X(6-1)=3AH
	MOV	 A,BIT_ADDRESS		;第几位 for 数字的"a"段
	JZ	PRE_BYTE   ;BTFSC	MCUSTAT,Z;if BIT_ADDRESS=0 then transmit into GX_ADDRESS
	CJNE	A,#07H,ERR_EXIT
	LJMP	PI6312_disp_BUFFINC1		;if BIT_ADDRESS=7 then transmit into GX_ADDRESS
ERR_EXIT:
	RET
PRE_BYTE:
	;BCF	INDF0,0	;;送 buffer 中本字"2a" clear
	MOV	A,@R0
	ANL	A,#11111110B
	MOV	@R0,A
	CLR	C
	MOV	A,PT6312BUF08
	RLC	A  		;;MSB->CY
	MOV	PT6312BUF08,A
	JNC	 PRE_BYTE_1 ;BTFSC	MCUSTAT,C		;;"1"?
	;BSF	INDF0,0	;;YES IS ONE,本字"2a" ="1"
	MOV	A,@R0		;;YES IS ONE,本字节"2a" ="1"
	ORL	A,#00000001B	;;YES IS ONE,本字节"2a" ="1"
	MOV	@R0,A
PRE_BYTE_1:
	DEC	R0	;其它位字模,则GX_ADDRESS减一
	MOV	 A,@R0
	ANL	A,#03H
	ORL	A,PT6312BUF08		;;现在的字模b1b0="0""0"
	MOV	@R0,A			;;"或"运算后送 buffer
	LJMP	PI6312_disp_proc1_exit
PI6312_disp_BUFFINC1:
	MOV	 A,@R0
	ANL	A,#01H
	ORL	A,PT6312BUF08		;;现在的字模b1b0="0""0"
	MOV	@R0,A			;;运算后送 buffer
PI6312_disp_proc1_exit:
	RET
 #pragma endasm
}

⌨️ 快捷键说明

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