📄 dfb0829.asm
字号:
include "HT48R30A-1.INC"
;===================================================================
;常量定义
;===================================================================
ledcon_sw equ PB.3 ;按键指示使能控制
seg1con_sw equ PB.5 ;数码管显示使能控制1
seg2con_sw equ PB.4 ;数码管显示使能控制2
seg3con_sw equ PB.6 ;数码管显示使能控制3
seg4con_sw equ PB.7 ;数码管显示使能控制4
re_r equ PC.0 ;温检参考电阻
rt_r equ PC.1 ;温检热敏电阻
v_chk equ PG.0 ;温检电压检测
act equ PB.2 ;交流继电器输出
press_sw equ PC.2 ;压力开关(常闭)
;===================================================================
;变量定义
;===================================================================
data .section 'data'
a_Save db ?
Status_Save db ?
TMR_save db ? ;tmr堆栈寄存器
msec_cnt1 db ? ;msec_cnt1=250 250=0.25秒种
msec_cnt2 db ? ;msec_cnt2=240 240*250=60000=1分钟
min_cnt db ? ;分钟计数器
min db ?
Hour db ?
Seg_con db ? ;数码管控制寄存器
disp_ram1 db ? ;数码管1显示内容
disp_ram2 db ? ;数码管2显示内容
disp_ram3 db ? ;数码管3显示内容
disp_ram4 db ? ;数码管4显示内容
disp_ram5 db ? ;指示灯显示内容
disp_delay db ? ;开机显示延时计数
bz_length db ? ;蜂鸣器声长寄存器
bz_freq db ? ;蜂鸣器声频寄存器
bz_delay db ? ;蜂鸣器延时计数
time_delay db ? ;时间延时计数
press_time db ? ;保压时间(5m/15m/25m/35m/45m)
disp_num db ? ;显示位置(时序)
key_data db ? ;所得按键值
key_time db ? ;按键扫描计时器
preset_hour db ? ;所设置预置定时(小时)
preset_min db ? ;所设置预置定时(分钟)
rt_ad db ? ;热敏电阻AD值
flag_time db ?
flag_1ms equ flag_time.0 ;毫秒计时标志
flag_quaSec equ flag_time.1 ;1/4秒钟计时标志
flag_min equ flag_time.2 ;分钟计时标志
flag_con db ?
key_press equ flag_con.0 ;按键状态标志
key_get equ flag_con.1 ;按键获取标志
Led_Flash equ flag_con.3 ;1=指示灯闪烁
flag_relay equ flag_con.4 ;继电器状态标志
flag_press equ flag_con.5 ;保压计时标志
flag_action equ flag_con.6 ;继电器工作标志
led_con equ flag_con.7 ;按键指示标志
;===================================================================
;PA、PB开启上拉电阻 PC、PG关闭上拉电阻 BZ/BZB:All Disable
;开启定时中断 (1ms)
;===================================================================
code .section at 0 'code'
org 00h
jmp ready
org 04h
reti
org 08h
jmp SystemClock
;===================================================================
; 上电:
; 蜂鸣器响一声 -> 全显3秒
;===================================================================
ready:
clr pac
set pa
clr pbc
mov a,11111000b
mov pb,a ;output : bz/action=0 ; pb.3~pb.7=1
set PGC.0
set PCC.0
set PCC.1
set PCC.2
mov a,05h
mov intc,a
mov a,083h
mov TMRC,a ; Osc/16 4us
mov a,006h
mov TMR,a ;1ms - system clock
set tmrc.4
call buzze
mov a,08h
mov disp_ram1,a
mov disp_ram2,a
mov disp_ram3,a
mov disp_ram4,a
mov a,00h
mov disp_ram5,a
mov a,01h
mov disp_num,a
clr msec_cnt1
clr flag_quaSec
ready_loop:
snz flag_1ms
jmp ready_loop
call display
snz flag_quaSec
jmp ready_loop
clr flag_quaSec
inc disp_delay
mov a,disp_delay
sub a,0ch ;0.25*12 => 3 second
snz c
jmp ready_loop
;===================================================================
; 开机状态:
; 显示"----" -> 按键扫描
;===================================================================
str:
mov a,20h
mov mp,a
clr_ram_loop:
clr r0
inc mp
mov a,mp
xor a,80h
sz acc
jmp clr_ram_loop ;clear ram data
call dispRail
mov a,0ffh
mov disp_ram5,a
start_loop:
snz flag_1ms
jmp start_loop
clr flag_1ms
call ScanKey
sz key_get
jmp get_key_deal
call Display
jmp start_loop
;************************************************************************
; Function : 显示子程序
;************************************************************************
Display proc
clr pac
set pa
mov a,11111000b
orm a,pb ;set pb.3~pb.7
;----------数码管显示----------
mov a,disp_num
xor a,01h
sz z
jmp display_1
mov a,disp_num
xor a,02h
sz Z
jmp display_2
mov a,disp_num
xor a,03h
sz Z
jmp display_3
mov a,disp_num
xor a,04h
sz Z
jmp display_4
mov a,disp_num
xor a,05h
sz z
jmp display_5
jmp Display_ok
;----------显示内容----------
display_1:
sz disp_ram1
jmp seg1_display
jmp Display_ok
seg1_display:
mov a,disp_ram1
mov tblp,a
tabrdl PA
clr seg1con_sw
jmp Display_ok
display_2:
mov a,disp_ram2
mov tblp,a
tabrdl PA
clr seg2con_sw
jmp Display_ok
display_3:
mov a,disp_ram3
mov tblp,a
tabrdl PA
clr seg3con_sw
jmp Display_ok
display_4:
mov a,disp_ram4
mov tblp,a
tabrdl PA
clr seg4con_sw
jmp Display_ok
display_5:
snz led_con
jmp display_ok
mov a,disp_ram5
mov PA,a
clr ledcon_sw
;----------完成显示----------
Display_ok:
mov a,disp_num
sub a,05h
sz c
jmp Disp_rest
inc disp_num
ret
Disp_rest:
mov a,01h
mov disp_num,a
ret
Display endp
;************************************************************************
; Function : 按键扫描程序
;************************************************************************
ScanKey proc
mov a,11111000b
orm a,pb
set PA
set PAC
nop
nop
mov a,PA
xor a,key_data
sz acc
jmp new_key_chk
;------------------
snz key_press
jmp scankey_end
mov a,key_time
sub a,15
snz C
jmp scankey_end
set key_get
clr key_press
jmp scankey_end
;------------------
new_key_chk:
mov a,PA
mov key_data,a
clr key_time
set key_press
scankey_end:
ret
ScanKey endp
;************************************************************************
; 得到按键,进行按键处理
;************************************************************************
get_key_deal:
clr key_get
mov a,key_data
xor a,0feh
sz Z
jmp key1_get
mov a,key_data
xor a,0fdh
sz Z
jmp key2_get
mov a,key_data
xor a,0fbh
sz Z
jmp key3_get
mov a,key_data
xor a,0f7h
sz Z
jmp key4_get
mov a,key_data
xor a,0efh
sz Z
jmp key5_get
mov a,key_data
xor a,0dfh
sz Z
jmp key6_get
mov a,key_data
xor a,0bfh
sz Z
jmp key7_get
mov a,key_data
xor a,07fh
sz Z
jmp key8_get
jmp start_loop
;-------------------------------------- 煮饭
key1_get:
mov a,5
mov press_time,a
mov a,11111110b
mov disp_ram5,a
jmp mode_select_ok
;-------------------------------------- 肉类
key2_get:
mov a,15
mov press_time,a
mov a,11111101b
mov disp_ram5,a
jmp mode_select_ok
;-------------------------------------- 煲粥
key3_get:
mov a,25
mov press_time,a
mov a,11111011b
mov disp_ram5,a
jmp mode_select_ok
;-------------------------------------- 煲汤
key4_get:
mov a,35
mov press_time,a
mov a,11110111b
mov disp_ram5,a
jmp mode_select_ok
;-------------------------------------- 豆筋
key5_get:
mov a,45
mov press_time,a
mov a,11101111b
mov disp_ram5,a
jmp mode_select_ok
;-------------------------------------- 保温
key6_get:
clr preset_min
clr preset_hour
jmp heat_preservation
;-------------------------------------- 预置时间
key7_get:
call buzze
clr press_time
mov a,0ffh
mov disp_ram5,a
mov a,5
addm a,preset_min
mov a,preset_min
sub a,60
snz c
jmp PreSet_BCD
inc preset_hour
clr preset_min
preset_hour_chk:
mov a,preset_hour
sub a,12
sz acc
jmp PreSet_BCD
clr preset_hour
PreSet_BCD:
mov a,preset_min
mov min,a
mov a,preset_hour
mov Hour,a
call Time_hex_bcd
jmp start_loop
;-------------------------------------- 确定/取消
key8_get:
call buzze
clr preset_min
clr preset_hour
call DispRail
jmp start_loop
;--------------------------------------
mode_select_ok:
call buzze
jmp preTime_program
;===================================================================
; 模式: 预约
;===================================================================
preTime_program:
sz preset_min
jmp preTime_str
sz preset_hour ;判断是否有预约
jmp preTime_str
jmp keep_press
preTime_str:
set led_flash ;Led闪烁
clr msec_cnt1
clr msec_cnt2
clr flag_min ;reset timer
preTime_loop:
snz flag_1ms
jmp preTime_loop
clr flag_1ms
preTime_chk_0:
sz preset_hour
jmp PreTime_chk_01
mov a,press_time
sub a,preset_min
sz c
jmp keep_press
PreTime_chk_01:
snz flag_min
jmp PreTime_scankey
clr flag_min
sz preset_min
jmp PreTime_Dec
jmp preTime_chk_2
PreTime_Dec:
dec preset_min
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -