?? seg_sam.src
字號(hào):
nop
nop
jp led_count_prg_ret
criterion_cook_dis: ;精煮顯示
ld led_data_buf0,#00000010b
call dis_faith_time ;有預(yù)約顯示預(yù)約時(shí)間
call run_number_led ;在工作顯示跑馬
call wait_work_dis ;待機(jī)顯示
nop
nop
jp led_count_prg_ret
cook_tile_rice_dis: ;包子飯顯示
ld led_data_buf0,#00001000b
call dis_faith_time ;有預(yù)約顯示預(yù)約時(shí)間
call run_number_led ;在工作顯示跑馬
call wait_work_dis ;待機(jī)顯示
nop
nop
jp led_count_prg_ret
cook_conjee_dis: ;煮粥顯示
ld led_data_buf0,#00010000b
call dis_faith_time ;有預(yù)約顯示預(yù)約時(shí)間
call dis_work_time ;否則顯示工作顯示工作剩余時(shí)間
nop
nop
jp led_count_prg_ret
cook_soup_dis: ;煲湯顯示
ld led_data_buf0,#01000000b
call dis_faith_time ;有預(yù)約顯示預(yù)約時(shí)間
call dis_work_time ;否則顯示工作顯示工作剩余時(shí)間
nop
nop
jp led_count_prg_ret
again_heat_dis: ;再加熱顯示
ld led_data_buf0,#00100000b
call dis_faith_time ;有預(yù)約顯示預(yù)約時(shí)間
call dis_work_time ;否則顯示工作顯示工作剩余時(shí)間
nop
nop
jp led_count_prg_ret
led_count_prg_ret:
nop
nop
ret
;================待機(jī)顯示=======
;
;===========================
wait_work_dis:
clr led_data_buf0 ;否則做待機(jī)顯示
ld led_1_cnt,#12
ld led_2_cnt,#12
ld led_3_cnt,#12
call led_number
ret
;================顯示預(yù)約時(shí)間=====
;
;===========================
dis_faith_time:
tm work_flg0,#faith_work_flg0 ;設(shè)置約標(biāo)志
jp z,dis_faith_time_ret ;如沒預(yù)約標(biāo)志跳出,不顯示預(yù)約時(shí)間
ld R0,faith_time_m_L
ld R1,faith_time_m_H
ld R2,#60
ld R4,#1
call divide_X_start
ld led_1_cnt,R3
clr R1
call sixteen_trun_ten
ld led_2_cnt,R3
ld led_3_cnt,R2
call led_number
dis_faith_time_ret:
nop
nop
ret
;================顯示工作時(shí)間==
;
;===========================
dis_work_time:
tm work_flg0,#faith_work_flg0 ;設(shè)置約標(biāo)志
jp nz,dis_faith_time_ret ;如沒預(yù)約標(biāo)志跳出,不顯示預(yù)約時(shí)間
ld R0,work_time_minu
clr R1
ld R2,#60
ld R4,#1
call divide_X_start
ld led_1_cnt,R3
clr R1
call sixteen_trun_ten
ld led_2_cnt,R3
ld led_3_cnt,R2
call led_number
dis_work_time_ret:
nop
nop
ret
;================顯示跑馬==
;
;===========================
run_number_led:
tm work_flg0,#start_work_flg0
jp z,run_number_led_ret
clr R4
ld R5,run_number_cnt
ldc R0,#led_table1[RR4]
ld led_data_buf1,R0
ldc R0,#led_table2[RR4]
ld led_data_buf2,R0
ldc R0,#led_table3[RR4]
ld led_data_buf3,R0
run_number_led_ret:
nop
nop
ret
;===========led數(shù)碼刷新=====
;
;
;==========================
led_number:
clr R4
ld R5,led_1_cnt
ldc R0,#led_table[RR4]
ld led_data_buf1,R0
ld R5,led_2_cnt
ldc R0,#led_table[RR4]
ld led_data_buf2,R0
ld R5,led_3_cnt
ldc R0,#led_table[RR4]
ld led_data_buf3,R0
led_number_ret:
nop
nop
ret
;===========LED顯示程序==============
;4個(gè)毫秒刷新一次
;
;====================================
display_led:
inc led_cnt
un_inc_dis:
ld P2CONH,#01001010b ;p2設(shè)為輸出
ld P2CONL,#10101010b
ld P0CONL,#10101010b ;p0.0、1、2、3設(shè)為輸出
cp led_cnt,#1
jp z,dis_led_1
cp led_cnt,#2
jp z,dis_led_2
cp led_cnt,#3
jp z,dis_led_3
cp led_cnt,#4
jp z,dis_led_4
dis_led_0: ;點(diǎn)亮功能LED
clr led_cnt
p0_0_is_low
ld p2,led_data_buf0
and p0,#01111111b
jp dis_led_prg_ret
dis_led_1: ;點(diǎn)亮數(shù)碼管1
p0_1_is_low
ld p2,led_data_buf1
tm all_led_flg0,#dis_H_led_flg0
jp z,clr_led_H_up
or p0,#10000000b
jp dis_led_prg_ret
clr_led_H_up:
and p0,#01111111b
jp dis_led_prg_ret
dis_led_2: ;點(diǎn)亮數(shù)碼管2
p0_2_is_low
ld p2,led_data_buf2
tm all_led_flg0,#dis_H_led_flg0
jp z,clr_led_H_down
or p0,#10000000b
jp dis_led_prg_ret
clr_led_H_down:
and p0,#01111111b
jp dis_led_prg_ret
dis_led_3: ;點(diǎn)亮數(shù)碼管3
p0_3_is_low
ld p2,led_data_buf3
and p0,#01111111b
jp dis_led_prg_ret
dis_led_4:
p1_1_is_low
ld p2,led_data_buf4
and p0,#01111111b
dis_led_prg_ret:
nop
nop
ret
;========LED表
;
;
;==============================
led_table:
; hfabgcde
db 01110111b ;0
db 00010100b ;1
db 00111011b ;2
db 00111110b ;3
db 01011100b ;4
db 01101110b ;5
db 01101111b ;6
db 00110100b ;7
db 01111111b ;8
db 01111110b ;9
db 01101011b ;e
db 01101001b ;f
db 00001000b ;-
db 00000000b ;0
;========LED表1
;
;
;==============================
led_table1:
; fagedscb
db 11011011b ;0
db 00000011b ;1
db 01111001b ;2
db 01101011b ;3
db 10100011b ;4
db 11101010b ;5
db 11111010b ;6
db 01000011b ;7
;========LED表2
;
;
;==============================
led_table2:
; fagedscb
db 11011011b ;0
db 00000011b ;1
db 01111001b ;2
db 01101011b ;3
db 10100011b ;4
db 11101010b ;5
db 11111010b ;6
db 01000011b ;7
;========LED表3
;
;
;==============================
led_table3:
; fagedscb
db 11011011b ;0
db 00000011b ;1
db 01111001b ;2
db 01101011b ;3
db 10100011b ;4
db 11101010b ;5
db 11111010b ;6
db 01000011b ;7
;=============保溫程序================================
;描述:
;
;
;
;
;
;===============================================================
heat_and_warm:
heat_and_warm_ret:
nop
nop
ret
;================beep =============
short_beep1:
clr beep_tim_cnt
clr long_beep_cnt
ld beep_buf,#20
ld give_beep_times,#1
and all_beep_flg,#clr_beep_stop_flag
ret
;===============
long_beep1:
clr beep_tim_cnt
clr long_beep_cnt
ld beep_buf,#45
ld give_beep_times,#1
and all_beep_flg,#clr_beep_stop_flag
ret
;===============
long_beep2:
clr beep_tim_cnt
clr long_beep_cnt
ld beep_buf,#35
ld give_beep_times,#2
and all_beep_flg,#clr_beep_stop_flag
ret
;===============
long_beep3:
clr beep_tim_cnt
clr long_beep_cnt
ld beep_buf,#40
ld give_beep_times,#3
and all_beep_flg,#clr_beep_stop_flag
ret
;===============
long_beep4:
clr beep_tim_cnt
clr long_beep_cnt
ld beep_buf,#40
ld give_beep_times,#4
and all_beep_flg,#clr_beep_stop_flag
ret
;===============
long_beep5:
clr beep_tim_cnt
clr long_beep_cnt
ld beep_buf,#40
ld give_beep_times,#5
and all_beep_flg,#clr_beep_stop_flag
ret
;==============16進(jìn)制轉(zhuǎn)10進(jìn)制部分===========
;此部分作為一個(gè)子程序,供其他部分調(diào)用,
;入口參數(shù)為:R1高8位,R0為低8位
;出口參數(shù)為:R5放千位,R4放百位,R3放十位,R2放個(gè)位
;最大輸出為9999
;========================================
sixteen_trun_ten:
clr R2
clr R3
clr R4
clr R5
trun_sub_loop:
cp R0,#100
jp nc,low_sub_100
cp R1,#1
jp nc,low_sub_100
cp R0,#10
jp nc,low_sub_10
ld R2,R0
jp sixteen_trun_ten_ret
low_sub_100:
sub R0,#100
sbc R1,#0
inc R4
cp R4,#10
jp c,trun_sub_loop
clr R4
inc R5
jp trun_sub_loop
low_sub_10:
sub R0,#10
inc R3
jp trun_sub_loop
sixteen_trun_ten_ret:
nop
nop
ret
;=======X除Y計(jì)算=========================
;沒有小數(shù),R4大于1為決定四舍五入,R4為0時(shí)余數(shù)為1商加1
;有小數(shù),R4為1時(shí)算完后R0放剩數(shù)
;R0 放被除數(shù)低8位,算完后R0放剩數(shù)
;R1 放被除數(shù)高8位
;R2 放除數(shù)
;R3 放商
;=========================================
divide_X_start:
clr R3
divide_X_loop:
cp R0,R2
jp nc,inc_R3_divide
cp R1,#1
jp c,over_divide
sub R0,R2
sbc R1,#0
inc R3
jp divide_X_loop
over_divide:
rr R2 ;四舍五入
and R2,#01111111b
cp R4,#1
jp c,cp_R0_1
jp z,data_divide_X_ret
cp R0,R2
jp if_add_1
cp_R0_1:
cp R0,#1
if_add_1:
jp nc,again_inc_out
jp data_divide_X_ret
inc_R3_divide:
inc R3
sub R0,R2
jp divide_X_loop
again_inc_out:
inc R3
data_divide_X_ret:
nop
nop
ret
;=======X乘Y計(jì)算=========================
;求一個(gè)數(shù)X的Y倍 R0 放被乘數(shù)低位
; R1 放被乘數(shù)高位
;兩數(shù)之積小于 R2 放乘數(shù)
; R3 放積低位
; R4 放積高位
;被乘數(shù) 乘數(shù) 之積不能大于FFFF=65535
;=========================================
mul_start:
clr R3
clr R4
cp R2,#0
jp z,mul_loop_ret
mul_loop:
dec R2
add R3,R0
adc R4,R1
cp R2,#0
jp nz,mul_loop
mul_loop_ret:
nop
nop
ret
;====================================================================
;描述:
;===============================================================
Initcpu:
ld SYM,#00h ;關(guān)總中斷標(biāo)志
ld BTCON,#10100010b ;DISwatchdog ;BTCON為時(shí)基控制寄存器1010B=Disable watchdog timer
ld CLKCON,#00011000b ;No_divide_clock=00011000b ;資料的279頁(yè)
ld T0CON,#01001010b ;中斷頻率3.2M/256/125
ld T0DATA,#125
ld p0conh,#10011111b ;I/O口設(shè)置
or p0,#10000000b ;EN腳為高電平
ld p0conl,#11110101b ;I/O口設(shè)置
ld p1con,#00101010b ;中斷設(shè)置
ld p2conh,#01001010b ;I/O口設(shè)置
ld p2conl,#10101010b ;I/O口設(shè)置
Initcpu_RET:
ret
;====================================================================
Delay300ms:
ld R0,#250
Dloop:
nop
dec R0
jp nz,Dloop
Delay300ms_RET:
ret
;=============================初始化數(shù)據(jù)================================
;描述:95599 8146 59287 79713 周冬柯
;===============================================================
initdata:
ld R2,#0h
ld R0,#00h
Clrram10:
ld @R0,#00h
inc R0
inc R2
cp R2,#070h
jp nz,Clrram10
ret
;=====================================中斷==========================
;描述:中斷頻率為1KHz
;===============================================================
INT_9454:
Reg_save ;堆棧
ld SYM,#00h
tm T0CON,#00000001b
jp nz,time_a
jp INT_9454_ret
time_a:
and T0CON,#11110110b
inc one_ms_cnt ;一個(gè)豪秒加一
cp one_ms_cnt,#10
jp c,INT_9454_ret
or all_led_flg0,#refurbish_flg0
clr one_ms_cnt
inc ten_ms_cnt ;10個(gè)毫秒加一
cp ten_ms_cnt,#25
jp c,INT_9454_ret
clr ten_ms_cnt
inc quarter_s_cnt ;四分之一秒加一
inc run_number_cnt ;跑馬燈加一
cp run_number_cnt,#6
jp c,INT_9454_ret
clr run_number_cnt
INT_9454_ret:
nop
nop
Reg_restore ;壓棧
iret ;中斷返回
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -