?? dfb0829.asm
字號(hào):
include "HT48R30A-1.INC"
;===================================================================
;常量定義
;===================================================================
ledcon_sw equ PB.3 ;按鍵指示使能控制
seg1con_sw equ PB.5 ;數(shù)碼管顯示使能控制1
seg2con_sw equ PB.4 ;數(shù)碼管顯示使能控制2
seg3con_sw equ PB.6 ;數(shù)碼管顯示使能控制3
seg4con_sw equ PB.7 ;數(shù)碼管顯示使能控制4
re_r equ PC.0 ;溫檢參考電阻
rt_r equ PC.1 ;溫檢熱敏電阻
v_chk equ PG.0 ;溫檢電壓檢測(cè)
act equ PB.2 ;交流繼電器輸出
press_sw equ PC.2 ;壓力開關(guān)(常閉)
;===================================================================
;變量定義
;===================================================================
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 ? ;分鐘計(jì)數(shù)器
min db ?
Hour db ?
Seg_con db ? ;數(shù)碼管控制寄存器
disp_ram1 db ? ;數(shù)碼管1顯示內(nèi)容
disp_ram2 db ? ;數(shù)碼管2顯示內(nèi)容
disp_ram3 db ? ;數(shù)碼管3顯示內(nèi)容
disp_ram4 db ? ;數(shù)碼管4顯示內(nèi)容
disp_ram5 db ? ;指示燈顯示內(nèi)容
disp_delay db ? ;開機(jī)顯示延時(shí)計(jì)數(shù)
bz_length db ? ;蜂鳴器聲長(zhǎng)寄存器
bz_freq db ? ;蜂鳴器聲頻寄存器
bz_delay db ? ;蜂鳴器延時(shí)計(jì)數(shù)
time_delay db ? ;時(shí)間延時(shí)計(jì)數(shù)
press_time db ? ;保壓時(shí)間(5m/15m/25m/35m/45m)
disp_num db ? ;顯示位置(時(shí)序)
key_data db ? ;所得按鍵值
key_time db ? ;按鍵掃描計(jì)時(shí)器
preset_hour db ? ;所設(shè)置預(yù)置定時(shí)(小時(shí))
preset_min db ? ;所設(shè)置預(yù)置定時(shí)(分鐘)
rt_ad db ? ;熱敏電阻AD值
flag_time db ?
flag_1ms equ flag_time.0 ;毫秒計(jì)時(shí)標(biāo)志
flag_quaSec equ flag_time.1 ;1/4秒鐘計(jì)時(shí)標(biāo)志
flag_min equ flag_time.2 ;分鐘計(jì)時(shí)標(biāo)志
flag_con db ?
key_press equ flag_con.0 ;按鍵狀態(tài)標(biāo)志
key_get equ flag_con.1 ;按鍵獲取標(biāo)志
Led_Flash equ flag_con.3 ;1=指示燈閃爍
flag_relay equ flag_con.4 ;繼電器狀態(tài)標(biāo)志
flag_press equ flag_con.5 ;保壓計(jì)時(shí)標(biāo)志
flag_action equ flag_con.6 ;繼電器工作標(biāo)志
led_con equ flag_con.7 ;按鍵指示標(biāo)志
;===================================================================
;PA、PB開啟上拉電阻 PC、PG關(guān)閉上拉電阻 BZ/BZB:All Disable
;開啟定時(shí)中斷 (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
;===================================================================
; 開機(jī)狀態(tài):
; 顯示"----" -> 按鍵掃描
;===================================================================
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
;----------數(shù)碼管顯示----------
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
;----------顯示內(nèi)容----------
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
;************************************************************************
; 得到按鍵,進(jìn)行按鍵處理
;************************************************************************
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
;-------------------------------------- 預(yù)置時(shí)間
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
;===================================================================
; 模式: 預(yù)約
;===================================================================
preTime_program:
sz preset_min
jmp preTime_str
sz preset_hour ;判斷是否有預(yù)約
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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -