📄 dc082.asm
字号:
dw 01110010b;01011110b;4
dw 11100011b;11010111b;5
dw 11100111b;11110111b;6
dw 01010001b;10011010b;7
dw 11110111b;11111111b;8
dw 11110011b;11011111b;9
table_speed:
;p54326789
dw 00000000b
dw 00000000b;00000000b;1节
dw 00001000b;00010000b;2
dw 00001100b;00110000b;3
dw 00001110b;01110000b;4
dw 00001111b;11110000b;5
dw 00011111b;11111000b;6
dw 00111111b;11111100b;7
dw 01111111b;11111110b;8
dw 11111111b;11111111b;9
;table_zcf:
;dw 00000010b
;dw 00000010b;01010000b;1普通风风轮显示表P1、P10保持点亮
;dw 00000110b;01110000b;2
;dw 10000110b;01110001b;3
;dw 11000110b;01110011b;4
;dw 11100110b;01110111b;5
;dw 11100111b;11110111b;6
; 345 216
;dw 01000010b
;dw 00100100b
;dw 10000001b
table_key:
dw 0
dw 10;ion
dw 30;sw
dw 45;hum
dw 65;time
dw 79;mode
dw 104;on
;=========================================================================
start:
mov A,#07Fh ;Initial stack pointer and
b0mov STKP,A ;disable global interrupt
clr PFLAG ;pflag = x,x,x,x,x,c,dc,z
mov A,#00h ;Initial system mode
b0mov OSCM,A
B0BSET p_speed_out
B0BCLR p_fan
B0BCLR p_hum_out
call init_IOport
call init_timer
call ClrRAM ;Clear RAM;Clear watchdog timer
call initvar
call init1621
jmp main
;=======================================================================
init_IOport:
MOV_1 P0UR,0ffh ;复位后为输入模式开启上拉
MOV_1 P5UR,0ffh
mov_1 p4ur,11111101b
MOV_1 P5M,0ffh ;
MOV_1 p0m,11100110b ;p0.4为输入华、摄氏度检测
MOV_1 P4M,00011000b
mov_1 p0,01000000b
mov_1 p4,00001000b
mov_1 p5,00010000b
ret
;-----------------------------------------------------------------------
init_timer:
mov_1 t0m,01110000B ;t0 is fcpu/2
mov_1 t0c,56;206;56 ;初值56为100us
mov_1 tc0m,01110100b ;tc0 is fcpu/2初值自动装载使能
mov_1 tc0c,6;195;6 ;初值6为125us
mov_1 tc0r,6;195;6
clr intrq ;清中断请求标志
MOV_1 INTEN,00110000B ;使能T0、TC0中断
ret
;-------------------------------------------------------------------------
ClrRAM:
clr Y
mov_1 z,7fh ;Set @YZ address from 2fh
ClrRAM10:
clr @YZ ;Clear @YZ content
decms Z ;z = z - 1 , skip next if z=0
jmp ClrRAM10
clr @YZ ;Clear address $00
ret
;----------------------------------------------------------------------------------
initvar:
mov_1 r_2ms_cnt,c_2ms_cntinit
b0bset ftc0enb ;开启TC0
b0bset ft0enb ;开启T0
b0bset FGIE ;Enable global interrupt
init_f_c:
mov_1 wdtr,5ah
b0bts1 p_c_f
jmp init_f_c10
bclr b_f
jmp init_f_c20
init_f_c10:
bset b_f
init_f_c20:
bts1 b_trigger32ms
jmp init_f_c
b0bset p0m.4 ;检测完置为输出
mov a,#0ffh
b0mov r_ledbyte1,a
b0mov r_ledbyte2,a
b0mov r_ledbyte3,a
b0mov r_ledbyte4,a
b0mov r_ledbyte5,a
b0mov r_ledbyte6,a
b0mov r_ledbyte7,a
b0mov r_ledbyte8,a
b0mov r_ledbyte9,a
ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
int_t:
push
b0bts1 FTC0IRQ
JMP INT_T0
;------------------------------------------------------------------
b0bclr FTC0IRQ ;Process T0 timer interrupt here
cpjz r_buz_time,int_tC0_10
mov a,#00010000b
xor p_buzport,a
jmp int_tC0_20
int_tC0_10:
b0bclr p_buz
int_tC0_20:
call inf_rec ;遥控接收
decms r_2ms_cnt
jmp int_end
mov_1 r_2ms_cnt,c_2ms_cntinit
mov_2 r_trigger_byte,r_blink_byte
mov_2 r_trigger_byte1,r_blink_byte1
incms r_blink_byte
jmp int_tC0_30
incms r_blink_byte1
nop
int_tC0_30:
b0mov a,r_blink_byte
xor r_trigger_byte,a
b0mov a,r_blink_byte1
xor r_trigger_byte1,a
bts0 b_trigger4ms
bset b_time_4ms
bts0 b_trigger8ms
bset b_time_8ms
bts0 b_trigger16ms
bset b_16ms
bts0 b_trigger64ms
bset b_time_64ms
bts0 b_trigger500ms
bset b_time_500ms
bts0 b_trigger1s
bset b_time_1s
bts0 b_trigger32ms
bset b_time_32ms
JMP int_end
;-----------------------------------------------------------------------------
INT_T0:
b0bts1 FT0IRQ
jmp int_end
b0bclr FT0IRQ
mov_1 t0c,56;206;56 ;重装初值---------------------------------------------------------
b0bts0 p_zero
bclr b_zero_low
b0bts0 p_zero
jmp int_end
bts0 b_zero_low
jmp int_t0_20
bset b_zero_low
mov_2 r_timezero,r_timezero_buf;下降沿查表得出触发时间值
int_t0_20:
cpjz r_timezero,int_t0_30
decms r_timezero
nop
b0mov a,r_timezero
sub a,#8
b0bts1 fc
b0bclr p_speed_out
b0bts0 fc
int_t0_30:
b0bset p_speed_out;r_timezero=0关输出
int_end:
pop
reti
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$4
main:
mov_1 wdtr,5ah
b0bclr p_backled
call lcdupdata
bts1 b_time_1s
jmp main
bclr b_time_1s
b0bset p_backled
mov_1 r_buz_time,c_buz_long
main_00:
mov_1 wdtr,5ah
bts1 b_time_4ms
jmp main_01
bclr b_time_4ms
call flash
call watercheck
call buz
call read_key ;短按键判断
call read_keylong ;长按键判断
call ad_temp
call Accept
call Accept_long
call swtime ;摇头时间处理
call clock
call timecenter
call logic
call driver
main_01:
bts1 b_time_32ms
jmp main_001
bclr b_time_32ms
call ad_deal
call ledkeyscan
main_001:
bts1 b_time_64ms
jmp main_02
bclr b_time_64ms
main_000:
call displaydata
call lcdupdata
main_02:
;bts1 b_time_125ms
;jmp main_03
;bclr b_time_125ms
;incms r_zcfdispay_cnt
;nop
;b0mov a,r_zcfdispay_cnt
;cmprs a,#3
;jmp main_03
;clr r_zcfdispay_cnt
main_03:
bts1 b_time_500ms
jmp main_00
bclr b_time_500ms
call displaytime ;图标显示时间处理
call delay_off ;延时关机
jmp main_00
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
buz:
cpjz r_buz_time,buz1 ;鸣叫时间是否为0
decms r_buz_time
jmp buz_ret
buz1:
cpjz r_buz_count,buz_ret;鸣叫次数是否为0
cpjnz r_buz_timecnt,buz_ret;鸣叫间隔时间是否到
decms r_buz_count
jmp buz2
ret
buz2:
mov_1 r_buz_timecnt,c_buz_timecnt
mov_1 r_buz_time,c_buz_short
buz_ret:
ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
flash:
cpjz r_buz_timecnt,flash10
decms r_buz_timecnt
nop
flash10:
incms r_flashcnt1
nop
incms r_flashcnt
nop
b0mov a,r_flashcnt
xor a,#128
b0bts1 fz
jmp flash_ret
cpjz r_settime,flash_ret
decms r_settime
nop
flash_ret:
ret
;$$$$$$$$$$$$$$$$$$$$$$$$遥控接收$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
inf_rec:
incms R_REC_TIME
nop
b0bts0 p_rec
JMP INT_REC_1
B0BTS0 B_REC_LOW
JMP inf_rec_ret
B0BSET B_REC_LOW ;低电平标志
CLR R_REC_TIME
JMP inf_rec_ret
INT_REC_1:
B0MOV A,R_REC_TIME
SUB A,#40 ;高电平大于5MS时完成一帧
B0BTS0 FC
JMP INT_REC_ERROR
B0BTS1 B_REC_LOW
JMP inf_rec_ret
B0BCLR B_REC_LOW ;清低电平标志
B0MOV A,R_REC_TIME
SUB A,#16 ;低电平大于2ms时出错
B0BTS0 FC
JMP INT_REC_ERROR
B0MOV A,R_REC_TIME
SUB A,#07 ;低电平小于0.875ms时为0
RLCM r_data_low
RLCM r_data_hig
DECMS R_REC_CNT
JMP inf_rec_ret
B0MOV A,r_data_hig
CMPRS A,#00001101B
JMP INT_REC_ERROR
B0MOV A,r_data_low
B0MOV R_REC_CODE,A
B0BSET B_REC_FINISH
CLR R_REC_REPEAT_CNT
b0mov a,r_remote_cnt ;长按键记数
sub a,#150
b0bts1 fc ;大于50=1s不加
incms r_remote_cnt
nop
JMP inf_rec_ret
INT_REC_ERROR:
MOV A,#12 ;重新接收12个数据
B0MOV R_REC_CNT,A
CLR r_data_low
inf_rec_ret:
ret
;$$$$$$$$$$$$$$$$$$$$$取遥控键值$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Accept:
INCMS R_REC_REPEAT_CNT
NOP
B0MOV A,R_REC_REPEAT_CNT
SUB A,#25
B0BTS1 FC
jMP CODE_5104_10
B0BCLR B_REC_REPEAT
b0bclr b_keylong1
clr r_remote_cnt
CODE_5104_10:
B0BTS1 B_REC_FINISH
JMP accept90
B0BCLR B_REC_FINISH
B0BTS0 B_REC_REPEAT
JMP accept90
B0BSET B_REC_REPEAT
mov a,#10100000b;00100011b
xor a,R_REC_CODE
b0bts0 fz
jmp deal_keyonoff ;k4
mov a,#10000001b;00000011b
xor a,R_REC_CODE
b0bts0 fz
jmp deal_keyhum
accept100:
bts1 b_run
jmp accept90
mov a,#10010000b;00010011b
xor a,R_REC_CODE
b0bts0 fz
jmp deal_keymode ;k5 timer
mov a,#10000010b;00000011b
xor a,R_REC_CODE
b0bts0 fz
jmp deal_keysw ;k2 swing
mov a,#10001000b;00000011b
xor a,R_REC_CODE
b0bts0 fz
jmp deal_keyflz
mov a,#10000100b;01000011b ;K3
xor a,R_REC_CODE
b0bts0 fz
jmp deal_keytime ;on/off
accept70:
B0BCLR B_REC_REPEAT ;接收码错误,重接
accept90:
ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
Accept_long:
b0mov a,r_remote_cnt
sub a,#70;150 ;第一次按键时间大于3S=150*20(每一帧码接收完需要20ms)
b0bts1 fc
jmp Accept_longret
mov a,#10000100b
xor a,R_REC_CODE
b0bts1 fz
jmp Accept_long10
bset b_keylong1 ;遥控长按标志
mov_1 r_remote_cnt,60
jmp deal_keytime
Accept_long10:
b0mov a,r_remote_cnt
sub a,#150 ;第一次按键时间大于3S=150*20(每一帧码接收完需要20ms)
b0bts1 fc
jmp Accept_longret
mov a,#10100000b;是否关机键
xor a,R_REC_CODE
b0bts1 fz
jmp Accept_longret
bset b_keylong1
mov_1 r_remote_cnt,151
jmp read_keylong20
Accept_longret:
ret
;$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
watercheck:
bts1 p_waterkeyline;低电平为正常
jmp watercheck10
clr r_waterkeycnt1
incms r_waterkeycnt ;缺水时waterkeycnt加1
nop
bts1 r_waterkeycnt.7
jmp watercheck_ret
mov_1 r_waterkeycnt,01111111b
bset b_waterkey_err
jmp watercheck_ret
watercheck10:
clr r_waterkeycnt
incms r_waterkeycnt1
nop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -