📄 vfd_dsp.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 + -