;;=========================================================== ;程序单位: ;程序名称:大88 数码管显示 ;使用芯片:156/CD4094/2258 ;使用晶振:4MHz ;日期:2005年9月13日 // 2005年11月2日 ;程序编写者:ANLONG CHEN ; ;=========================================================== include "logo.h" ;======入口=================================================== org 0x000 JMP prginit ;main program entir point org 0x001 ;INT instruction entir point RETI org 0x008 ;中断向量地址 JMP TTCI ; ;RETI ;NOP include "Table.h" ;======程序初始化============================================== prginit: DISI ;close int MOV A,@0X0F ;P5不管输入或输出开机均为高电位 03H MOV DATA5,A ; MOV A,@0XFF ;P6管输入或输出开机均为高电位 MOV DATA6,A ; MOV A,@0x00 ;0=输出,1=读入 IOW DATA5 ;定义P5口输出 MOV A,@0x31 ;=0输出,1=读入 ;MOV A,@0x30 ;不用遥控器 IOW DATA6 ; ;MOV A,@0x00 ;=0为内部上拉 ;IOW 0x0D ;P6 对上拉电阻控制位 ;MOV A,@0x9F ;=0为内部上拉 ;IOW 0x0B ;P5 ;MOV A,@0x06 ;1:128 MOV A,@0x03 ;1:16 47控制寄存器设置status register====== CONTW ;预分频器分给TCC/分频值是1:128PAB ;TCC为上升沿触发加一信号并按内部指令输入 ;由ENI/RETI开中断 MOV A,@0x40 ; IOW 0x0E ;关闭看门狗/P60作外中断源入/R-option未用(P50、P51) ; MOV A,@0x05 ;0000,0101 MOV A,@0x01 ;0000,0101 IOW 0x0F ;允许 外部下降中断/计时溢出中断 /不允许 P6口INT下降中断 MOV A,@0x18 ;GP_0/PS1_0/PS0_0/T_1/P_1/Z_0/DC_0/C_0 MOV STAT,A ;状态寄存器设置 ; BC PORT5,COMLED2 ;对数码管扫描1 ; BC PORT5,COMLED1 ;对数码管扫描2 ; CALL delayt_10ms ; ; CALL delayt_10ms ; CALL delayt_10ms ; ;CALL delayt_10ms ; ;CALL delayt_10ms ; ;CALL delayt_10ms ; CALL EM78P156RAM ; ENI ;DISI ;close int NOP ; JMP main ;======主调用程序============================================== main: CALL REMOTE_IN ;接收遥控值 CALL PUKEY ;读脉冲开关键是否有输入 DJZ TTC3 ; 主循环时间X200X10=延迟时间 JMP main_JMP ;当TTC1=0时为无键按下转出口 main_DELAY_T1: MOV A,@200 ;160 重设计数值 MOV TTC3,A ; ;DJZ TTC4 ; ;JMP main_JMP ;当TTC1=0时为无键按下转出口 ;MOV A,@10 ;10 重设计数值 ;MOV TTC4,A ; CALL REMKEY_RED ;遥控值处理 ;CALL RKEY ;读键盘,键盘值在DD1中 ;CALL KEYIN ; 根据入口键盘值转相关功能控制和显示 CALL DISTO_VFD ;延时显示复位信息/静音闪烁 CALL SENDLED ;以数码管动态扫描点亮/按键延时起效 main_JMP: JMP main ;============================================================= ; 开机对芯片参数初始化设置? ; 脉冲电位器初化 ; ;============================================================= EM78P156RAM: CLR RR10 ;R10作位处理格式定义 CLR RR11 ;R11位处理格式定义 ;CLR RR12 ;R12作位处理格式定义 ; BS PORT5,COMLED2 ;对数码管扫描1 ; BC PORT5,COMLED1 ;对数码管扫描2 ; MOV A,@0XFE ; ; CALL MPWTC4094LP_1 ; ;MOV LEDDAT1,A ;TC4094数据 ;MOV LEDDAT2,A ;TC4094数据 ; NOP ; NOP ENI MOV A,@11 ;160 重设计数值 MOV TTC3,A ; FSXIAN_LP: JBC RR10,MUTED_F ;静音闪烁判别位 JMP FSXIAN_H ; BS RR10,MUTED_F ;静音闪烁判别位 MOV A,@0XFF ; MOV LEDDAT1,A ;AA2=十位数 MOV LEDDAT2,A ;AA1=个位数 JMP FSXIAN_E ; FSXIAN_H: BC RR10,MUTED_F ;静音判别标志位 MOV A,@0X12 ;0 MOV LEDDAT1,A ;AA2=十位数 MOV A,@0X12 ;0 MOV LEDDAT2,A ;AA1=个位数 FSXIAN_E: CALL delayt_10ms ; 防连按 CALL delayt_10ms ; CALL delayt_10ms ; CALL delayt_10ms ; CALL delayt_10ms ; 防连按 CALL delayt_10ms ; CALL delayt_10ms ; ; CALL delayt_10ms ; DJZ TTC3 ; JMP FSXIAN_LP ; BC RR10,MUTED_F ;静音闪烁判别位 BS PORT6,MUTE ;静音控制 MOV A,@ONMUTE ;静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 MOV A,@20 ; MOV MAIN_VOL,A ;工作主音量(同时调M/c/s vol) MOV A,@8 ; MOV FRL_VOL,A ;前左右音量 MOV SRL_VOL,A ;环绕左右音量 MOV CEN_VOL,A ;中置音量 MOV SW_VOL,A ;重低音量 CLR SET1_V ;0 VOL/1FRL/2SRL/3CNE/4SW BS RR11,MVOL_F ;调主音量时1,其它时0 ;CALL CONFRL_VOL ;前左右音量 ;CALL CONSRL_VOL ;环绕左右音量 ;CALL CONCEN_VOL ;音量控制 ;CALL CONSW_VOL ;SR_VOL音量控制 CALL SDFRL_VOL ;前左右音量 CALL SDSRL_VOL ;环绕左右音量 CALL SDCEN_VOL ;中置选择 CALL SDSW_VOL ;重低音选择 BC RR11,MVOL_F ;调主音量时1,其它时0 MOV A,@200 ; MOV IRTTC1,A ;中断定时计数 MOV A,@3 ; MOV IRTTC2,A ;中断定时计数 MOV IRTTC3,A ;中断定时计数 BS PORT6,TC4053ABC ;音源切换 MOV A,@OFFMUTE ;不静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 BS RR11,MVOL_F ;调主音量时1,其它时0 ;CALL CONFRL_VOL ;前左右音量 ;CALL CONSRL_VOL ;环绕左右音量 ;CALL CONCEN_VOL ;音量控制 ;CALL CONSW_VOL ;SR_VOL音量控制 CALL SDFRL_VOL ;前左右音量 CALL SDSRL_VOL ;环绕左右音量 CALL SDCEN_VOL ;中置选择 CALL SDSW_VOL ;重低音选择 BC RR11,MVOL_F ;调主音量时1,其它时0 CALL delayt_10ms ; BS RR11,MVOL_F ;调主音量时1,其它时0 CALL SDFRL_VOL ;前左右音量 CALL SDSRL_VOL ;环绕左右音量 CALL SDCEN_VOL ;中置选择 CALL SDSW_VOL ;重低音选择 BC RR11,MVOL_F ;调主音量时1,其它时0 CALL delayt_10ms ; ;MOV A,@CHALL_10DB ;通道全部通道 10dB地址 ;MOV DDATA1,A ;通道1 10dB地址 ;MOV A,@CHALL_1DB ;通道全部通道 1dB地址 ;MOV DDATA2,A ;通道1 1dB地址 ;MOV A,@8 ;音量 ;CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 BC PORT6,MUTE ;静音控制 MOV A,@200 ;按减一计数/与屏谱复用 MOV TTC1,A ; MOV A,@3 ;按减一计数 44 MOV TTC2,A ; MOV A,@10 ;200 重设计数值 MOV TTC3,A ; ;MOV A,@2 ;200 重设计数值 ;MOV TTC4,A ; ;MOV A,MAIN_VOL ; 主音量 ;CALL VFDDIS_10 ; A=显示值,送显示值 BS RR11,CHANNEL_F ;CHANNEL_F=0AC3输入 ;BS PORT6,TC4053ABC ;音源切换 PC=1/5.1=0 CALL INPUTDAT ;送数和显示直接入口 CLR PKEYV_V ;清0 ;音量电位当前状态记忆 CLR PKAA1 ;音量电位当前状态记忆 RET ;================================================== ;说明:遥控器键盘处理 ;入口: 使用: ;出口信息: ;================================================== REMKEY_RED: ;遥控值处理 JBS RR11,REMD_F ; 遥控数据处理标志位 JMP REMKEY_EXIT ; BC RR11,REMD_F ; 遥控数据处理标志位 MOV A,RMRAM_R2 ; XOR A,@REKEY_RCORD2 ;引导码1,不是特定遥控器转出口 JBS STAT,Z ; JMP REMKEY_BEX_A ;直出 ;MOV A,@0X99 ;不是特定遥控器退出 ;MOV RMRAM_R2,A ; JBS RR10,MUTE_F ; JMP REMKEY ;判别是静音键按下吗?不是转入键处理 MOV A,@KR_MUTE ;静音控制 9 XOR A,RMRAM_D2 ; JBS STAT,Z ; JMP REMKEY_BEX_B ;无效退出 REMKEY: BS RR10,DISPT1S_F ;清延时按下计数标志位 CLR SET1_V ; 0 VOL/1T/2B/3BLAN BS RR11,REMIN_F ; 出口时对遥控处理 MOV A,@KR_MIANVOLA ;主音量加 1 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_MIANVOLA ;主音量加 1 MOV A,@KR_MIANVOLS ;主音量减 2 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_MIANVOLS ;主音量减 2 MOV A,@KR_SRLA ;环绕+ 3 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_SRLA ;环绕+ 3 MOV A,@KR_SRLS ;环绕- 4 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_SRLS ;环绕- 4 MOV A,@KR_CENA ;中置+ 5 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_CENA ;中置+ 5 MOV A,@KR_CENS ;中置- 6 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_CENS ;中置- 6 MOV A,@KR_SWA ;重低音+ 7 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_SWA ;重低音+ 7 MOV A,@KR_SWS ;重低音- 8 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_SWS ;重低音- 8 MOV A,@0X99 ;不是特定遥控器退出 MOV RMRAM_R2,A ; MOV A,@KR_MUTE ;静音控制 9 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_MUTE ;静音控制 9 MOV A,@KR_INPUT ;输入选择 10 XOR A,RMRAM_D2 ; JBC STAT,Z ; JMP KKR_INPUT ;输入选择 10 NOP JMP REMKEY_BEX_B ;无效退出 ;============================== ;说明: ;============================== KKR_MIANVOLA: ;主音量加 1 BS RR10,UP_F ;音量加或减判别 JMP REM_MIANVOL KKR_MIANVOLS: ;主音量减 2 BC RR10,UP_F ;音量加或减判别 REM_MIANVOL: JMP MAINVOL ;主声道音量控制和显示,主音量渐大 KKR_SRLA: ;环绕+ 3 BS RR10,UP_F ;音量加或减判别 JMP REM_CONSRLVOL KKR_SRLS: ;环绕- 4 BC RR10,UP_F ;音量加或减判别 REM_CONSRLVOL: JMP CONSRL_VOL ;环绕左右音量 KKR_CENA: ;中置+ 5 BS RR10,UP_F ;音量加或减判别 JMP REM_CONCENVOL KKR_CENS: ;中置- 6 BC RR10,UP_F ;音量加或减判别 REM_CONCENVOL: JMP CONCEN_VOL ;中置选择 KKR_SWA: ;重低音+ 7 BS RR10,UP_F ;音量加或减判别 JMP REM_CONSWVOL KKR_SWS: ;重低音- 8 BC RR10,UP_F ;音量加或减判别 REM_CONSWVOL: JMP CONSW_VOL ;重低音选择 KKR_MUTE: ;静音控制 9 JMP PKMUTE ;静音显示和控制 KKR_INPUT: ;输入选择 10 JMP PTKINPUT ;输入音源显示和控制 ;JMP REMKEY_BEX ;遥控器出口 REMKEY_BEX_A: ;遥控器出口 ;MOV A,@0X99 ; ;MOV RMRAM_D1,A ;记忆遥控输入键值 ;CALL delayt_10ms ; REMKEY_BEX_B: ;按音量时加快 ; CALL delayt_10ms ; ;BS RR10,DISPT1S_F ;清延时按下计数标志位 ; BC RR11,REMIN_F ; 出口时对遥控处理 ;MOV A,@0x05 ;0000,0101 ;IOW 0x0F ;允许 外部下降中断/计时溢出中断 REMKEY_EXIT: RET ;============================================ ; ;============================================ PTK_VOLA: ;主音量加 1 BS RR10,UP_F ;音量加或减判别 JMP BK_MUNEVOL PTK_VOLS: ;主音量减 2 BC RR10,UP_F ;音量加或减判别 BK_MUNEVOL: JMP MUNE ; ;=========================================================================== ;功能说明:输入音源显示和控制 ;使用: ;入口: ;出口: ; ;=========================================================================== PTKINPUT: ;输入音源显示和控制 JBS RR11,CHANNEL_F ;CHANNEL_F=0AC3输入 JMP CPLBIT ; BC RR11,CHANNEL_F ;CHANNEL_F=0AC3输入 JMP INPUTDAT ; CPLBIT: BS RR11,CHANNEL_F ;CHANNEL_F=0AC3输入 INPUTDAT: ;送数和显示直接入口 ;CALL REST ;默认调主音量,清字符装入主音量显示值 ;BC PORT8,VLED3 ; VCD LED ;BC PORT8,VLED4 ;AC3 LED ;BS PORT6,MUTE ;静音控制 MOV A,@ONMUTE ;静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 CALL delayt_5ms ; JBS RR11,CHANNEL_F ;CHANNEL_F=0AC3输入 JMP INPUT_AC3 ;============================== ;VCD显示和控制 ;============================== INPUT_PCINDAT: ;VCD显示和控制 BS PORT6,TC4053ABC ;音源切换 PC=1/5.1=0 MOV A,@VP ;14 P MOV LEDDAT1,A ;AA2=十位数 MOV A,@VC ;12 C MOV LEDDAT2,A ;AA2=个位数 JMP INPUTCH ; ;============================== ;AC3显示和控制 ;============================== INPUT_AC3: ;AC3显示和控制 BC PORT6,TC4053ABC ;音源切换 MOV A,@V51 ;13 5. MOV LEDDAT1,A ;AA2=十位数 MOV A,@0X77 ;1 MOV LEDDAT2,A ;AA2=个位数 INPUTCH: CALL delayt_10ms ; ;BC PORT6,MUTE ;静音控制 MOV A,@OFFMUTE ;不静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 JMP PTKVOL_EXITB ; ;=========================================================== ;功能说明:静音控制 ;使用: ;入口: ;出口: ; ;=========================================================== ;============================== ;MUTE静音显示和控制 ;============================== PKMUTE: ;静音显示和控制 JBC RR10,MUTE_F ;静音判别标志位 JMP AAMUTE_L ; BS RR10,MUTE_F ;静音判别标志位 MOV A,@0X12 ;0 MOV LEDDAT1,A ;AA2=十位数 MOV A,@0X12 ;0 MOV LEDDAT2,A ;AA1=个位数 MOV A,@ONMUTE ;静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 BS PORT6,MUTE ;静音控制 MOV A,@4 ;10 重设计数值 MOV TTC1,A ; MOV TTC2,A ; JMP AAMUTE_E ; AAMUTE_L: BC RR10,MUTE_F ;静音判别标志位 MOV A,@OFFMUTE ;不静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 BC PORT6,MUTE ;静音控制 MOV A,MAIN_VOL ; 主音量 MOV DD1,A ; ;BC STAT,C ;先对C清0 ;RLC DD1 ; 0--20 x 2 = 0--40 ;MOV A,DD1 ; CALL VFDDIS_10 ; A=显示值,送显示值 AAMUTE_E: ;CALL delayt_10ms ; 防连按 ;CALL delayt_10ms ; ;CALL delayt_10ms ; ;CALL delayt_10ms ; JMP PTKVOL_EXITB ; ;=========================================================================== ;功能说明:选择调某一声道音量值 ;使用: ;入口: ;出口: ; ;=========================================================================== BKCOMVOL: ;选择调某一声道音量值 INC SET1_V ; 0 VOL/1 SR/2 CEN/3 SW MOV A,SET1_V ; XOR A,@4 ; JBS STAT,Z ; JMP COMVOLCONIN ; MOV A,@1 ; O MOV SET1_V,A ; COMVOLCONIN: ; ;================================== COMVOL0: ; ;MOV SET1_V,SET1_V ;; 0 VOL/1 SR/2 CEN/3 SW ;JBS STAT,Z ; ;JMP COMVOL1 ; ;MOV A,@0X4D ; F ;MOV LEDDAT1,A ;AA2=十位数 ;MOV A,@0 ;10不显示任何字样 ;MOV LEDDAT2,A ;AA1=个位数 ;JMP COMVOL_EXIT ; COMVOL1: ; MOV A,SET1_V ; 0 VOL/1 SR/2 CEN/3 SW XOR A,@1 ; JBS STAT,Z ; JMP COMVOL2 ; MOV A,@VS ;5 /S MOV LEDDAT1,A ;AA2=十位数 MOV A,@0XFF ;10不显示任何字样 MOV LEDDAT2,A ;AA1=个位数 JMP COMVOL_EXIT ; COMVOL2: ; MOV A,SET1_V ; 0 VOL/1 SR/2 CEN/3 SW XOR A,@2 ; JBS STAT,Z ; JMP COMVOL3 ; MOV A,@VC ;12 C MOV LEDDAT1,A ;AA2=十位数 MOV A,@0XFF ;10不显示任何字样 MOV LEDDAT2,A ;AA1=个位数 JMP COMVOL_EXIT ; COMVOL3: ; ;MOV A,SET1_V ; 0 VOL/1 SR/2 CEN/3 SW ;XOR A,@3 ; ;JBS STAT,Z ; ;JMP COMVOL5 ; MOV A,@VS ;5 /S MOV LEDDAT1,A ;AA2=十位数 MOV A,@VU ;12 U MOV LEDDAT2,A ;AA2=个位数 COMVOL_EXIT: ;CALL DIS_INDIS ; AA2=十位数;AA1=个位数 JMP PTKVOL_EXITB_SE ; ;============================== ; 按键出口 ;============================== PTKVOL_EXITB: CLR SET1_V ; 0 VOL/1 SR/2 CEN/3 SW PTKVOL_EXITB_SE: BS RR10,DISPT1S_F ;设延时按下显示改写前显示状态 MOV A,@20 ;30 重设计数值 MOV IRTTC2,A ; BS RR11,DELKEY_F ;延时按键有效 JMP PTK_EXITIR ; PTKVOL_EXITA: BS RR10,DISPT1S_F ;设延时按下显示改写前显示状态 MOV A,@10 ;8 重设计数值 6/4/3/2 MOV IRTTC2,A ; BS RR11,DELKEY_F ;延时按键有效 PTK_EXITIR: JBS RR11,REMIN_F ; 出口时对遥控处理 JMP KEY_EXIT ; BC RR11,REMIN_F ; 出口时对遥控处理 MOV A,@3 ; 重设计数值 /5 MOV IRTTC2,A ; ;MOV A,@0x05 ;0000,0101 ;IOW 0x0F ;允许 外部下降中断/计时溢出中断 KEY_EXIT: RET ;================================================== ;说明: 音量脉冲电位器操作判别 ;入口: 使用: ;出口信息: ;================================================== PUKEY: CLR PKAA1 ;清0 JBS DATA6,VOLUP ;判别H或L电位 JMP R6VOLUP_L1 ; ;JMP R6VOLUP_H1 ; BS PKAA1,1 ;H时相应置1 JMP R6_A ; R6VOLUP_L1: BC PKAA1,1 ;L时相应置0 ;JMP R6_A ; R6_A: JBS DATA6,VOLDW ;判别H或L电位 JMP R6VOLDW_L1 ; ;JMP R6VOLDW_H1 ; BS PKAA1,0 ; JMP R6_B ; R6VOLDW_L1: BC PKAA1,0 ; JMP R6_B ; R6_B: MOV A,PKAA1 ; MOV A,PKEYV_V ;上次脚位状态 AND A,@0X03 ;屏蔽无关脚 XOR A,PKAA1 ; JBC STAT,Z ; JMP PUKEY_EXIT ;当=0时为无键按下转出口 BC STAT,C ; RLC PKEYV_V ;错移两位 BC STAT,C ; RLC PKEYV_V ; MOV A,PKEYV_V ;把历次两脚状态读入 OR A,PKAA1 ; AND A,@0X3F ; MOV PKEYV_V,A ;保留最近三次读入脚状态 JBC RR10,MUTE_F ; JMP PUKEY_EXIT ;判别是静音键按下吗?不是转入键处理 MOV A,PKEYV_V ;保留最近三次读入脚状态 XOR A,@0X07 ;07 JBS STAT,Z ; JMP PUKEY_DW ; 转判减 BS RR10,UP_F ;音量加或减判别 CLR SET1_V ; 0 VOL/1 SR/2 CEN/3 SW JMP MAINVOL ;主声道音量控制和显示,主音量渐大 PUKEY_DW: MOV A,PKEYV_V ;保留最近三次读入脚状态 XOR A,@0X0B ;0B/0C JBS STAT,Z ; JMP PUKEY_EXIT ; BC RR10,UP_F ;音量加或减判别 CLR SET1_V ; 0 VOL/1 SR/2 CEN/3 SW JMP MAINVOL ;主声道音量控制和显示,主音量渐大 PUKEY_EXIT: ;当=0时为无键按下转出口 RET ;无变化结束返回 ;=========================================================================== ;功能说明: 总音量控制 ;使用: ;入口: ;出口: ; ;=========================================================================== MUNE: ; BS RR10,DISPT1S_F ;设延时按下显示改写前显示状态 MOV SET1_V,SET1_V ;0 VOL/1FRL/2SRL/3CNE/4SW/5OKV/6ECHO JBS STAT,Z ; JMP INCONSRL_VOL ;环绕左右音量 MAINVOL: ;主声道音量控制和显示,主音量渐大 MOV A,MAIN_VOL ; 主音量 MOV AA2,A ;运算值 MOV A,@40 ;40 0--40 X2 = 0--80 MOV AA1,A ;比较最高值 CALL ADDSUM_DAT ;入比较AA1,运算和出AA2=运算值, MOV A,AA2 ; MOV MAIN_VOL,A ; 主音量 MOV MAIN_VOL,MAIN_VOL ; JBS STAT,Z ; JMP MAINVOLN1 ; MOV A,@ONMUTE ;静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 JMP MAINVOLNOUT ; MAINVOLN1: MOV A,MAIN_VOL ; XOR A,@1 ; JBS STAT,Z ; JMP MAINVOLNOUT ; MOV A,@OFFMUTE ;不静音 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 MAINVOLNOUT: BS RR11,MVOL_F ;调主音量时1,其它时0 ;CALL CONFRL_VOL ;前左右音量 ;CALL CONSRL_VOL ;环绕左右音量 ;CALL CONCEN_VOL ;音量控制 ;CALL CONSW_VOL ;SR_VOL音量控制 CALL SDFRL_VOL ;前左右音量 CALL SDSRL_VOL ;环绕左右音量 CALL SDCEN_VOL ;中置选择 CALL SDSW_VOL ;重低音选择 BC RR11,MVOL_F ;调主音量时1,其它时0 MOV A,MAIN_VOL ; 主音量 MOV DD1,A ; ;BC STAT,C ;先对C清0 ;RLC DD1 ; 0--20 x 2 = 0--40 ;MOV A,DD1 ; CALL VFDDIS_10 ; A=显示值,送显示值 JMP PTKVOL_EXITA ; ;MAIN_SELE_EXIT: ; RET ;=========================================================================== ;功能说明:前左右音量选择 ;使用: ;入口: ;出口: ; ;=========================================================================== INCONFRL_VOL: ; ;MOV A,SET1_V ;0 VOL/1FRL/2SRL/3CNE/4SW/5OKV/6ECHO ;XOR A,@1 ; ;JBS STAT,Z ; ;JMP INCONSRL_VOL ;环绕左右音量 CONFRL_VOL: ;前左右音量 MOV A,FRL_VOL ;前左右音量 MOV AA2,A ;运算值 MOV A,@16 ;40 0--40 X2 = 0--80 MOV AA1,A ;比较最高值 CALL ADDSUM_DAT ;入比较AA1,运算和出AA2=运算值, MOV A,AA2 ; MOV FRL_VOL,A ;调整后回存 SDFRL_VOL: ;前左右音量 ;MOV A,FRL_VOL ;前左右音量 ;MOV DD1,A ; MOV A,@CH1_10DB ;通道1 10dB地址 MOV DDATA1,A ;通道1 10dB地址 MOV A,@CH1_1DB ;通道1 1dB地址 MOV DDATA2,A ;通道1 1dB地址 MOV A,FRL_VOL ;前左右音量 CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 ;MOV A,FRL_VOL ;前左右音量 ;MOV DD1,A ; MOV A,@CH2_10DB ;通道2 10dB地址 MOV DDATA1,A ;通道1 10dB地址 MOV A,@CH2_1DB ;通道2 1dB地址 MOV DDATA2,A ;通道1 1dB地址 MOV A,FRL_VOL ;前左右音量 CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 JBC RR11,MVOL_F ;调主音量时1,其它时0 RET DISCONFRL_VOL: ;前左右显示 MOV A,FRL_VOL ;前左右音量 CALL REARVOLDIS ; A=显示值,送显示值 JMP PTKVOL_EXITA ; ;=========================================================================== ;功能说明:环绕左右音量 ;使用: ;入口: ;出口: ; ;=========================================================================== INCONSRL_VOL: ;环绕左右音量 MOV A,SET1_V ;0 VOL/1FRL/2SRL/3CNE/4SW/5OKV/6ECHO XOR A,@1 ; JBS STAT,Z ; JMP INCONCEN_VOL ;中置选择 CONSRL_VOL: ;环绕左右音量 MOV A,SRL_VOL ;环绕左右音量 MOV AA2,A ;运算值 MOV A,@16 ;40 0--40 X2 = 0--80 MOV AA1,A ;比较最高值 CALL ADDSUM_DAT ;入比较AA1,运算和出AA2=运算值, MOV A,AA2 ; MOV SRL_VOL,A ;调整后回存 SDSRL_VOL: ;环绕左右音量 ;MOV A,SRL_VOL ; ;MOV DD1,A ; 环绕左右音量 MOV A,@CH5_10DB ;通道3 10dB地址 MOV DDATA1,A ;通道1 10dB地址 MOV A,@CH5_1DB ;通道3 1dB地址 MOV DDATA2,A ;通道1 1dB地址 MOV A,SRL_VOL ; CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 ;MOV A,SRL_VOL ; ;MOV DD1,A ; MOV A,@CH6_10DB ;通道3 10dB地址 MOV DDATA1,A ;通道1 10dB地址 MOV A,@CH6_1DB ;通道3 1dB地址 MOV DDATA2,A ;通道1 1dB地址 MOV A,SRL_VOL ; CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 JBC RR11,MVOL_F ;调主音量时1,其它时0 RET DISCONSRL_VOL: ;;环绕左右音量显示 MOV A,SRL_VOL ; CALL REARVOLDIS ; A=显示值,送显示值 JMP PTKVOL_EXITA ; ;=========================================================================== ;功能说明:中置选择 ;使用: ;入口: ;出口: ; ;=========================================================================== INCONCEN_VOL: ;中置选择 MOV A,SET1_V ;0 VOL/1FRL/2SRL/3CNE/4SW/5OKV/6ECHO XOR A,@2 ; JBS STAT,Z ; JMP INCONSW_VOL ;重低音选择 CONCEN_VOL: ;中置选择 MOV A,CEN_VOL ;中置音量 MOV AA2,A ;运算值 MOV A,@16 ;40 0--40 X2 = 0--80 MOV AA1,A ;比较最高值 CALL ADDSUM_DAT ;入比较AA1,运算和出AA2=运算值, MOV A,AA2 ; MOV CEN_VOL,A ;调整后回存 SDCEN_VOL: ;中置选择 ;MOV A,CEN_VOL ;调整后回存 ;MOV DD1,A ; MOV A,@CH3_10DB ;通道4 10dB地址 MOV DDATA1,A ;通道1 10dB地址 MOV A,@CH3_1DB ;通道4 1dB地址 MOV DDATA2,A ;通道1 1dB地址 MOV A,CEN_VOL ; CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 JBC RR11,MVOL_F ;调主音量时1,其它时0 RET DISCONCEN_VOL: ;中置显示 MOV A,CEN_VOL ;中置音量 CALL REARVOLDIS ; A=显示值,送显示值 JMP PTKVOL_EXITA ; ;=========================================================================== ;功能说明:重低音选择 ;使用: ;入口: ;出口: ; ;=========================================================================== INCONSW_VOL: ;重低音选择 ;MOV A,SET1_V ;0 VOL/1FRL/2SRL/3CNE/4SW/5OKV/6ECHO ;XOR A,@3 ; ;JBS STAT,Z ; ;JMP MICVOL ;OK音量控制和显示 CONSW_VOL: ;重低音选择 MOV A,SW_VOL ;重低音音量 MOV AA2,A ;运算值 MOV A,@16 ;40 0--40 X2 = 0--80 MOV AA1,A ;比较最高值 CALL ADDSUM_DAT ;入比较AA1,运算和出AA2=运算值, MOV A,AA2 ; MOV SW_VOL,A ;调整后回存 SDSW_VOL: ;重低音选择 ;MOV A,SW_VOL ;调整后回存 ;MOV DD1,A ; MOV A,@CH4_10DB ;通道4 10dB地址 MOV DDATA1,A ;通道1 10dB地址 MOV A,@CH4_1DB ;通道4 1dB地址 MOV DDATA2,A ;通道1 1dB地址 MOV A,SW_VOL ; CALL YSD0 ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 JBC RR11,MVOL_F ;调主音量时1,其它时0 RET DISCONSW_VOL: ;重低音显示 MOV A,SW_VOL ;重低音音量 CALL REARVOLDIS ; A=显示值,送显示值 JMP PTKVOL_EXITA ; ;=========================================================================== ;功能说明: 音量值送入PT2258 ;使用:A/DDATA1 ;入口:A=音量值 DDATA1=十位数地址 DDATA2=个位数地址 ;出口: ; ;=========================================================================== YSD0: ;A=音量值,DDATA1=十位数地址,DDATA2=个位数地址,音量值送入PT2258 ;MOV A,DD1 ; ;CALL VOL_TAB ;音量曲线调整 ;MOV DD1,A ; CALL REARVOL ;音量值运算 JBC RR10,HTB_F ;HTB_F=1 "-" JMP HTBFU ; MOV A,MAIN_VOL; 主音量 ADD A,@31 ; ADD A,AA1 ; 40+31+ 0--8 =79 (71+8=79) JMP HTBFU_EX ; HTBFU: MOV A,MAIN_VOL; 主音量 ADD A,@31 ; MOV AA2,A MOV A,AA1 SUB AA2,A ; 40- 0--8 =32+31=63 (71-8=63) MOV A,AA2; 主音量 HTBFU_EX: MOV DD1,A ; MOV A,DD1 ; SUB A,@79 ; MOV DD1,A ; CALL NUMBER_10 ;16转10进制入DD1=16进制数;出AA2=十位数;AA1=个位数 GNVOL: MOV A,AA1 ; ;CALL UUSS ;音量表 ADD DDATA2,A ;个位音量值放入 MOV A,AA2 ; ;CALL UUSS ;音量表 ADD DDATA1,A ;十位音量值放入 MOV A,DDATA2 ;个位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 MOV A,DDATA1 ;十位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 ;=============================== MOV A,DDATA2 ;个位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 MOV A,DDATA1 ;十位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 ;---------------------------- MOV A,DDATA2 ;个位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 MOV A,DDATA1 ;十位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 ;---------------------------- MOV A,DDATA2 ;个位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 MOV A,DDATA1 ;十位音量值放入 MOV DD1,A ; CALL PT2258_ADDCOMM ;DD1=要送出的数据;向PT2314送数程序 YSD0_RET: RET ;================================================== ;功能说明:对88送十进制显示值,注意未调显示 ;使用:DD1/ AA1,AA2 ;入口:AA2=十位数;AA1=个位数 ;出口: ; ;================================================== VFDDIS_10: ; A=显示值,送显示值 DIS_10: MOV DD1,A ; CALL NUMBER_10 ;入DD1=16进制数;出AA2=十位数;AA1=个位数;16转10进制 DIS_INDIS: ; AA2=十位数;AA1=个位数 ;CALL CLR_LED88 ; 清LED两位显示数 MOV A,AA1 ;个位数 CALL TRANS_10 ; MOV LEDDAT2,A ;AA1=个位数 MOV A,AA2 ;十位数 CALL TRANS_10 ; MOV LEDDAT1,A ;AA2=十位数 RET ;RETL @0XFC ;0 ;RETL @0X01 ;15 - ;================================================== REARVOLDIS: ; A=显示值,送显示值 CALL REARVOL ;音量值运算 MOV A,AA1 ;个位数 CALL TRANS_10 ; MOV LEDDAT2,A ;AA1=个位数 JBC RR10,HTB_F ;HTB_F=1 "-" JMP REARVOLDIS_FU MOV A,@0X12 ;0 JMP REARVOLDIS_EXIT ; REARVOLDIS_FU: MOV A,@0XEF ;15 - REARVOLDIS_EXIT: MOV LEDDAT1,A ;AA2=十位数 RET ;####################################################### ;================================================== ;功能说明:16转10进制 ;使用:DD1/ AA1,AA2 ;入口:DD1=16进制数 ;出口:AA2=十位数;AA1=个位数 ; ;================================================== NUMBER_10: ;16转10进制入DD1=16进制数;出AA2=十位数;AA1=个位数 CLR AA2 CLR AA1 ; JINC: MOV A,AA1 ADD A,@10 ; MOV AA1,A ; SUB A,DD1 ; JBC STAT,Z ; JMP KA2 ; JBS STAT,C ; JMP KA1 ; KA0: ; INC AA2 ; JMP JINC ; KA1: ; MOV A,@10 ; SUB A,AA1 ; SUB A,DD1 ; MOV AA1,A ; JMP NUM10_TAN_EA ; KA2: ; INC AA2 ; CLR AA1 ; NUM10_TAN_EA: RET ;================================================== ;功能说明:10进制转16进制 ;使用:DD1/A ;入口:DD1= 10进制 0--99 ;出口:DD1= 16进制 ; ;================================================== ;BIN_BCD: ;10进制转16进制 ; MOV A,DD1 ; ; NOP ; MOV A,@20 ; MOV DD1,A ; ; MOV A,@0X0F ; ; AND A,DD1 ; ; JBC DD1,4 ; ; ADD A,@10 ; ; JBC DD1,5 ; ; ADD A,@20 ; ; JBC DD1,6 ; ; ADD A,@40 ; ; JBC DD1,7 ; ; ADD A,@80 ; ; NUMBER_IN: ; MOV AA2,A ; ; AND A,@0X0F ; ; MOV AA1,A ;个位数 ; SWAPA AA2 ;移到低字节查表 ; AND A,@0X0F ; ; MOV AA2,A ;十位数 ; RET ;########################################################### ;=========================================================== ;功能说明: 主音量/中置/环绕/高音/低音加一或减一调整 ;使用: A/C/R6/R7 ;入口:AA1 R6=比较最高值;AA2 R7=运算值 ;出口:AA2 R7=运算值,加一或减一后输出值 ; ;=========================================================== ADDSUM_DAT: JBS RR10,UP_F ; 加一判别 JMP SUMDEC_1 ;转减一 MOV A,AA2 ; XOR A,AA1 ;比较是否已到最高限值 JBC STAT,Z ; JMP ADDSUM_DAT_EXIT ;已到最高限值转出口 INC AA2 ; 未到加一 JMP ADDSUM_DAT_EXIT ; SUMDEC_1: MOV AA2,AA2 ; JBC STAT,Z ; JMP ADDSUM_DAT_EXIT ;到0转出口 DEC AA2 ;未到0底减一 ADDSUM_DAT_EXIT: RET ;=========================================================================== ;功能说明: ;使用: ;入口: A=音量值 ;出口:AA1=比较后值,平衡0---15;高低音:0----7 ;当等于15或7时为在中点 ; ;=========================================================================== REARVOL: ;音量值运算 ; MOV A,BLAN_V ;平衡值 MOV AA1,A ; MOV A,@8 ; MOV AA2,A ; BC RR10,HTB_F ;HTB_F=1 "-" MOV A,AA2 ; SUB A,AA1 ;等于7则往下执行 JBS STAT,Z ; JMP COMPDAT1_15A ; ;MOV A,0 ; JMP COMPDAT1_15_EXIT ; COMPDAT1_15A: ; JBC STAT,C ; JMP DAT1_7 ;?<7时转为正 MOV A,AA1 ; SUB A,AA2 ;7减去某数后存入A 1-7 显示 + BS RR10,HTB_F ;HTB_F=1 "-" JMP COMPDAT1_15_EXITA ; DAT1_7: ;MOV A,AA1 ; ;SUB A,AA2 ;7减去某数后存入A 1-7 显示 + COMPDAT1_15_EXITA: ;MOV A,AA2 ; COMPDAT1_15_EXIT: MOV AA1,A ;;相等置0/不等时读 D_BUF9/10判别正或负 RET ;=========================================================================== ;功能说明: ;使用: ;入口: ;出口: ; ;=========================================================================== ;================================================== ;说明:延时显示复位信息/静音闪烁 ;入口: 使用: ;出口信息: ;================================================== DISTO_VFD: ;判别是否需装延时程序 ;================================== ;优先静音闪烁 ;================================== JBS RR10,MUTE_F ;静音判别标志位 JMP DVFD_T1 ;无延按下标志位 DJZ TTC1 ; 主循环时间X200X10=延迟时间 JMP DVFD_T2 ;无延按下标志位 MOV A,@100 ;80/ 200 重设计数值 MOV TTC1,A ; DJZ TTC2 ; JMP DVFD_T2 ;当TTC1=0时为无键按下转出口 MOV A,@3 ;10 重设计数值 MOV TTC2,A ; JBC RR10,MUTED_F ;静音闪烁判别位 JMP MUTED_H ; BS RR10,MUTED_F ;静音闪烁判别位 MOV A,@0XFF ; MOV LEDDAT1,A ;AA2=十位数 MOV LEDDAT2,A ;AA1=个位数 JMP MUTED_E ; MUTED_H: BC RR10,MUTED_F ;静音判别标志位 MOV A,@0X12 ;0 MOV LEDDAT1,A ;AA2=十位数 MOV A,@0X12 ;0 MOV LEDDAT2,A ;AA1=个位数 MUTED_E: JMP MAINVOL_TTLED ;================================== ;延时显示,装入复位参数 ;================================== DVFD_T1: JBS RR10,DISPT1S_F ;判别是否执行延时显示程序 JMP DVFD_TINTO ;无延按下标志位 BC RR10,DISPT1S_F ;清延时按下计数标志位 BS RR10,DISPT1SA_F ;设要延时 MOV A,@200 ;200 重设计数值 MOV TTC1,A ; MOV A,@13 ;17 重设计数值 MOV TTC2,A ; DVFD_TINTO: JBS RR10,DISPT1SA_F ;判别是否执行延时显示程序 JMP DVFD_T2 ; DJZ TTC1 ; 主循环时间X200X10=延迟时间 JMP DVFD_T2 ;当TTC1=0时为无键按下转出口 DVFD_T1_A: MOV A,@200 ;200 重设计数值 MOV TTC1,A ; DJZ TTC2 ; JMP DVFD_T2 ;当TTC1=0时为无键按下转出口 MOV A,@15 ;10/3 重设计数值 MOV TTC2,A ; BC RR10,DISPT1SA_F ;清延时按下计数标志位 RES_PRA: ;初始设置 MOV A,@0X99 ;改写防止误触发 MOV RMRAM_R2,A ;特定遥控器判别 CLR SET1_V ; 0 VOL/1 SR/2 CEN/3 SW ;BC RR11,REMLP_F ;REMLP_F=1遥控松键判别 BC RR11,REMPP_F ;等待松手 BC RR11,REMIN_F ; 出口时对遥控处理 BC RR10,HTB_F ;HTB_F=1 "-" MOV A,MAIN_VOL ; 主音量 MOV DD1,A ; ;BC STAT,C ;先对C清0 ;RLC DD1 ; 0--20 x 2 = 0--40 ;MOV A,DD1 ; CALL VFDDIS_10 ; A=显示值,送显示值 MAINVOL_TTLED: ;CALL CS16210_COMM ;;显示重新刷新 DVFD_T2: RET ;########################################################## ;================================================== ;说明:定时器中断处理 ;入口: 使用: ;出口信息: ;================================================== ; TTCC_DEN: ; INC AA1 ; ;TTCCDE_ET: ; RET ;================================================== ;说明:所有中断源入口,判别并设相应的标志位 ;入口: 使用: ;出口信息: ;================================================== TTCI: EXT0_INT: ;遥控器中断 MOV INADD0,A ;中断时把当前值压入堆栈 MOV A,STAT ;状态寄存器设置 MOV INADD1,A ;状态寄存器设置 JBC 0X0F,0 ; JMP TTCCIN ;是定时中断入转 JBC 0X0F,2 ; JMP P60INT ;是遥控下降中断转 JMP INT_ET ;两者都不是转 TTCCIN: DJZ IRTTC1 ;中断定时计数 JMP TTCCIN_EXA ;当TTC1=0时为无键按下转出口 MOV A,@3 ; 重设计数值 5/2 MOV IRTTC1,A ; JBC RR11,TC4094_F ;TC4094_F=1第一位LED JMP TC4094LED_HH ; BS RR11,TC4094_F ;TC4094_F=1第一位LED ;CALL TC4094_COMMLED1 ;对第1位LED扫描,往TC4094送数子程序 TC4094_COMMLED1: ;对第1位LED扫描,往TC4094送数子程序 BC PORT5,COMLED2 ;对数码管扫描1 BS PORT5,COMLED1 ;对数码管扫描2 MOV A,LEDDAT1 ;TC4094数据 JMP WTC4094LP_1 ; TC4094LED_HH: BC RR11,TC4094_F ;TC4094_F=1第一位LED ;CALL TC4094_COMMLED2 ;对第2位LED扫描,往TC4094送数子程序 TC4094_COMMLED2: ;对第2位LED扫描,往TC4094送数子程序 BS PORT5,COMLED2 ;对数码管扫描1 BC PORT5,COMLED1 ;对数码管扫描2 MOV A,LEDDAT2 ;TC4094数据 WTC4094LP_1: MOV IRDD1,A ; MOV A,@0X08 ;每字节共需循环8次 MOV IRAA1,A ; WTC4094LP_2: BC PORT6,P4094CLK ;TC4094时钟 ;JBC TC4094DAT,7 ;判别0位是0跳过下一行 JBC IRDD1,7 ;判别0位是0跳过下一行 JMP TC4094DH ;是1转 BC PORT6,P4094DAT ;TC4094数据 JMP OUTTC4094DAT ;转发数据 TC4094DH: BS PORT6,P4094DAT ;TC4094数据 OUTTC4094DAT: NOP ; NOP ; BS PORT6,P4094CLK ;TC4094时钟 RLC IRDD1 ;数据寄存器右移一位 DJZ IRAA1 ;共8位,每一次减1,是到0则跳过下一步转出口 JMP WTC4094LP_2 ;8位发完? BS PORT6,P4094STR ;TC4094闸门 NOP NOP NOP ;NOP ;NOP BC PORT6,P4094STR ;TC4094闸门,关闸 NOP TTCCIN_EXA: JMP INT_ET P60INT: ;JBC RR11,REMD_F ; 遥控数据处理标志位 ;JMP INT_ET ; ;JBC RR11,DELKEY_F ;延时按键有效 ;JMP INT_ET ; 有键按下要延时处理 ;########################################## ;JMP REMOTE_IN ; INT_ET: ;BC 0X0F,2 ;清P60输入中断 ; BC 0X0F,0 ;清TCC中数 ; BC 0X0F,1 ;清P6口输入断 ; BC 0X0F,2 ;清P60输入中断 CLR 0X0F ; MOV A,INADD1 ;状态寄存器设置 MOV STAT,A ;状态寄存器设置 MOV A,INADD0 ;数据从堆栈取出 RETI ;中断返并再开中断 ;================================================== ;说明:遥控码检测(解码) ;入口: 使用: ;出口信息: ;================================================== ;---------遥控检码程序 REMOTE_IN: JBC RR11,DELKEY_F ;延时按键有效 JMP REMOTE_EX ;按键处理后延时 JBC PORT6,PREM ; JMP REMOTE_EX ;接收位是高电平时离开 CLR REMINDATA ;计数器要先清0 READHEAD: INC REMINDATA ;加一计数 CALL REMCOM ;遥控接收延时计数 MOV A,REMINDATA ;加一计数 SUB A,@0XD0 ;D0/ 判别 《= 5为无效 66 ;JBC STAT,Z ;Z=1 =5 为无效往下 ;JMP REMOTE_EX ;=18 无效转出口 JBS STAT,C ;C=1有效跳过下一条,结果为负数 JMP REMOTE_EX ;X> 18 无效转出口 JBS PORT6,PREM ; JMP READHEAD ;为低电平继续读转 MOV A,REMINDATA ;加一计数 SUB A,@0X78 ;78/ 判别 《= 5为无效 ; JBC STAT,Z ;Z=1 =5 为无效往下 ; JMP REMOTE_EX ;=15 无效转出口 JBC STAT,C ;C=0有效跳过下一条,结果为负数 JMP REMOTE_EX ; X < 15 无效转出口 ;MOV A,TCC ;为高电平入口 MOV A,REMINDATA ;加一计数 SUB A,@0X90 ;90/ 判别 《= 5为无效 66 ; JBC STAT,Z ;Z=1 =5 为无效往下 ; JMP REMOTE_EX ;=18 无效转出口 JBS STAT,C ;C=1有效跳过下一条,结果为负数 JMP REMOTE_EX ;X> 18 无效转出口 CLR REMINDATA ;计数器要先清0 HEADHIGH: INC REMINDATA ;加一计数 CALL REMCOM ;遥控接收延时计数 MOV A,REMINDATA ;加一计数 SUB A,@0XD0 ;90/ 判别 《= 5为无效 66 ;JBC STAT,Z ;Z=1 =5 为无效往下 ;JMP REMOTE_EX ;=18 无效转出口 JBS STAT,C ;C=1有效跳过下一条,结果为负数 JMP REMOTE_EX ;X> 18 无效转出口 JBC PORT6,PREM ; JMP HEADHIGH ; MOV A,REMINDATA ;加一计数 SUB A,@0X58 ;50--58/ 判别 《= 5为无效 ;JBC STAT,Z ;Z=1 =5 为无效往下 ;JMP REMOTE_EX ;无效转出口 JBS STAT,C ;C=0有效跳过下一条,结果为负数 JMP DATARECE ; ;JBC STAT,C ;C=0有效跳过下一条,结果为负数 JMP REM_AAA ;小于转判为连续按下 ;JMP REMOTE_EX ; ;=====解码检测===================================== DATARECE: MOV A,@32 ;共需接收4字节 MOV RMRAM_AA1,A ;计数32位 CLR REMINDATA ;计数器要先清0 DATALOW: ;去掉位接收到引导码 INC REMINDATA ;加一计数 CALL REMCOM ;遥控接收延时计数 MOV A,REMINDATA ;加一计数 SUB A,@0X90 ;90/ 判别 《= 5为无效 66 ;JBC STAT,Z ;Z=1 =5 为无效往下 ;JMP REMOTE_EX ;=18 无效转出口 JBS STAT,C ;C=1有效跳过下一条,结果为负数 JMP REMOTE_EX ;X> 18 无效转出口 JBS PORT6,PREM ; JMP DATALOW ;为低电平继续读转 CLR REMINDATA ;计数器要先清0 DATAHIGH: ;值判别 INC REMINDATA ;加一计数 CALL REMCOM ;遥控接收延时计数 MOV A,REMINDATA ;加一计数 SUB A,@0X90 ;90/ 判别 《= 5为无效 66 ;JBC STAT,Z ;Z=1 =5 为无效往下 ;JMP REMOTE_EX ;=18 无效转出口 JBS STAT,C ;C=1有效跳过下一条,结果为负数 JMP REMOTE_EX ;X> 18 无效转出口 JBC PORT6,PREM ; JMP DATAHIGH ; MOV A,REMINDATA ;加一计数 SUB A,@0X32 ;25/ 判别 3《= 5为无效 14--38 JBC STAT,Z ;Z=1 =5 为无效往下 JMP BITL0 ;等于转 JBC STAT,C ;C=0有效跳过下一条,结果为负数 JMP BITL0 ;小于转 BIT01PD: ; 接收数等于或小于04H 为1(反相) BS STAT,C ;置数据1 JMP DATAREMI ; BITL0: ;置数据0 BC STAT,C ; DATAREMI: RRC RMRAM_D2 ;反数据码 2 RRC RMRAM_D1 ;正数据码 1 RRC RMRAM_R2 ;系统码2 DJZ RMRAM_AA1 ;计数32位,减1为0转出口 JMP DATALOW ;是否接收了4个字节(32位) ;NOP COM RMRAM_D2 ; MOV A,RMRAM_D1 ; XOR A,RMRAM_D2 ; JBS STAT,Z ;Z=1 JMP REMOTE_EX ; MOV A,RMRAM_R2 ; XOR A,@REKEY_RCORD2 ;引导码1,不是特定遥控器转出口 JBS STAT,Z ; JMP REMOTE_EX ; ;MOV A,RMRAM_R1 ; ; MOV A,RMRAM_R2 ; ; MOV A,RMRAM_D1 ; ; MOV A,RMRAM_D2 ; NOP REM_AAA: ;连按处理 BS RR11,REMD_F ; 遥控数据处理标志位 ;MOV A,@0x01 ;0000,0101 ;IOW 0x0F ;允许 外部下降中断/计时溢出中断 REMOTE_EX: RET REMCOM: ;遥控接收延时计数 MOV A,@13 ;20/13 MOV REMTA,A ; REMCOM_LP: DJZ REMTA ; JMP REMCOM_LP ; RET ;=========================================================== ;功能说明: ;以数码管动态扫描点亮 ;使用: ;入口: DD1=数据 AA1 ;出口: ; ;=========================================================== SENDLED: ;以数码管动态扫描点亮  ; DJZ IRTTC1 ;中断定时计数 ; JMP SENDLED_EXB ;当TTC1=0时为无键按下转出口 ; MOV A,@10 ;160 重设计数值 ; MOV IRTTC1,A ; ; JBC RR11,TC4094_F ;TC4094_F=1第一位LED ; JMP TC4094LED_HH ; ; BS RR11,TC4094_F ;TC4094_F=1第一位LED ; CALL TC4094_COMMLED1 ;对第1位LED扫描,往TC4094送数子程序 ; JMP IN_TC4094LED ; ; TC4094LED_HH: ; BC RR11,TC4094_F ;TC4094_F=1第一位LED ; CALL TC4094_COMMLED2 ;对第2位LED扫描,往TC4094送数子程序 ; IN_TC4094LED: ;SENDLED_EXB: DJZ IRTTC3 ;中断定时计数/键盘按下后延时 JMP SENDLED_EXA ;当TTC1=0时为无键按下转出口 MOV A,@20 ;20 重设计数值 MOV IRTTC3,A ; DJZ IRTTC2 ;中断定时计数/键盘按下后延时 JMP SENDLED_EXA ;当TTC1=0时为无键按下转出口 MOV A,@5 ;160 重设计数值 MOV IRTTC2,A ; JBS RR11,DELKEY_F ;延时按键有效 JMP SENDLED_EXA ; BC RR11,DELKEY_F ;延时按键有效 SENDLED_EXA: RET ;=========================================================== ;功能说明:往TC4094送数子程序 ;使用: ;入口: DD1=数据 AA1 ;出口: ; ;=========================================================== ;TC4094_COMMLED1: ;对第1位LED扫描,往TC4094送数子程序 ; DISI ;关中断 ; BC PORT5,COMLED2 ;对数码管扫描1 ; BS PORT5,COMLED1 ;对数码管扫描2 ; MOV A,LEDDAT1 ;TC4094数据 ; JMP WTC4094LP_1 ; ;TC4094_COMMLED2: ;对第2位LED扫描,往TC4094送数子程序 ; DISI ;关中断 ; BS PORT5,COMLED2 ;对数码管扫描1 ; BC PORT5,COMLED1 ;对数码管扫描2 ; MOV A,LEDDAT2 ;TC4094数据 ;MPWTC4094LP_1: ; MOV IRDD1,A ; ; MOV A,@0X08 ;每字节共需循环8次 ; MOV IRAA1,A ; ;MPWTC4094LP_2: ; BC PORT6,P4094CLK ;TC4094时钟 ; JBC IRDD1,7 ;判别0位是0跳过下一行 ; JMP MPTC4094DH ;是1转 ; BC PORT6,P4094DAT ;TC4094数据 ; JMP MPOUTTC4094DAT ;转发数据 ; MPTC4094DH: ; BS PORT6,P4094DAT ;TC4094数据 ; MPOUTTC4094DAT: ; NOP ; ; NOP ; ; BS PORT6,P4094CLK ;TC4094时钟 ; RLC IRDD1 ;数据寄存器右移一位 ; DJZ IRAA1 ;共8位,每一次减1,是到0则跳过下一步转出口 ; JMP MPWTC4094LP_2 ;8位发完? ; BS PORT6,P4094STR ;TC4094闸门 ; NOP ; NOP ; NOP ; BC PORT6,P4094STR ;TC4094闸门,关闸 ;ENI ;开中断 ; RET ;========================================================== ;功能说明:向PT2258送数程序 ;使用:AA1,AA2 ;入口: DD1=要送出的数据 ;出口: ; PT2258_ADD=0X88 ;PT2314地址 ;========================================================== PT2258_ADDCOMM: DISI ;关中断 ;CALL STA_I2C ;启始 BC PORT5,PT2258_CLK ;PT2314数据 NOP BS PORT5,PT2258_DAT ;PT2314数据 NOP BS PORT5,PT2258_CLK ;PT2314数据 NOP BC PORT5,PT2258_DAT ;PT2314数据 NOP BC PORT5,PT2258_CLK ;PT2314数据 ;----------------------------------- MOV A,@PT2258_ADD ;PT2314地址 MOV AA2,A ; ;CALL WBIT_I2CP1 ;送8位数据 MOV A,@0X08 ;每字节共需循环8次 MOV AA1,A ; ASWBIT_I2CP2: JBC AA2,7 ; JMP ASI2CP_DH ; BC PORT5,PT2258_DAT ;PT2258据 JMP ASI2C_OUTDAT ; ASI2CP_DH: BS PORT5,PT2258_DAT ;PT2258数据 ASI2C_OUTDAT: NOP NOP ;NOP BS PORT5,PT2258_CLK ;PT2314数据 NOP BC PORT5,PT2258_CLK ;PT2314数据 NOP BC PORT5,PT2258_DAT ;PT2314数据 RLC AA2 ;数据寄存器右移一位 DJZ AA1 ;共8位,每一次减1,是到0则跳过下一步转出口 JMP ASWBIT_I2CP2 ;8位发完? BC PORT5,PT2258_CLK ;PT2314数据 NOP BS PORT5,PT2258_CLK ;PT2314数据 ASIN_DAT_L: JBC PORT5,PT2258_DAT ;PT2314数据 JMP ASIN_DAT_L ;等待I2C输出确认信号,即出L电平 BC PORT5,PT2258_CLK ;PT2314数据 ;---------------- MOV A,DD1 ;PT2314地址 MOV AA2,A ; ;CALL WBIT_I2CP1 ;送8位数据 MOV A,@0X08 ;每字节共需循环8次 MOV AA1,A ; BSWBIT_I2CP2: JBC AA2,7 ; JMP BSI2CP_DH ; BC PORT5,PT2258_DAT ;PT2258据 JMP BSI2C_OUTDAT ; BSI2CP_DH: BS PORT5,PT2258_DAT ;PT2258数据 BSI2C_OUTDAT: NOP NOP ;NOP BS PORT5,PT2258_CLK ;PT2314数据 NOP BC PORT5,PT2258_CLK ;PT2314数据 NOP BC PORT5,PT2258_DAT ;PT2314数据 RLC AA2 ;数据寄存器右移一位 DJZ AA1 ;共8位,每一次减1,是到0则跳过下一步转出口 JMP BSWBIT_I2CP2 ;8位发完? BC PORT5,PT2258_CLK ;PT2314数据 NOP BS PORT5,PT2258_CLK ;PT2314数据 BSIN_DAT_L: JBC PORT5,PT2258_DAT ;PT2314数据 JMP BSIN_DAT_L ;等待I2C输出确认信号,即出L电平 BC PORT5,PT2258_CLK ;PT2314数据 ;CALL SOTP_I2C ;停止 ;BC PORT5,PT2258_CLK ;PT2314数据 NOP BC PORT5,PT2258_DAT ;PT2314数据 NOP BS PORT5,PT2258_CLK ;PT2314数据 NOP BS PORT5,PT2258_DAT ;PT2314数据 NOP NOP ;NOP ;NOP ENI ;开中断 RET ;============================================================= ;第4部分:公共服务例程 ;包括以下内容: ; 1.延时程序 ;============================================================= ;delayt_2ms: ;5MS延时 ; MOV A,@10 ;50 ; JMP DELT3 ; delayt_5ms: ;5MS延时 MOV A,@80 ;50 JMP DELT3 ; delayt_10ms: MOV A,@200 ;140 /180190 166=1MS 84=0.5MS DELT3: MOV TAA2,A ; DELT2: MOV A,@255 ;200 MOV TAA1,A ; DELT1: DJZ TAA1 ; JMP DELT1 ; DJZ TAA2 ; JMP DELT2 ; RET ;/*=====================================================================================*/ ;/*=====================================================================================*/ ;/*============= 程序完成日期 ====================*/ ;/*============= 2002年8月9日 ====================*/ ;/*=====================================================================================*/