?? seg_sam.src
字號:
include "C:\工程項目\seg_sam\seg_sam_head.src"
;================Interrupt vertor adderss================
ORG 0000H ;中斷入口地址
VECTOR 00H,INT_9454
ORG 003cH
DB 00H ;必須初始化為0
DB 00H ;必須初始化為0
DB 0E7H ;允許低電壓復位
DB 03H ;內部RC震蕩3.2M
;=====================MAIN PROGRAM=======
org 0100h ;復位入口地址
Rest:
di ;關總中斷DISwatchdog=10100010b ;7654位為1010時關看門狗
ld BTCON,#101000010b ;DISwatchdog ;BTCON為時基控制寄存器1010B=Disable watchdog timer
ld CLKCON,#00011000b ;No_divide_clock=00011000b ;資料的279頁
ld SYM,#00h ;關總中斷標志
ld SP,#0C0H ;堆棧設置
call Initcpu
call Delay300ms ;延時300ms給晶體振蕩器穩定
call initdata ;初始化數據8966020
call long_beep1
ei ;開總中斷
;==============================main============================13536417338
main:
ei
nop
nop
cp main_program_cnt,#0
jp z,call_read_AD_prg
cp main_program_cnt,#1
jp z,call_time_comput
cp main_program_cnt,#2
jp z,call_read_key_prg
cp main_program_cnt,#3
jp z,call_what_key_is
cp main_program_cnt,#4
jp z,call_heat_and_warm
call_read_AD_prg:
nop
nop
call read_AD_prg
jp refurbish_LED
call_time_comput:
nop
nop
call time_comput
nop
call haver_erroron
jp refurbish_LED
call_read_key_prg:
nop
nop
call led_count_prg ;LED顯示計算
jp refurbish_LED
call_what_key_is:
nop
nop
call what_key_is ;按鍵確認
jp refurbish_LED
call_heat_and_warm:
nop
nop
call heat_and_warm ;加熱與保溫
jp refurbish_LED
refurbish_LED:
inc main_program_cnt
nop
call read_key_prg ;按鍵掃描
call display_led ;刷新顯示改變位,n豪秒刷新一次,視效果而定
nop
nop
jp main
;================AD采樣========================
;描述:
;
;
;
;
;
;==================================================
read_AD_prg:
;==========讀取top溫度========================
;描述:廣州敏杰熱敏電阻
;=======================================
read_top_temp:
nop
nop
call delay_10_nop
jp read_AD_prg_ret
;==============讀取鍋低溫度=====================
read_bot_temp:
nop
nop
call delay_10_nop
read_AD_prg_ret:
nop
nop
ret
;==============================溫度數據表====================================
temp_tab:
DB 0FH,010H,011H,012H,013H,013H,014H,015H,016H,017H;0C`~9C`
;=====================時間計算/定時開機=======
;描述:在頂時設定后清掉時鐘的所有積存器
;=============時間計算=======================
time_comput:
cp half_second_cnt,#2
jp c,time_switch_ret
just_one_s: ;一秒
clr half_second_cnt
inc one_second_cnt
call dec_one_second
cp one_second_cnt,#60
jp c,time_switch_ret
just_one_m: ;一分
clr one_second_cnt
inc one_minu_cnt
cp one_minu_cnt,#60
jp c,time_switch_ret
just_one_h: ;一小時
clr one_minu_cnt
inc one_hour_cnt
cp one_hour_cnt,#24
jp c,time_switch_ret
clr one_hour_cnt
time_switch_ret:
nop
nop
ret
;==========工作或預約時間減一秒=======
dec_one_second:
inc work_one_second
cp work_one_second,#60
jp c,dec_one_second_ret
clr work_one_second
tm work_flg0,#start_work_flg0 ;如預約開始或已經開始工作
jp nz,dec_work_time
tm work_flg0,#faith_start_flg0 ;如預約開始,關機并進入待機
jp nz,dec_faith_time
jp dec_one_second_ret
dec_faith_time:
cp faith_time_m_H,#1
jp nc,continue_dec
cp faith_time_m_L,#2
jp c,faith_time_over
continue_dec:
sub faith_time_m_L,#1
sbc faith_time_m_H,#0
faith_time_over:
nop
nop
jp dec_one_second_ret
dec_work_time:
dec work_time_minu
jp nz,dec_one_second_ret
work_just_over:
call long_beep5
dec_one_second_ret:
nop
nop
ret
;====================有錯誤報警關機==========================
;有錯誤報警5聲 關機 LCD同時顯示對應的錯誤碼
;
;
;=========================================
haver_erroron:
haver_erroron_ret:
nop
nop
ret
;=============按鍵=============
;
;
;=============================
read_key_prg:
ld P0CONH,#10101010b
ld P0CONL,#10101010b
or p0,#00001111b
ld P2CONH,#0
ld P2CONL,#0
call delay_10_nop
ld key_buf0,p2
or key_buf0,#10100100b
cp key_buf0,#11111111b
jp nz,have_keyact ;如果不都為1那么就有按鍵按下
jp NO_KEYSCAN ;否則沒有按鍵動作,跳出按鍵掃描
have_keyact:
cp key_buf0,key_buf2 ;key_buf2存放上次前8個按鍵值
jp z,is_oldkey
have_newkey:
ld key_buf2,key_buf0
and allkeyflag,#11110011b ;#Keyingflag=00000100b
jp key_scan_ret
is_oldkey:
dec key_dec_times
jp nz,key_scan_ret
key_is_ok:
tm allkeyflag,#keybackflag ;#keybackflag=00000001b
jp nz,key_scan_ret
or allkeyflag,#keyonflag ;#keyonflag=00000010b確定有鍵按下的標志
or allkeyflag,#keybackflag ;手是否松開的標志
ld key_dec_times,#24
tm allkeyflag,#Keyingflag ;#Keyingflag=00000100b
jp nz,set_samkey
or allkeyflag,#Keyingflag
jp key_scan_ret
set_samkey: ;同一按鍵
or allkeyflag,#samekeyflag ;#samekeyflag=00001000b
jp key_scan_ret
NO_KEYSCAN:
and allkeyflag,#11110000b
ld key_dec_times,#16
key_scan_ret:
nop
nop
ret
;==確定按鍵=============================
;描述:
;
;
;
;=========================================
what_key_is:
tm allkeyflag,#keyonflag
jp z,key_make_sure_ret
havekey:
cp key_buf0,#open_close_data
jp z,open_close
tm work_flg0,#start_work_flg0 ;如預約開始或已經開始工作
jp nz,key_make_sure_ret ;以下按鍵無效
tm work_flg0,#faith_start_flg0 ;如預約開始或已經開始工作
jp nz,key_make_sure_ret
cp key_buf0,#func_choice_data
jp z,function_choice
cp key_buf0,#faith_data
jp z,time_faith
cp key_buf0,#hour_key_data
jp z,hour_key_is
cp key_buf0,#minu_key_data
jp z,minu_key_is
jp key_make_sure_ret
;================================
open_close:
tm work_flg0,#start_work_flg0 ;如預約開始或已經開始工作
jp nz,close_to_wait ;關機并進入待機
tm work_flg0,#faith_start_flg0 ;如預約開始,關機并進入待機
jp nz,close_to_wait
tm work_flg0,#faith_work_flg0 ;如有預約標志開始預約
jp nz,start_faith
tm work_flg0,#have_function_flg0 ;如只有功能按下就立即開機工作
jp nz,immediately_work
close_to_wait:
call long_beep1
clr work_flg0
clr led_data_buf0
jp key_make_sure_ret
start_faith:
call short_beep1
or work_flg0,#faith_start_flg0
jp key_make_sure_ret
immediately_work:
call short_beep1
or work_flg0,#start_work_flg0
jp key_make_sure_ret
;========================
function_choice: ;功能處理
or work_flg0,#have_function_flg0
and work_flg0,#unfaith_work_flg0 ;具體看預約設置說明此標志
call short_beep1
inc function_key_cnt
cp function_key_cnt,#quicks_cook_data
jp z,quicks_cook
cp function_key_cnt,#criterion_cook_data
jp z,criterion_cook
cp function_key_cnt,#cook_tile_rice_data
jp z,cook_tile_rice
cp function_key_cnt,#cook_conjee_data
jp z,cook_conjee
cp function_key_cnt,#cook_soup_data
jp z,cook_soup
cp function_key_cnt,#again_heat_data
jp z,again_heat
clr function_key_cnt
jp key_make_sure_ret
;=========快煮=======
;
;========================
quicks_cook:
jp key_make_sure_ret
;=========精煮=======
;
;========================
criterion_cook:
jp key_make_sure_ret
;=========煲子飯=======
;
;========================
cook_tile_rice:
jp key_make_sure_ret
;=========默認煮粥一小時=======
;工作時間可調
;========================
cook_conjee:
ld work_time_minu,#60
ld work_time_max,#180
ld work_time_min,#30
jp key_make_sure_ret
;=========默認煮湯一小時=======
;工作時間可調
;========================
cook_soup:
ld work_time_minu,#15
ld work_time_max,#240
ld work_time_min,#30
jp key_make_sure_ret
;=========默認煮粥15分鐘=======
;工作時間可調
;========================
again_heat:
clr function_key_cnt
ld work_time_minu,#15
ld work_time_max,#30
ld work_time_min,#5
jp key_make_sure_ret
;=========預約按鍵=======
;預約工作時間可調
;0~8小時 如正在預約時切換功能,設置過的預約時間不變
;切換功能相應改變是否允許預約標志
;工作時或關機時清預約時間不變與預約標志
;========================
time_faith:
tm work_flg0,#have_function_flg0
jp z,key_make_sure_ret ;如沒有功能鍵按下,不允許預約
or work_flg0,#faith_work_flg0 ;設置約標志
tm work_flg0,#unchange_faith_t_flg0 ;如有預約標志開始預約
jp nz,key_make_sure_ret
or work_flg0,#unchange_faith_t_flg0
ld faith_time_m_H,#0
ld faith_time_m_L,#0
jp key_make_sure_ret
;=========小時加按鍵=======
;
;
;========================
hour_key_is:
tm work_flg0,#allow_timing_flg0 ;不允許定時跳出
jp z,key_make_sure_ret
tm work_flg0,#faith_work_flg0 ;設置約標志
jp nz,inc_faith_time_60m
cp function_key_cnt,#6
jp z,cp_max_time_H ;再加熱時鐘不能加1
add work_time_minu,#60
cp_max_time_H:
cp work_time_max,work_time_minu
jp nc,key_make_sure_ret
ld work_time_minu,work_time_min
jp key_make_sure_ret
inc_faith_time_60m: ;最大預約時間8小時==480分鐘
add faith_time_m_L,#60
adc faith_time_m_H,#0
cp faith_time_m_H,#1
jp c,key_make_sure_ret
cp faith_time_m_L,#0E1h
jp c,key_make_sure_ret
clr faith_time_m_L
clr faith_time_m_H
jp key_make_sure_ret
;=========分鐘加按鍵=======
;
;
;========================
minu_key_is:
tm work_flg0,#allow_timing_flg0 ;不允許定時跳出
jp z,key_make_sure_ret
tm work_flg0,#faith_work_flg0 ;設置約標志
jp nz,inc_faith_time_10m
cp function_key_cnt,#cook_conjee_data
jp z,add_15_minutes ;煮粥步長為15分鐘
cp function_key_cnt,#cook_soup_data
jp z,add_30_minutes ;煮湯步長為30分鐘
add work_time_minu,#5 ;再加熱步長為5分鐘
jp cp_max_data
add_15_minutes:
add work_time_minu,#15
jp cp_max_data
add_30_minutes:
add work_time_minu,#30
cp_max_data:
cp work_time_max,work_time_minu
jp nc,key_make_sure_ret
ld work_time_minu,work_time_min
jp key_make_sure_ret
inc_faith_time_10m:
add faith_time_m_L,#10
adc faith_time_m_H,#0
cp faith_time_m_H,#1
jp c,key_make_sure_ret
cp faith_time_m_L,#0E1h
jp c,key_make_sure_ret
clr faith_time_m_L
clr faith_time_m_H
key_make_sure_ret: ;允許按主鍵顯示溫度或壓力
;and allkeyflag,#clrkeyonflag ;清有鍵標志#keyonflag=00000010b確定有鍵按下的標志
;and allkeyflag,#clrsamekeyflag ;#samekeyflag=00001000b
and allkeyflag,#clr_samekey_on_flg
;====================多聲蜂鳴器程序============================
;
;
;
;
;===========================================================
beep_program: ;蜂鳴器
cp beep_tim_cnt,give_beep_times
jp nc,beep_isover
beep_is_do:
tm all_beep_flg,#beep_stop_flag ;
jp nz,deepfreeze_stop ;暫時(deepfreeze)停止
or p1,#1 ;開蜂鳴器
cp long_beep_cnt,beep_buf ;long_beep_cnt值來之時間程序,半秒為一單位
jp c,beep_program_ret
deepfreeze_stop:
or all_beep_flg,#beep_stop_flag
and p1,#11111110b ;關蜂鳴器
ld R0,beep_buf
add R0,beep_buf
cp long_beep_cnt,R0
jp z,open_beep_agian
jp beep_program_ret
beep_isover:
and p1,#11111110b ;關蜂鳴器
jp beep_program_ret
open_beep_agian:
inc beep_tim_cnt
clr long_beep_cnt
and all_beep_flg,#clr_beep_stop_flag
beep_program_ret:
nop
nop
ret
;========delay 10 nop
;
;======================
delay_10_nop:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
ret
;===========led顯示計算=============
;
;
;====================
led_count_prg:
tm work_flg0,#have_function_flg0
jp nz,dis_number_led ;有功能鍵按下顯示對應的顯示
clr function_key_cnt
call wait_work_dis ;待機顯示
jp led_count_prg_ret
dis_number_led: ;有功能鍵按下顯示對應的顯示
cp function_key_cnt,#quicks_cook_data
jp z,quicks_cook_dis
cp function_key_cnt,#criterion_cook_data
jp z,criterion_cook_dis
cp function_key_cnt,#cook_tile_rice_data
jp z,cook_tile_rice_dis
cp function_key_cnt,#cook_conjee_data
jp z,cook_conjee_dis
cp function_key_cnt,#cook_soup_data
jp z,cook_soup_dis
cp function_key_cnt,#again_heat_data
jp z,again_heat_dis
clr work_flg0
clr function_key_cnt
jp led_count_prg_ret
quicks_cook_dis: ;快煮顯示
ld led_data_buf0,#00000001b
call dis_faith_time ;有預約顯示預約時間
call run_number_led ;在工作顯示跑馬
call wait_work_dis ;待機顯示
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -